win环境nginx实战设置详解

打印 上一主题 下一主题

主题 822|帖子 822|积分 2466

项目中经常利用nginx做负载均衡,接口路由、文件、文档的上传及下载、视频的代理播放等等,都离不开nginx的支持,今天我们分享一下其个利用场景。
1、设置文件 nd-nginx.conf
全局设置
  1. #全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
  2. #user  nobody;
  3. #user nginx nginx;#启动Nginx工作进程的用户和组
  4. worker_processes  1; #启动工作进程数数量
  5. #worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
  6. #worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
  7. #将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,
  8. #但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,
  9. #减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
  10. #error_log  logs/error.log;
  11. #error_log  logs/error.log  notice;
  12. #error_log  logs/error.log  info;
  13. #pid        logs/nginx.pid;
  14. #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,
  15. #使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
  16. events {
  17. #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,
  18. #作为反向代理的时候为(worker_connections * worker_processes)/2
  19.     worker_connections  1024;
  20. }
复制代码
文件上面全局设置
2、http 模块详解
  1. #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,
  2. #http块可以包含多个server块,而一个server块中又可以包含多个location块,
  3. #server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
  4. http {
  5. #通用配置....
  6. # N个server 模块虚拟服务器
  7. }
复制代码
3、http模块里面通用的设置
  1.     include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录,在响应报文中将指定的文件扩展名映射至MIME对应的类型
  2.     default_type  application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
  3.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  4.     #                  '$status $body_bytes_sent "$http_referer" '
  5.     #                  '"$http_user_agent" "$http_x_forwarded_for"';
  6.     #access_log  logs/access.log  main;
  7.         #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,
  8.         #sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,
  9.         #操作效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
  10.     sendfile        on;
  11.     #tcp_nopush     on;
  12.     #keepalive_timeout  0;
  13.     keepalive_timeout  65;  #长连接超时时间,单位是秒
  14.         #开启gzip压缩,若想关闭gzip压缩,则需要注释掉这句话,或者将on换成off
  15.     #gzip  on;
  16.     #配置允许压缩的页面的最小字节数,页面字节数从header头中的Content-Length中获>取,建议设置成1k,因为如果数据小于1k,他也会压缩成1k,这样会起到反作用。
  17.     #gzip_min_length 1k;
  18.     #4个16k的数据流用于存储gzip的压缩结果数据流
  19.     #gzip_buffers 4 16k;
  20.     #支持的http版本为1.1
  21.     #gzip_http_version 1.1;
  22.     #判断客户端是否支持gzip技术,若不支持则不会进行gzip处理
  23.     #gzip_vary on;
  24.     # 全局跨域配置
  25.         #为 * 表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求,也可以指定一个确定的URL
  26.         add_header 'Access-Control-Allow-Origin' '*' always;
  27.         #可选字段,为true表示允许发送Cookie。同时,发送时,必须设置XMLHttpRequest.withCredentials为true才有效,请求若服务器不允许浏览器发送,删除该字段即可。
  28.     add_header 'Access-Control-Allow-Credentials' 'true';
  29.         #代表允许使用指定的方法请求该地址
  30.     add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, PUT, OPTIONS';
  31.         #代表允许在请求该地址的时候带上指定的请求头,例如:Content-Type,Authorization,使用逗号(,)拼接起来放在双引号(")中
  32.         add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, X-Custom-Header, Access-Control-Expose-Headers, Token, Authorization';
  33.         add_header 'Access-Control-Allow-Headers'  '*';
  34.         #代表着在 1728000 秒之内不用请求该地址的时候 不需要再进行预检请求,也就是跨域缓存。
  35.     add_header 'Access-Control-Max-Age' 1728000;
