nginx 部署常用配置项以及日常经验笔记

  由于在日常的开发中,经常遇到nginx相关的问题;对于相关的部分;觉得需要做个总结;避免类似问题重复处理等;


先来整体的配置,后续说明每一部分的作用;为啥这样写


http {
    include       mime.types;
    default_type  application/octet-stream;

    #1.传输加速,遇到了文件压缩传输慢的问题;可设置1相关的配置项

    #1.开启gzip压缩,可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度, 进而优化nginx性能;
    gzip on;
    # 1.1设置允许压缩的页面最小字节数,如果小于10k,不用压缩传输,没有意义,因为本来就很小
    gzip_min_length 10k;    
    # 1.2设置压缩缓冲区大小,此处设置4个16k内存作为压缩结果缓存
    gzip_buffers 4 16k;  
    # 1.3压缩版本    
    gzip_http_version 1.1;  
    # 1.4设置压缩比率;最小为1,处理速度快传输慢;9为最大压缩比,处理速度慢,传输速度快;可以选择0-9任意一个;节省带宽和消耗cpu的选择;这里选择折中 5
    gzip_comp_level 5;     
    # 1.5指定压缩类型
    gzip_types gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 
    # 1.6无论后端服务器的 headers 头返回什么信息,都无条件启用压缩
    gzip_proxied any;    

    #5.2负载均衡 方式2 ,upstream的配置块,展示的为权重方式,不配置默认为轮询

       upstream myserver{
        server backend1.example.com weight=1;
        server backend2.example.com weight=2;;
    }
    


    server {
        listen       443 ssl;
        server_name  localhost;


        #2.ssl配置,https添加密钥证书

        #2.1配置ssl证书地址
        ssl_certificate      /path/certificate.crt;
        #2.2配置私钥路径
        ssl_certificate_key  /path/private.key;
        

            #3.跨域配置;遇到服务跨域相关

        #location匹配; 优先级:1.= 精确匹配,2. ^~ 前缀匹配  3. ~/~* 正则匹配  4./ 通用匹配   因此通用匹配一般放在最后作为兜底匹配

        location / {
            # 3.1设置允许跨域的域名和端口 * 表示所有(和3.2进行二选一配置)
             add_header Access-Control-Allow-Origin *;
            # 3.2设置只允许某个域名访问(和3.1进行二选一配置)
             add_header Access-Control-Allow-Origin 'http://allowdomain.com:8080';
            # 3.3允许跨域的方法
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            # 3.4允许跨域的请求头
            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Accept,Origin';
            # 3.5是否跨域携带cookie
            add_header Access-Control-Allow-Credentials 'true';
            


            #4.经过代理后,客户端和web服务器增加了中间层,因此web无法直接拿到客户端ip,可以代理进行设置

            #4.1设置客户端真实的ip
            proxy_set_header  X-real-ip $remote_addr;
            #4.2设置增加转发记录(每经过一次代理转发,都会留下当时的ip,最后会留下转发记录的ip,逗号隔开)形式为:client,proxy1,proxy2
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #4.3设置Host;在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名
            proxy_set_header Host $host;


            #5.代理转发后的地址 ;也可更换负载均衡加权重的方式
          #5.2负载均衡 方式1 ,直接转发
            proxy_pass  http://proxy_address;

         #5.2负载均衡 方式2 ,upstream的配置块,展示的为权重方式,不配置默认为轮询

             proxy_pass  http://myserver;


      
     
            #6.如遇到websocket类似的长连接问题;导致长连接失效,可添加以下配置 开启长连接(服务存在websocket做nginx代理的时候遇到的问题)

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";


            #7 nginx超时下载问题;之前下载超过几分钟;(在测试环境没问题;项目启动nginx会出现nginx超时下载的问题;但是在服务器的内网是能下载下来的;主要是nginx自动开启了响应缓冲 proxy_buffering on 导致连接超时时间在缓冲的时候没有让读取相应的超时检测到)

            #7.1定义与代理服务器建立连接的超时。 需要注意的是,此超时通常不能超过 75 秒。
            proxy_connect_timeout  
            #7.2设置将请求传输到代理服务器的超时。 超时仅在两个连续的写入操作之间设置, 不用于传输整个请求。 如果代理服务器在此时间内没有收到任何内容, 连接已关闭。
            proxy_send_timeout 
            #7.3定义从代理服务器读取响应的超时。 超时仅在两个连续的读取操作之间设置, 不用于传输整个响应。 如果代理服务器在此时间内未传输任何内容, 连接已关闭。
            proxy_read_timeout 
            #7.4如果下载文件超过1G,可停用缓冲区;不然也可能导致下载失败;启用或禁用来自代理服务器的响应缓冲。
            proxy_buffering off|on 
            root   html;
            index  index.html index.htm;
        }
    }
}



