nginx配置文件及说明

你离开我真会死。 提交于 2020-01-07 08:19:56

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

# nginx在安装完成后,大部分参数就已经是最优化了,我们需要管理的东西并不多
#user  nobody;
#进程数,建议小于或者是等于CPU总核心数
#建议值 <= cpu核心数量,一般高于cpu数量不会带好处,也许还有进程切换开销的负面影响
worker_processes  2;

# 只记录更为严重的错误日志,可减少IO压力, 目前日志记录级别是warn  日志级别:debug | info | notice | warn | error | crit | alert | emerg
#似乎这样子配置错误级别了但是有时候还是会打印出warn级别错误的,不管了
error_log  logs/error.log  error;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;

# 每进程最大可打开文件描述符数量(linux上文件描述符比较广义,网络端口、设备、磁盘文件都是)
# 文件描述符用完了,新的连接会被拒绝,产生502类错误
# linux最大可打开文件数可通过ulimit -n FILECNT或 /etc/security/limits.conf配置
# 理论值 系统最大数量 / 进程数。但进程间工作量并不是平均分配的,所以可以设置的大一些
#worker_rlimit_nofile 655350 


# event指令与事件模型有关,配置处理连接有关信息
events {
    #单个进程最大连接数
    # 并发响应能力的关键配置值
    # 每个进程允许的最大同时连接数,work_connectins * worker_processes = maxConnection;
    # 要注意maxConnections不等同于可响应的用户数量,
    # 因为一般一个浏览器会同时开两条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数
    # 所以,做静态服务器时,一般 maxClient = work_connectins * worker_processes / 2
    # 做反向代理服务器时 maxClient = work_connectins * worker_processes / 4
    
    # 这个值理论上越大越好,但最多可承受多少请求与配件和网络相关,也可最大可打开文件,最大可用sockets数量(约64K)有关
    worker_connections  2048;
}

