Nginx 参数配置优化

Nginx 参数配置优化,提升 Nginx 效率与稳定性,官方文档:http://nginx.org/en/docs/

# 使用的用户和组
# user  nobody;
# user root root;

# 指定工作衍生进程数(一般等于 CPU 的总核数或总核数的两倍,例如两个四核 CPU ,则综合数为 8 。通过命令 ps -ef|grep nginx 可以看出来设置的是几个)
worker_processes  1;
#worker_processes  8;

# 指定错误日志存放的路径,错误日志记录级别可选项为:[debug|info|notice|warn|error|crit],默认是 crit ,记录的日志数量从 crit 到 debug ,由少到多
# error_log  logs/error.log;
# error_log  logs/error.log  notice;
# error_log  logs/error.log  info;

# 指定 pid 存放的路径
# pid        logs/nginx.pid;

# events settings
events {
    # 设置网路连接序列化,防止惊群现象发生,默认为on 惊群现象:一个网路连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能。
    # accept_mutex on;   
    # 设置一个进程是否同时接受多个网络连接,默认为off
    multi_accept on;
    # 使用的网络 I/O 模型, Linux 系统推荐采用 epoll 模型, FreeeBSD 系统推荐采用 kqueue 模型, Windows 系统不指定。
    # use epoll;
    # 允许的连接数
    worker_connections  1024;
}