复制代码
4、server 虚拟服务器详解及通用设置
  1. #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器
  2.     server {
  3.                 #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。
  4.                 #比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务
  5.         listen       80; #配置server监听的端口
  6.         server_name  localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。
  7.                 #是否在响应报文中的Content-Type显示指定的字符集,默认off不显示
  8.                 #charset charset | off;
  9.         #charset koi8-r;#设置编码格式,默认是俄语格式,建议改为utf-8
  10.                 #示例
  11.                 #charset utf-8;
  12.         #access_log  logs/host.access.log  main;
  13.                
  14.         autoindex on; # 显示目录,默认不开启
  15.         
  16.         autoindex_localtime on;# 显示文件修改时间 # 显示文件大小
  17.         
  18.         #多个 location 配置....
  19.   }
复制代码
5、server 中 多个location 设置 
  1.         #以http的方式转发mp4请求到指定web服务器。
  2.                 #访问 http://127.0.0.1/6d.mp4 就可以播放视频,而视频6d.mp4就在html/dist目录下。
  3.         location ~ /.mp4$ {
  4.                     #root E:\sh\nginx; # 你的文件目录
  5.             mp4;                        # 支持mp4
  6.             mp4_buffer_size 10m;#处理mp4初始内存大小
  7.             mp4_max_buffer_size 50m;#处理mp4最大内存大小
  8.         }
  9.         location / {
  10.             root   html/dist;#相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。
  11.             index  index.html index.htm;#默认的页面文件名称
  12.                         #给OPTIONS 添加 204 的返回,为了处理在发送POST请求时Nginx依然拒绝访问的错误,发送"预检请求"时,需要用到方法 OPTIONS,所以服务器需要允许该方法。
  13.                         if ($request_method = 'OPTIONS') {
  14.                                 return 204;
  15.                         }
  16.         }
  17.                 #proxy_pass的配置详解在后面
  18.         location /test {
  19.             proxy_pass http://127.0.0.1:9006;
  20.                         proxy_redirect off;#关闭重定向
  21.                         #proxy_redirect #旧地址 新地址;
  22.                         #proxy_redirect default;  #默认配置
  23.                         #若客户端发过来的请求header中有HOST这个字段,$http_host和$host表示的就是原始请求host,比如请求的时候HOST的值是http://demo.com,那么反代后还是http://demo.com。
  24.             proxy_set_header Host $host;
  25.             proxy_set_header X-Real-IP $remote_addr;#将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ip
  26.                         proxy_set_header X-forwarded-For $proxy_add_x_forwarded_for;#获得用户真实ip
  27.         }
  28.         location /ars {
  29.             proxy_pass http://192.8.3.211:9006;
  30.         }
  31.                 #/person/getPersonUrl
  32.         location /kvc {
  33.                         add_header 'Access-Control-Allow-Origin' '*' ;
  34.                         add_header 'Access-Control-Allow-Credentials' 'true';
  35.                         add_header 'Access-Control-Allow-Methods' '*';
  36.                         add_header 'Access-Control-Allow-Headers'  '*';
  37.                         add_header 'Access-Control-Max-Age' 1728000;
  38.                         proxy_pass http://192.8.3.211:1288;
  39.                 }
  40.                
  41.                 location /about {
  42.                           root /app/html; #必须要在html目录中创建一个名为about的目录才可以访问,否则报错。
  43.                 }
  44.                
  45.                 location /about { #注意about后不要加/ , 使用alias的时候uri后面如果加了斜杠,则下面的路径配置必须加斜杠,否则403
  46.                           alias /opt/html/about; #当访问about的时候,会显示alias定义的/opt/html/about里面的内容。
  47.                 }
  48.                
  49.                 #注意:location中使用root指令和alias指令的意义不同
  50.                 #root 给定的路径对应于location中的/uri 左侧的/
  51.                 #alias 给定的路径对应于location中的/uri 的完整路径
  52.                 #error_page  404              /404.html;#错误页面的文件名称
  53.                 # redirect server error pages to the static page /50x.html
  54.                 #
  55.                 error_page   500 502 503 504  /50x.html;#错误页面的文件名称
  56.                 location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。
  57.                         root   html;#定义默认页面所在的目录
  58.                 }
