一个较完成整的Nginx配置文件说明

nginx的配置文件说明

#运行nginx的用户
user  root;
#进程数,官方建议为cpu核数,auto为按需自动调整
worker_processes  auto;

#错误日志保存的路径
error_log  /data/ngxlog/error.log;
#不同级别日志分开存储,可配置不同日志路径
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定pid文件路径,默认为以下路径
#pid        logs/nginx.pid;

events {
	#处理网络消息事件驱动器模型
	#网上找到解析如下:
	#其支持的类型有:select、poll、kqueue、epoll、rtsing、/dev/poll以及eventport
	#* select:只能在Windows下使用,这个事件模型不建议在高负载的系统使用
	#* poll:Nginx默认首选,但不是在所有系统下都可用
	#* kqueue:这种方式在FreeBSD 4.1+, OpenBSD2.9+, NetBSD 2.0, 和 MacOS X系统中是最高效的
	#* epoll: 这种方式是在Linux 2.6+内核中最高效的方式
	#* rtsig:实时信号,可用在Linux 2.2.19的内核中,但不适用在高流量的系统中
	#* /dev/poll: Solaris 7 11/99+,HP/UX 11.22+, IRIX 6.5.15+, and Tru64 UNIX 5.1A+操作系统最高效的方式
	#* eventport: Solaris 10最高效的方式
    use epoll;
    #开启后同时接收多个新到达的网络连接
    multi_accept on;
    #每个work_process同时开启的最大连接数
    worker_connections  65535;
}