# 遵循 http 协议的服务器全局设置
http {
    include       mime.types;
    default_type  application/octet-stream;

    # 设置使用的字符集,如果一个网站有多种字符集,请不要随便设置,应让程序员在 HTML 代码中通过 Meta 标签设置
    # charset utf-8;

    # 设置客户端能够上传的文件大小,注意要与应用程序中的文件大小限制兼容。
    # client_max_body_size 30m;

    # 关闭日志记录
    # access_log off;
    # 自定义日志记录格式设置, main 为名字,在 access_log 命令中引用
    # log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    # 指定日志存放路径,如果想使用默认的 combined 格式记录日志,可以使用 access_log logs/access.log combined; 以下是使用 log_format 自定义的格式记录日志的。
    # access_log  logs/access.log  main;

    sendfile        on;
    # tcp_nopush     on;

    # keepalive_timeout  0;
    keepalive_timeout  120;

    # 开启 gzi p压缩设置(只能在 http 模块中设置)
    # 该指令用于开启或关闭 gzip 模块( on/off )
    # gzip  on;
    # 设置允许压缩的页面最小字节数,页面字节数从 header 头的 content‐length 中进行获取。默认值是 0,不管页面多大都压缩。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大。
    # gzip_min_length 1k;
    # 设置系统获取几个单位的缓存用于存储 gzip 的压缩结果数据流。4 16k 代表以 16k 为单位,安装原始数据大小以 16k 为单位的 4 倍申请内存。
    # gzip_buffers  4 16k;
    # 识别http的协议版本(1. 0/1. 1)
    # gzip_http_version 1.1;
    # gzip 压缩比,1压缩比最小处理速度最快,9 压缩比最大但处理速度最慢(传输快但比较消耗 cpu )
    # gzip_comp_level 2;
    # 匹配 mime 类型进行压缩,无论是否指定,  “text/html” 类型总是会被压缩的。
    # gzip_types application/x-javascript text/css application/xml;
    # 和 http 头有关系,加个 vary 头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的 HTTP 头来判断,是否需要压缩。 跟 Squid 等缓存服务有关, on 的话会在 Header 里增加"Vary: Accept‐Encoding"
    # gzip_vary on;
    # IE6 对 Gzip 不怎么友好, 不给它 Gzip 了
    # gzip_disable "MSIE [ 1‐6] \. ";

    # 用于设置如果出现指定的 HTTP 错误状态码,则返回指定的 url 页面
    # error_page  404              /404.html;
    # error_page  500 502 503 504  /50x.html;

    # upstream 负载均衡器 1 设置,用来处理普通请求。
    upstream tomcat_test {
        server 127.0.0.1:8080 weight=1;
        server 127.0.0.1:8081 weight=1;
	
        # 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
        # server 127.0.0.1:8080;
        # server 127.0.0.1:8081;

	    # 权重(weight):指定轮询几率, weight 和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大,如下分别是 30%,70%。
        # server 127.0.0.1:8080 weight=3;
        # server 127.0.0.1:8081 weight=7;

        # IP 分配(ip_hash):每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
	    # ip_hash;
	    # server 127.0.0.1:8080;
        # server 127.0.0.1:8081;

	    # URL 分配(url_hash):(需要事先安装插件)每个请求按访问地址 url 的 hash 结果分配,能实现同一个 url 访问同一个服务器,也就是根据 url 进行负载,后端服务器为缓存时比较有效。
	    # hash $request_uri;
	    # hash_method crc32;
	    # server 127.0.0.1:8080;
        # server 127.0.0.1:8081;

	    # 响应时间(fair):(需要事先安装插件)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
	    # fair;
	    # server 127.0.0.1:8080;
        # server 127.0.0.1:8081;

        # server 指令的参数为:
        # 1. down:表示当前的服务暂不参于负载。如:server 127.0.0.1:9080 down;
        # 2. backup:备用服务器,当其它所有非 backup 机器 down 或者忙时,才会请求 backup 机器。如:server 127.0.0.1:9081 backup;
        # 3. weight:设置服务器的权重,默认值是1,权重值越大那么该服务器被访问到的几率就越大。
        # 4. max_fails:允许请求失败的次数,默认为 1(这意味着一发生错误就认为服务器挂掉),如果把 max_fails 设为 0 则表示把这个检查取消。当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。
        # 5. fail_timeout:max_fails 次失败后,暂停的时间,默认是 10 秒。
        # 4 和 5 一般关联使用,举个例子:server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; 表示如果服务器 127.0.0.1:8080 在 30 秒内出现了 3 次错误,那么就认为这个服务器工作不正常,从而在接下来的 30 秒内 nginx 不再去访问这个服务器。
    }

    # upstream 负载均衡器2设置,主要用来处理文件的上传和下载,可以理解为一个文件服务器,所有文件相关的上传和下载都通过这组服务器。
    upstream tomcat_test_static {
        server 127.0.0.1:8082 weight=1;
    }

    # server 虚拟主机设置,可以设置多个:基于 IP 的虚拟主机,基于域名的虚拟主机
    # 虚拟主机-基于域名,反向代理 tomcat_test 和 tomcat_test_static 这两组服务器
    server {
        # 监听的端口
        listen       80;
        # 主机名称
        server_name  localhost;

        # 设置 Nginx 的默认首页文件
        # index index.html index.htm index.jsp index.do;

        # root D:/nginx-1.16.0;
        
        # 配置该虚拟机的字符设置,如果不配置继承自 http 中的 charset 设置
        # charset koi8-r;

        # 访问日志文件设置,如果 server 虚拟机中不设置,则继承 http 模块中的 access_log 的设置
        # if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
        #     set $date_yyyy_MM_dd $1;
        # }
        # access_log logs/access-$date_yyyy_MM_dd.log combined;
        # access_log logs/access.log  main;

        # location settings,可以用在 server 节点中。
        # 静态资源服务器 location,正则匹配,~为区分大小写,~*为不区分大小写
        location ~*/test/static/ {
            # 方法1
	        proxy_pass http://tomcat_test_static;
	        # 方法2:指定相对路径,相对 nginx 安装目录下的 mydata 为根目录
            # 如 http://127.0.0.1/test/static/common/images/1.png 会映射到 nginx 安装目录 /mydata/test/static/common/images/1.png
            # root mydata;
            # 方法3:指定绝对路径,注意 windows 系统下分隔符用 /
            # 如 http://127.0.0.1/test/static/common/images/1.png 会映射到 D:/apache-tomcat-8.0.53-8082/webapps/test/static/common/images/1.png
            # root D:/apache-tomcat-8.0.53-8082/webapps;

            # 开启目录浏览权限,默认是 off
            # autoindex on;
        }

        # 普通服务器 location
        location / {
            # 请求转发的地址,/ 表示拦截到所有的请求
	        proxy_pass http://tomcat_test;
	        # 设置当发生重定向请求时,nginx 自动修正响应头数据(默认是 Tomcat 返回重定向,此时重定向的地址是 Tomcat 的地址,我们需要将之修改    使之成为 Nginx 的地址)
	        proxy_redirect default;
	        # 变量 $host 等于客户端请求头中的 Host 值。
            proxy_set_header Host $host;
            # 后端的 web 服务器可以通过 X-Forwarded-For 获取真实的IP地址, $remote_addr 客户端的 ip 地址
            proxy_set_header X-Forwarded-For $remote_addr;
            
            # HTTP 代理模块 proxy,主要是用来转发请求到其他服务器
            # 如果后端服务器返回 502,504,执行超时等错误,自动将请求转发到 upstream 负载均衡池中的另一台服务器,实现 failover 。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
        }

        # image expires settings
        # expires 属于 http Header 模块,主要用来 Nginx 返回给用户网页添加附件的 header 信息,可以在 http,server,location 中使用
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires 30d;
        }

        # js/css/html expires settings
        # expires 属于 http Header 模块,主要用来 Nginx 返回给用户网页添加附件的 header 信息,可以在 http,server,location 中使用
        location ~ .*\.(js|css|html)?$
        {
            expires 2h;
        }

        # 如果 http 模块设置了,则继承。此处设置了则覆盖。
        # error_page  404              /404.html;
        # error_page  500 502 503 504  /50x.html;
        #location = /50x.html {
        #    root   html;
        #}
    }
}


扫码关注微信公众号 程序员35 ,获取最新技术干货,畅聊 #程序员的35,35的程序员# 。独立站点:https://cxy35.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值