复制代码
6、第二个server,单独处理视频播放
  1. #serverd第二个服务虚拟服务器
  2.         #访问http://127.0.0.1:8088/6d.mp4 就可以播放视频,而视频6d.mp4就在E:/sh/nginx/nginx目录下。
  3.         server {
  4.         listen 8088;
  5.         server_name 127.0.0.1;
  6.         charset utf-8,gbk;
  7.         #root /usr/local/nginx/html/files; # 你的文件目录
  8.                 root E:/sh/nginx/nginx; # 你的文件目录
  9.         # 显示目录,默认不开启
  10.         autoindex on;
  11.         # 显示文件大小
  12.         # 显示文件修改时间
  13.         autoindex_localtime on;
  14.         location ~ /.mp4$ {
  15.             mp4;                        # 支持mp4
  16.             mp4_buffer_size 10m;
  17.             mp4_max_buffer_size 50m;
  18.         }
  19.         }
复制代码
7、第三个server 单独展示图片
  1. #作为下载服务器配置
  2.         #官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
  3.         #作为上传服务器
  4.         # 定义缓存目录
  5.     proxy_cache_path E:/sh/nginx/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
  6.         server {
  7.         listen 8081;
  8.         location ~* /.(jpg|jpeg|png|gif)$ {
  9.             # 开启缓存功能
  10.             proxy_cache my_cache;
  11.             
  12.             # 指定缓存时间(单位为秒)
  13.             proxy_cache_valid any 30d;
  14.             
  15.             # 如果未命中缓存则从后端服务器获取并进行缓存
  16.             #proxy_pass http://backend-server;
  17.             
  18.             # 其他相关配置...
  19.         }
  20.                 location ~* /.(css|js)$ {
  21.                         #1h代表一小时
  22.                         expires 1h;
  23.                          # 开启缓存功能
  24.             proxy_cache my_cache;
  25.             
  26.             # 指定缓存时间(单位为秒)
  27.             proxy_cache_valid any 30d;
  28.         }
  29.     }