http {
	#定义nginx能识别的网络资源媒体类型(如,文本、html、js、css、流媒体等,cat conf/mime.types)
    include       mime.types;
    #定义默认的type,如果不定义改行,默认为text/plain
    default_type  application/octet-stream;

    #日志格式
    log_format main escape=json '{"@timestamp":"$time_iso8601",'
                         '"@fields":{'
                         '"remote_addr":"$remote_addr",'
                         '"remote_user":"$remote_user",'
                         '"body_bytes_sent":"$body_bytes_sent",'
                         '"request_time":"$request_time",'
                         '"status":"$status",'
                         '"request":"$request",'
                         '"request_method":"$request_method",'
                         '"http_referrer":"$http_referer",'
                         '"url":"$uri",'
                         '"request_body":"$request_body",'
                         '"body_bytes_sent":"$body_bytes_sent",'
                         '"http_x_forwarded_for":"$http_x_forwarded_for",'
                         '"http_user_agent":"$http_user_agent"}}';

    #接入日志,main格式,全局
    access_log  /data/ngxlog/access.log  main;
    #安全优化-隐藏版本号
    server_tokens off;
    #收到请求数据包后会立即响应ack,会增加小包的数量,但是可以提高响应速度。在及时性高的通信场景中应该会有不错的效果。如果设置为off,会增加通信的延时,但是会提高带宽利用率。在高延时、数据量大的通信场景中应该会有不错的效果
    tcp_nodelay    on;
    #保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.
    # server_names_hash_max_size 默认1024,server_names_hash_bucket_size 默认256
    # server_names_hash_max_size 1024;
    server_names_hash_bucket_size 256;
    
    #关闭反代缓冲,一收到后端的反馈就同时传给客户端。这个参数用来控制是否打开后端响应内容的缓冲区,如果这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。 但是无论proxy_buffering是否开启,对proxy_buffer_size都是生效的。
    #1、 proxy_buffering启用时,要提防使用的代理缓冲区太大。这可能会吃掉你的内存,限制代理能够支持的最大并发连接数。
    #2、对于基于长轮询(long-polling)的Comet 应用来说,关闭 proxy_buffering 是重要的,不然异步响应将被缓存导致Comet无法工作
    proxy_buffering off;
    #该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里.小的响应header通常位于这部分响应内容里边.
    proxy_buffer_size        128k;
    #该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台。proxy_buffers由缓冲区数量和缓冲区大小组成的。总的大小为number*size。若某些请求的响应过大,则超过_buffers的部分将被缓冲到硬盘(缓冲目录由_temp_path指令指定), 当然这将会使读取响应的速度减慢, 影响用户体验. 可以使用proxy_max_temp_file_size指令关闭磁盘缓冲.
    proxy_buffers            4 1m;
    #proxy_busy_buffers_size不是独立的空间,他是proxy_buffers和proxy_buffer_size的一部分。nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据(这部分的大小是由proxy_busy_buffers_size来控制的,建议为proxy_buffers中单个缓冲区大小的2倍),然后它继续从后端取数据,缓冲区满了之后就写到磁盘的临时文件中。
    proxy_busy_buffers_size 2m;

    #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据,单位秒
    #proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响应超时时间
    #proxy_read_timeout:连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
    #proxy_send_timeout :后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
    proxy_send_timeout       15;
    #临时文件由proxy_max_temp_file_size和proxy_temp_file_write_size这两个指令决定。 proxy_temp_file_write_size是一次访问能写入的临时文件的大小,默认是proxy_buffer_size和proxy_buffers中设置的缓冲区大小的2倍,Linux下一般是8k。proxy_max_temp_file_size指定当响应内容大于proxy_buffers指定的缓冲区时, 写入硬盘的临时文件的大小. 如果超过了这个值, Nginx将与Proxy服务器同步的传递内容, 而不再缓冲到硬盘. 设置为0时, 则直接关闭硬盘缓冲.
    proxy_temp_file_write_size 8m;
    #proxy_max_temp_file_size 0;
    
    #当上游服务器响应头回来后,可以根据响应状态码的值进行拦截错误处理,与error_page 指令相互结合。用在访问上游服务器出现错误的情况下。
    proxy_intercept_errors on;

    #定义与FastCGI服务器建立连接的配置,通常是php
    fastcgi_connect_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;

    #是否调用sendfile函数传输文件,默认为off,使用sendfile函数传输,可以减少user mode和kernel mode的切换,从而提升服务器性能。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
    sendfile        on;
    #该参数限定Nginx worker process每次调用sendfile()函数传输数据的最大值,默认值为0,如果设置为0则无限制。配合上边sendfile 选项一起使用。
    #sendfile_max_chunk 128k;
    #当tcp_nopush设置为on时,会调用tcp_cork方法进行数据传输。使用该方法会产生这样的效果:当应用程序产生数据时,内核不会立马封装包,而是当数据量积累到一定量时才会封装,然后传输。这样有助于解决网络堵塞问题。默认值为on。举例:快递员收快递、发快递,包裹累积到一定量才会发,节省运输成本。
    #tcp_nopush     on;
    
    #启用gzip
    gzip on;
    # 开始压缩的最小长度(再小就不要压缩了,意义不在)
    gzip_min_length  1000;
    #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip_disable "msie6";
    gzip_proxied any;
    #缓冲(压缩在内存中缓冲几块? 每块多大?)
    gzip_buffers     4 16k;
    # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
    gzip_http_version 1.1;
    #压缩级别(1-9,级别越高,压的越小,越浪费CPU计算资源)
    gzip_comp_level 4;
    # 对哪些类型的文件用压缩
    gzip_types       image/jpg text/plain application/x-javascript text/css application/xml image/png;
    # 是否传输gzip压缩标志
    gzip_vary on;

    #max指定缓存数量 inactive是指经过多长时间文件没被请求后删除缓存。
    open_file_cache max=100000 inactive=20s;
    #这个是指多长时间检查一次缓存的有效信息。也就是说即使我一直访问这个文件,30s后会检查此文件的更改信息是否变化,发现变化就更新
    open_file_cache_valid 30s;
    #open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的
    open_file_cache_min_uses 2;
    #文件错误是否也同样缓存
    open_file_cache_errors on;
    

    #该参数有两个值,第一个值设置nginx服务器与客户端会话结束后仍旧保持连接的最长时间,单位是秒,默认为75s。
	#第二个值可以省略,它是针对客户端的浏览器来设置的,可以通过curl -I看到header信息中有一项Keep-Alive: timeout=60,如果不设置就没有这一项。
	#第二个数值设置后,浏览器就会根据这个数值决定何时主动关闭连接,Nginx服务器就不操心了。但有的浏览器并不认可该参数。
    keepalive_timeout  65;

    #指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)。
    client_body_timeout 10s;
    #客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)。
    client_header_timeout 10;
    #如果(请求行+请求头)的大小限制
    client_header_buffer_size 128k;
    #浏览器在发送含有较大HTTP包体的请求时,其头部会有一个Content-Length字段,client_max_body_size是用来限制Content-Length所示值的大小的。这个限制包体的配置不用等Nginx接收完所有的HTTP包体,就可以告诉用户请求过大不被接受。会返回413状态码。例如,用户试图上传一个1GB的文件,Nginx在收完包头后,发现Content-Length超过client_max_body_size定义的值,就直接发送413(Request Entity Too Large)响应给客户端。
    large_client_header_buffers 4 128k;
    #client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Entity Too Large。就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值。
    client_max_body_size 300m;
    #Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中,在哪个临时文件中呢?client_body_temp 指定的路径中,默认该路径值是/tmp/。所以配置的client_body_temp地址,一定让执行的Nginx的用户组有读写权限。否则,当传输的数据大于client_body_buffer_size,写进临时文件失败会报错。
    client_body_buffer_size  512k;

    #定义一个叫“one”的记录区,总容量为 10M,以变量$binary_remote_addr作为会话的判断基准(即一个地址一个会话),外网NAT会受到影响
    #location 节点中可以通过 limit_conn   one  1; 进行限制,指定一个会话最大的并发连接数。
    #limit_conn_zone $binary_remote_addr zone=one:10m;

    #反向代理的上有服务器配置
    #每个upstream节点可配置多个服务器ip,可根据weight分配调用权重
    upstream shop{
        server 127.0.0.1:8080;
    }

    upstream logistics{
    	#后端服务器列表
        server 127.0.0.1:8080 weight=5;
        server 192.168.1.1:8080 weight=10;
    }

    upstream https_shop{
        server 127.0.0.1:8443;
    }

    upstream https_logistics{
        server 127.0.0.1:8443 weight=5;
        server 192.168.1.1:8443 weight=10;
    }

    #80端口服务器节点
    #可以根据server_name 配置响应的的域名,从而区分多个服务
    server {
        #端口
        listen       80;
        server_name mydomain.cn;

        charset utf8;

        #限制向客户端传送响应的速率限制。参数 rate 的单位是字节/秒
        #limit_rate 2m;        

     #   access_log  logs/host.access.log  main;

     	#匹配根路径
        location / {
        	#根目录
            root   /data/html;
            #默认文件
            index  index.html index.htm;
        }

        #匹配shop路径
        location ^~ /shop/ {
            #反向代理 shop的upstream
            proxy_pass http://shop;
            #设置反向代理请求的几个header
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #验证客户端请求的referers
            valid_referers none blocked mydomain.cn 192.168.12.11 192.168.11.15 localhost servicewechat.com;
            if ($invalid_referer) {
                    return 403;
            }
        }

        #匹配logistics路径
        location ^~ /logistics {
            proxy_pass http://logistics;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            valid_referers none blocked mydomain.cn 192.168.12.11 192.168.11.15 localhost servicewechat.com;
            if ($invalid_referer) {
                    return 403;
            }
        }

        #匹配Images路径
        location ^~ /Images {
        	#路径别名
            alias /data/resource/Images;
            autoindex on;
            access_log off;
            #限速4兆
            limit_rate 4m;
            valid_referers none blocked mydomain.cn 192.168.12.11 192.168.11.15 localhost servicewechat.com;
            if ($invalid_referer) {
                    return 403;
            }
        }

        #error_page  404              /404.html;

        # 重定向错误页
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    #443端口服务器节点,https服务
    server {
    	#开启ssl,https服务
        listen       443 ssl;
        server_name mydomian.cn; #填写绑定证书的域名
        #ssl 配置,这里参考了腾讯配置指导
        ssl_certificate /data/ssl/1_bundle.crt;
        ssl_certificate_key /data/ssl/2_.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
        ssl_prefer_server_ciphers on;

        location / {
            root   /data/html/;
            index  index.html index.htm index.php;
        }

        location ^~ /shop/ {
            proxy_pass https://https_shop;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            valid_referers none blocked mydomain.cn 192.168.12.11 192.168.11.15 localhost servicewechat.com;
            if ($invalid_referer) {
                    return 403;
            }
        }

        location ^~ /logistics {
            proxy_pass http://https_logistics;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            valid_referers none blocked mydomain.cn 192.168.12.11 192.168.11.15 localhost servicewechat.com;
            if ($invalid_referer) {
                    return 403;
            }
        }

        location ^~ /Images {
            alias /data/resource/Images;
            autoindex on;
            access_log off;
            limit_rate 4m;
            valid_referers none blocked mydomain.cn 192.168.12.11 192.168.11.15 localhost servicewechat.com;
            if ($invalid_referer) {
                    return 403;
            }
        }
    }

}

http节点内可以增加类似如下的include配置,nginx会去指定目录读取conf文件进行配置。

include /etc/nginx/conf.d/*.conf;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大橙Orange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值