http {
    include       mime.types;
    default_type  application/octet-stream;

    #1.传输加速,遇到了文件压缩传输慢的问题;可设置1相关的配置项


    #1.开启gzip压缩,可以使网站的css、js 、xml、html 文件在传输时进行压缩,提高访问速度, 进而优化nginx性能;
    gzip on;
    # 1.1设置允许压缩的页面最小字节数,如果小于10k,不用压缩传输,没有意义,因为本来就很小
    gzip_min_length 10k;    
    # 1.2设置压缩缓冲区大小,此处设置4个16k内存作为压缩结果缓存
    gzip_buffers 4 16k;  
    # 1.3压缩版本    
    gzip_http_version 1.1;  
    # 1.4设置压缩比率;最小为1,处理速度快传输慢;9为最大压缩比,处理速度慢,传输速度快;可以选择0-9任意一个;节省带宽和消耗cpu的选择;这里选择折中 5
    gzip_comp_level 5;     
    # 1.5指定压缩类型
    gzip_types gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 
    # 1.6无论后端服务器的 headers 头返回什么信息,都无条件启用压缩
    gzip_proxied any;    


    #5.2负载均衡 方式2 ,upstream的配置块,展示的为权重方式,不配置默认为轮询

       upstream myserver{
        server backend1.example.com weight=1;
        server backend2.example.com weight=2;;
    }
    



    server {
        listen       443 ssl;
        server_name  localhost;


        #2.ssl配置,https添加密钥证书


        #2.1配置ssl证书地址
        ssl_certificate      /path/certificate.crt;
        #2.2配置私钥路径
        ssl_certificate_key  /path/private.key;
        


            #3.跨域配置;遇到服务跨域相关


        #location匹配; 优先级:1.= 精确匹配,2. ^~ 前缀匹配  3. ~/~* 正则匹配  4./ 通用匹配   因此通用匹配一般放在最后作为兜底匹配

        location / {
            # 3.1设置允许跨域的域名和端口 * 表示所有(和3.2进行二选一配置)
             add_header Access-Control-Allow-Origin *;
            # 3.2设置只允许某个域名访问(和3.1进行二选一配置)
             add_header Access-Control-Allow-Origin 'http://allowdomain.com:8080';
            # 3.3允许跨域的方法
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            # 3.4允许跨域的请求头
            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,Accept,Origin';
            # 3.5是否跨域携带cookie
            add_header Access-Control-Allow-Credentials 'true';
            



            #4.经过代理后,客户端和web服务器增加了中间层,因此web无法直接拿到客户端ip,可以代理进行设置


            #4.1设置客户端真实的ip
            proxy_set_header  X-real-ip $remote_addr;
            #4.2设置增加转发记录(每经过一次代理转发,都会留下当时的ip,最后会留下转发记录的ip,逗号隔开)形式为:client,proxy1,proxy2
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #4.3设置Host;在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名
            proxy_set_header Host $host;



            #5.代理转发后的地址 ;也可更换负载均衡加权重的方式

          #5.2负载均衡 方式1 ,直接转发
            proxy_pass  http://proxy_address;

         #5.2负载均衡 方式2 ,upstream的配置块,展示的为权重方式,不配置默认为轮询

             proxy_pass  http://myserver;


      


     
            #6.如遇到websocket类似的长连接问题;导致长连接失效,可添加以下配置 开启长连接(服务存在websocket做nginx代理的时候遇到的问题)


            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";



            #7 nginx超时下载问题;之前下载超过几分钟;(在测试环境没问题;项目启动nginx会出现nginx超时下载的问题;但是在服务器的内网是能下载下来的;主要是nginx自动开启了响应缓冲 proxy_buffering on 导致连接超时时间在缓冲的时候没有让读取相应的超时检测到)


            #7.1定义与代理服务器建立连接的超时。 需要注意的是,此超时通常不能超过 75 秒。
            proxy_connect_timeout  
            #7.2设置将请求传输到代理服务器的超时。 超时仅在两个连续的写入操作之间设置, 不用于传输整个请求。 如果代理服务器在此时间内没有收到任何内容, 连接已关闭。
            proxy_send_timeout 
            #7.3定义从代理服务器读取响应的超时。 超时仅在两个连续的读取操作之间设置, 不用于传输整个响应。 如果代理服务器在此时间内未传输任何内容, 连接已关闭。
            proxy_read_timeout 
            #7.4如果下载文件超过1G,可停用缓冲区;不然也可能导致下载失败;启用或禁用来自代理服务器的响应缓冲。
            proxy_buffering off|on 
            root   html;
            index  index.html index.htm;
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值