复制代码
8、整个设置文件展示
  1. #全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。
  2. #user  nobody;
  3. #user nginx nginx;#启动Nginx工作进程的用户和组
  4. worker_processes  1; #启动工作进程数数量
  5. #worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
  6. #worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
  7. #将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,
  8. #但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,
  9. #减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。
  10. #error_log  logs/error.log;
  11. #error_log  logs/error.log  notice;
  12. #error_log  logs/error.log  info;
  13. #pid        logs/nginx.pid;
  14. #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,
  15. #使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
  16. events {
  17. #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,
  18. #作为反向代理的时候为(worker_connections * worker_processes)/2
  19.     worker_connections  1024;
  20. }#http块是Nginx服务器设置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,#http块可以包罗多个server块,而一个server块中又可以包罗多个location块,#server块可以设置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、毗连超时时间和单个链接的哀求上限等。http {    include       mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录,在响应报文中将指定的文件扩展名映射至MIME对应的类型
  21.     default_type  application/octet-stream; #除mime.types中文件类型外,设置其它文件默认类型,访问其它类型时会提示下载不匹配的类型文件
  22.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  23.     #                  '$status $body_bytes_sent "$http_referer" '
  24.     #                  '"$http_user_agent" "$http_x_forwarded_for"';
  25.     #access_log  logs/access.log  main;
  26.         #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,
  27.         #sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,
  28.         #操作效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。
  29.     sendfile        on;
  30.     #tcp_nopush     on;
  31.     #keepalive_timeout  0;
  32.     keepalive_timeout  65;  #长连接超时时间,单位是秒
  33.         #开启gzip压缩,若想关闭gzip压缩,则需要注释掉这句话,或者将on换成off
  34.     #gzip  on;
  35.     #配置允许压缩的页面的最小字节数,页面字节数从header头中的Content-Length中获>取,建议设置成1k,因为如果数据小于1k,他也会压缩成1k,这样会起到反作用。
  36.     #gzip_min_length 1k;
  37.     #4个16k的数据流用于存储gzip的压缩结果数据流
  38.     #gzip_buffers 4 16k;
  39.     #支持的http版本为1.1
  40.     #gzip_http_version 1.1;
  41.     #判断客户端是否支持gzip技术,若不支持则不会进行gzip处理
  42.     #gzip_vary on;
  43.     # 全局跨域配置
  44.         #为 * 表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求,也可以指定一个确定的URL
  45.         add_header 'Access-Control-Allow-Origin' '*' always;
  46.         #可选字段,为true表示允许发送Cookie。同时,发送时,必须设置XMLHttpRequest.withCredentials为true才有效,请求若服务器不允许浏览器发送,删除该字段即可。
  47.     add_header 'Access-Control-Allow-Credentials' 'true';
  48.         #代表允许使用指定的方法请求该地址
  49.     add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, PUT, OPTIONS';
  50.         #代表允许在请求该地址的时候带上指定的请求头,例如:Content-Type,Authorization,使用逗号(,)拼接起来放在双引号(")中
  51.         add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, X-Custom-Header, Access-Control-Expose-Headers, Token, Authorization';
  52.         add_header 'Access-Control-Allow-Headers'  '*';
  53.         #代表着在 1728000 秒之内不用请求该地址的时候 不需要再进行预检请求,也就是跨域缓存。
  54.     add_header 'Access-Control-Max-Age' 1728000;
  55.                 #每个server用于定义一个虚拟主机,第一个server为默认虚拟服务器    server {                #设置一个虚拟机主机,可以包罗本身的全局快,同时也可以包罗多个location模块。                #比如本虚拟机监听的端口、本虚拟机的名称和IP设置,多个server 可以利用一个端口,比如都利用80端口提供web服务        listen       80; #设置server监听的端口        server_name  localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的设置历程匹配。                #是否在响应报文中的Content-Type体现指定的字符集,默认off不体现                #charset charset | off;        #charset koi8-r;#设置编码格式,默认是俄语格式,建议改为utf-8                #示例                #charset utf-8;        #access_log  logs/host.access.log  main;                        autoindex on; # 体现目次,默认不开启                autoindex_localtime on;# 体现文件修改时间 # 体现文件大小                #以http的方式转发mp4哀求到指定web服务器。                #访问 http://127.0.0.1/6d.mp4 就可以播放视频,而视频6d.mp4就在html/dist目次下。        location ~ /.mp4$ {                    #root E:\sh\nginx; # 你的文件目次            mp4;                        # 支持mp4            mp4_buffer_size 10m;#处理mp4初始内存大小,表示缓冲区大小为1 MB。这个值的设置可以根据服务器的性能和需求举行调整。            mp4_max_buffer_size 50m;#处理mp4最大内存大小,表示最大缓冲区大小为5 MB。一旦到达这个大小,Nginx 将开始向客户端发送视频数据,即使视频文件没有完全缓冲。        }        location / {            root   html/dist;#相当于默认页面的目次名称,默认是安装目次的相对路径,可以利用绝对路径设置。            index  index.html index.htm;#默认的页面文件名称                        #给OPTIONS 添加 204 的返回,为了处理在发送POST哀求时Nginx依然拒绝访问的错误,发送"预检哀求"时,需要用到方法 OPTIONS,所以服务器需要答应该方法。                        if ($request_method = 'OPTIONS') {                                return 204;                        }        }                #proxy_pass的设置详解区别 https://blog.csdn.net/jsxztshaohaibo/article/details/134578031        location /test {            proxy_pass http://127.0.0.1:9016;                        proxy_redirect off;#关闭重定向                        #proxy_redirect #旧地点 新地点;                        #proxy_redirect default;  #默认设置                        #若客户端发过来的哀求header中有HOST这个字段,$http_host和$host表示的就是原始哀求host,比如哀求的时候HOST的值是http://demo.com,那么反代后还是http://demo.com。            proxy_set_header Host $host;            proxy_set_header X-Real-IP $remote_addr;#将$remote_addr的值放进变量X-Real-IP中,此变量名可变,$remote_addr的值为客户端的ip                        proxy_set_header X-forwarded-For $proxy_add_x_forwarded_for;#获得用户真实ip        }        location /artemis {            proxy_pass http://192.8.3.211:9006;        }                #/person/getPersonUrl        location /kcvc {                        add_header 'Access-Control-Allow-Origin' '*' ;                        add_header 'Access-Control-Allow-Credentials' 'true';                        add_header 'Access-Control-Allow-Methods' '*';                        add_header 'Access-Control-Allow-Headers'  '*';                        add_header 'Access-Control-Max-Age' 1728000;                        proxy_pass http://192.8.3.211:1288;                }                                location /about {                           root /app/html; #必须要在html目次中创建一个名为about的目次才可以访问,否则报错。                }                                location /about { #留意about后不要加/ , 利用alias的时候uri反面如果加了斜杠,则下面的路径设置必须加斜杠,否则403                           alias /opt/html/about; #当访问about的时候,会体现alias定义的/opt/html/about里面的内容。                }                                #留意:location中利用root指令和alias指令的意义不同                #root 给定的路径对应于location中的/uri 左侧的/                #alias 给定的路径对应于location中的/uri 的完备路径                #error_page  404              /404.html;#错误页面的文件名称                # redirect server error pages to the static page /50x.html                #                error_page   500 502 503 504  /50x.html;#错误页面的文件名称                location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目次下。                        root   html;#定义默认页面地点的目次                }    }        #serverd第二个服务虚拟服务器
  56.         #访问http://127.0.0.1:8088/6d.mp4 就可以播放视频,而视频6d.mp4就在E:/sh/nginx/nginx目录下。
  57.         server {
  58.         listen 8088;
  59.         server_name 127.0.0.1;
  60.         charset utf-8,gbk;
  61.         #root /usr/local/nginx/html/files; # 你的文件目录
  62.                 root E:/sh/nginx/nginx; # 你的文件目录
  63.         # 显示目录,默认不开启
  64.         autoindex on;
  65.         # 显示文件大小
  66.         # 显示文件修改时间
  67.         autoindex_localtime on;
  68.         location ~ /.mp4$ {
  69.             mp4;                        # 支持mp4
  70.             mp4_buffer_size 10m;
  71.             mp4_max_buffer_size 50m;
  72.         }
  73.         }        #作为下载服务器配置
  74.         #官方文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
  75.         #作为上传服务器
  76.         # 定义缓存目录
  77.     proxy_cache_path E:/sh/nginx/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
  78.         server {
  79.         listen 8081;
  80.         location ~* /.(jpg|jpeg|png|gif)$ {
  81.             # 开启缓存功能
  82.             proxy_cache my_cache;
  83.             
  84.             # 指定缓存时间(单位为秒)
  85.             proxy_cache_valid any 30d;
  86.             
  87.             # 如果未命中缓存则从后端服务器获取并进行缓存
  88.             #proxy_pass http://backend-server;
  89.             
  90.             # 其他相关配置...
  91.         }
  92.                 location ~* /.(css|js)$ {
  93.                         #1h代表一小时
  94.                         expires 1h;
  95.                          # 开启缓存功能
  96.             proxy_cache my_cache;
  97.             
  98.             # 指定缓存时间(单位为秒)
  99.             proxy_cache_valid any 30d;
  100.         }
  101.     }}
复制代码
9、参考proxy_pass的设置详解区别
参考代理uri区别文章
到此,单体服务的多种利用场景从不同角度展示出来了,分享告一段落,反面会持续更新,敬请期待!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表