# http指令处理http请求
http {
    # mime type映射
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;

    #nginx日志格式的配置 如果有combined就是默认的意思,这里main就是主要的意思
    #'$remote_addr - $remote_user [$time_local] "$request" ' 用户地址ip地址--用户名  请求的URL,请求路径 
    #$status请求状态    $body_bytes_sent响应给用户的数据的大小   $http_referer" 原网页,指用户从那里来,比如从百度搜索点击链接而来
    #$http_user_agent是用户的浏览器的信息   $http_x_forwarded_for客户端的IP地址与remote_addr意思差不多
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #后面的mian得对应上面log_formate main 这里的main这个单词,这里是主配置文件的意思,也可以改为combined默认的意思
    #access_log  logs/access.log  main;
    # 关闭此项可减少IO开销,但也无法记录访问信息,不利用业务分析,一般运维情况不建议使用,
    #如果不需要查看访问日志必须设置为0ff因为如果不设置为off那么它会自动打印的,注释了都没有用的
    #access_log off;
    
    #不可以在这里配置错误日志,在前面配置
    #error_log logs/error.log warn;
    
    
    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
    #注意:如果图片显示不正常把这个改成off。
    # 启用内核复制模式,应该保持开启达到最快IO效率
    sendfile   on;
   
    
    # 简单说,启动如下两项配置,会在数据包达到一定大小后再发送数据
    # 这样会减少网络通信次数,降低阻塞概率,但也会影响响应及时性
    # 比较适合于文件下载这类的大数据包通信场景
    #tcp_nodelay on|off on禁用Nagle算法 
    #防止网络阻塞
    tcp_nopush     on; 
     #防止网络阻塞
    #tcp_nodelay on;
    
    # HTTP1.1支持持久连接alive
    # 降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值
    #长连接超时时间,单位是秒
    keepalive_timeout  50s; 
    
    #最大上传的大小是500M
    #client_max_body_size 500m; 
    
    
    #默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦
    #如果开启了反向代理,那么需要注意了,反向代理时候如果配置了压缩那么会卡死的
    #开启压缩   
    gzip  on; 
    
    #为指定的客户端禁用gzip功能,IE6或者更低版本禁用,IE6不支持压缩,为了兼容性
    gzip_disable "msie6"; 
    
    #判断客户端是否支持gzip压缩,如果不支持就不开启压缩
    #gzip_vary on;
    
    #gzip压缩用于http1.1协议
    #gzip_http_version 1.1;
    
    #gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。
    #这要求你预先压缩你的文件(在这个例子中被注释掉了),
    #从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了
    # gzip_static on; 
    
    #默认值: gzip_buffers 4 4k/8k
    #作用域: http, server, location
    #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。
    # 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
    #如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果
    gzip_buffers 4 16k;
    
    #Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
    #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求
    #off 代理不压缩,默认设置是off,但是测试的时候发现这个配置不起作用,还是压缩了  如果代理服务器已经将对应的文件压缩了,那么这里不会对其再次压缩的,如果没有压缩,则会压缩
    #gzip_proxied off; 
    
    #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。
    # 过短的内容压缩效果不佳,压缩过程还会浪费系统资源
    gzip_min_length 1024;
    
    #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置
    gzip_comp_level 6;
    
    #设置需要压缩的数据格式。下面例子中已经有一些了,你也可以再添加更多的格式。设置哪压缩种文本文件可参考 conf/mime.types   text/html无效了
    gzip_types  application/javascript text/plain text/css application/json application/x-javascript application/xml application/xml+rss text/javascript image/jpeg image/gif image/png; 
    
    
    #配置缓存
    #用proxy_cache_path指令,我们首先应该已经定义在文件系统中希望存储缓存的目录。
    #levels=参数指定缓存将如何组织
    #keys_zone=参数定义缓存区域的名字,我们称之为backcache。将会使用一块最大10M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数
    #我们是存储10 MB的key。对于每兆字节,Nginx可存储8000左右的条目。
    #MAX_SIZE参数设置实际缓存数据的最大尺寸。
    #inactive=1d 每个文件在1天内若不活跃(无请求)则从硬盘上淘汰  同时需要在nginx下创建一个cache的文件夹
    proxy_cache_path D:/nginx/other_nginx/nginx/nginx-1.9.5_using/cache levels=1:2 keys_zone=backcache:10m inactive=1d  max_size=500m;

    #proxy_cache_key。这个设置将设置用于存储缓存值的键。此键用于检查是否一个请求可以从高速缓存提供服务
    proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
    
    #proxy_cache_valid指令可以被指定多次。它依赖于状态代码值使我们能够配置多长时间存储。
    #在我们的例子中,我们对于后端返回200和302存储1天,404响应的一分钟过期
    proxy_cache_valid 200 302 1d;

    proxy_cache_valid 404 1m;
    
    
    
    
    
    
    # 静态文件缓存,打开文件的缓存
    # 最大缓存数量,文件未使用存活期
    #建议和打开文件数量一致, inactive是指经过多长时间文件没被请求后删除缓存
    #这个将为打开文件指定缓存,默认没有启用,max指定缓存数量,
    open_file_cache max=100000 inactive=20s; 
    
    # 验证缓存有效期时间间隔
     #这个是指多长时间检查一次缓存的有效信息
    open_file_cache_valid 30s;
    
    # 有效期内文件最少使用次数
    #定义了open_file_cache中指令参数不活动时间期间里最小的文件数
    open_file_cache_min_uses 2; 
    
    #指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,
    #这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置
    open_file_cache_errors on; 
    
    
    upstream localhosting {
        server localhost:8080 weight=5;     
        #server www.waterme.net:8080 weight=5;
        #server www.waterme.cn:8222 weight=5; 
        
        #没事还是加上ip_hash吧,不然有时候nginx会卡死的
        ip_hash;
    }
    
    server {
         # 监听端口
        listen       80;
        # 识别的域名
        server_name  localhost;
      

        charset utf-8;

        #access_log  logs/host.access.log  main;
        
        
        #所有静态文件由nginx直接读取不经过tomcat或resin       
        #location ~.*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$       
        #{ expires 15d; }  
        
        
        location ~.*\.(png)$ {
        #引用缓存,这里只是对远程的代理用的,而且可以用,意思就是第一次访问的时候没有缓存就范围远程的服务器,之后就有了缓存,下次访问请求的时候,就不会访问远程服务器了,直接使用缓存里面的内容
        #使用proxy_cache指令,就可以指定该backcache缓存区被用于这个位置。
        proxy_cache backcache;

        #proxy_cache_bypass指令被设置为$ http_cache_control变量。
        #这将包含一个指示器,用以指示该客户端是否被明确地请求一个最新的,非缓存版本。
        #设置此指令允许Nginx正确处理这些类型的客户端请求。无需进行进一步的配置。
        proxy_cache_bypass $http_cache_control;
        
        #X-Proxy-Cache的额外头。我们设置这个头部为$ upstream_cache_status变量的值。
        #这个设置头,使我们能够看到,如果请求导致高速缓存命中,高速缓存未命中,或者高速缓存被明确旁路。
        #这是对于调试特别有价值,也对客户端是有用的信息。
        add_header X-Proxy-Cache $upstream_cache_status;
        
        proxy_set_header Host $host;       
        proxy_set_header X-Real-IP $remote_addr;       
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       
        proxy_pass http://localhost:8080;  
        
        
        }
        
        
        
        location ~.*\.(js|css|jpg|jpeg|png|doc|gif|htm|html|bmp|swf|ioc|rar|zip|txt|flv|mid|ppt|pdf|xls|mp3|wma)$ {
        
        #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取,不过发布项目的时候得将项目也发到nginx的发布目录。这样做针对的是远程的动静分离,特别是负载均衡的时候更加需要使用了
        #也可以是后端服务器的项目地址,比如tomcat的,这样比较方便,不用将项目再次发布到nginx里面的,这样做针对与本地的动静分离
        #root    html;  
        root    D:/tomcat/7.65/apache-tomcat-7.0.65-windows-x86/apache-tomcat-7.0.65/webapps;
        
        #expires定义用户浏览器缓存的时间为15天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力        
        expires 30d; 
        }

        location / {
            #后端服务器数据回传时间(代理发送超时)  
            proxy_connect_timeout   60s; 
            
            #后端服务器数据回传时间(代理发送超时) 
            proxy_send_timeout      60s; 
            
            #连接成功后,后端服务器响应时间(代理接收超时)  
            proxy_read_timeout      60s; 
            
           
            
            # 真实的客户端IP
            #proxy_set_header   X-Real-IP        $remote_addr; 
            # 请求头中Host信息
            #proxy_set_header   Host             $host; 
            # 代理路由信息,此处取IP有安全隐患
            #proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            # 真实的用户访问协议
            #proxy_set_header   X-Forwarded-Proto $scheme;
            # 默认值default,
            # 后端response 302时 tomcat header中location的host是http://192.168.1.62:8080
            # 因为tomcat收到的请求是nginx发过去的, nginx发起的请求url host是http://192.168.1.62:8080
            # 设置为default后,nginx自动把响应头中location host部分替换成当前用户请求的host部分
            # 网上很多教程将此值设置成 off,禁用了替换,
            # 这样用户浏览器收到302后跳到http://192.168.1.62:8080,直接将后端服务器暴露给浏览器
            # 所以除非特殊需要,不要设置这种画蛇添足的配置
            #proxy_redirect default;
            
            
            #允许客户端请求的最大单文件字节数  
            client_max_body_size   10m; 
            
            
            #proxy_buffering:该指令控制缓冲是否启用。默认情况下,它的值是“on”。
            
            
            #缓冲区代理缓冲用户端请求的最大字节数
            client_body_buffer_size   128k;   
            
            
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            #从后端服务器的响应头缓冲区大小,它包含headers,和其他部分响应是分开的。
            #该指令设置响应部分的缓冲区大小。默认情况下,它和proxy_buffers是相同的尺寸,
            #但因为这是用于头信息,这通常可以设置为一个较低的值。
            proxy_buffer_size   4k; 
            
            #proxy_buffers缓冲区,网页平均在32k以下的设置
            #该指令控制代理响应缓冲区的数量(第一个参数)和大小(第二个参数)。
            #默认配置是8个缓冲区大小等于一个内存页(4K或者8K)。
            #增加缓冲区的数目可以让你缓冲更多信息。
            proxy_buffers   4 32k; 
            
            #高负荷下缓冲大小(proxy_buffers*2)
            #此指令设置标注“client-ready”缓冲区的最大尺寸。
            #而客户端可以一次读取来自一个缓冲区的数据,缓冲被放置在队列中,批量发送到客户端。
            #此指令控制允许是在这种状态下的缓冲空间的大小。
            proxy_busy_buffers_size   64k; 
            
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            #这是每个请求能用磁盘上临时文件最大大小。
            #这些当上游响应太大不能装配到缓冲区时被创建
            #没有设置缓存文件夹,所以不能直接设置这个,否则报错
            #proxy_max_temp_file_size 2048m;
            
            #这是当被代理服务器的响应过大时Nginx一次性写入临时文件的数据量。
            proxy_temp_file_write_size  64k;
        
            root   html;
            index  index.html index.htm;
            
            
            
        #本地动静分离反向代理配置       
        #所有jsp的页面均交由tomcat或resin处理       
        #location ~ .(jsp|jspx|do)?$ {       
        #proxy_set_header Host $host;       
        #proxy_set_header X-Real-IP $remote_addr;       
        #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       
        #proxy_pass http://127.0.0.1:8080;       
        #} 
   
       
        #把请求转发给后台web服务器,反向代理和fastcgi的区别是,反向代理后面是web服务器,fastcgi后台是fasstcgi监听进程,当然,协议也不一样。   
        # location / {   
        #    proxy_pass      http://127.0.0.1:8080;   
        #}         
        
        
        
        
            
        proxy_pass http://localhosting;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
            
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
            
            
        }

        #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 {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    
    
    
    # server 表示一个虚拟主机,一台服务器可配置多个虚拟主机
    server {
        listen       9090;
        server_name  localhost;
        # 一个关键设置,与url参数乱码问题有关
        charset utf-8;
        
        #配置对应虚拟主机的日志
        #access_log  logs/host.access.log  main;
        
        
    
        
    
        
   

        location /{
            #静态网页的地址html文件夹
            root   html;
            index  index.html index.htm;
            # deny all; 拒绝请求,返回403
            # allow all; 允许请求
            
            #开启自动列目录,前提添加需要在html文件夹里面没有index.html等之类设置的默认主页
            #估计目前不怎么需要开启自动列目录
            #autoindex on;
        }
        
        #解决重启或者是访问nginx的出现favicon错误createFile的错误
        location = /favicon.ico {
           log_not_found off;
        }
        
        #配置基本缓存,应该是在server里面配置,因为可以有多个server,每个server需要配置的缓存情况可能都不一样
        #当前目前下,不管前面路径是什么,只有文件的后缀是jpg,png,swf,gif那么就会自动进行下面的缓存配置  文件之间用竖线隔开
        location ~.*\.(jpg|png|swf|gif)$ {
            #表示上面设置的缓存30天后就会清除,因为是图片,所以常规是30天清除图片类的缓存
            expires 30d;  
        }
        
        #同时可以设置其他类型的文件的缓存比如js,css
        location ~.*\.(css|js)$ {
            #表示上面设置的缓存1小时后就会清除,因为是css,js,所以常规是1小时后清除
            expires 1d;
        }
        
        
        # 定义各类错误页
        #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 {
            root   html;
        }

       

       
    }


    
   

}
 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!