Nginx配置文件nginx.conf详解

Nginx 1682℃
#【全局块】配置影响nginx全局的指令。
#定义Nginx运行的用户和用户组
#user  nobody;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes  1;
#全局错误日志路径及级别,级别由低到高是:debug、info、notice、warn、error、crit
#error_log  logs/error.log  info;
#记录进程pid的文件
#pid        logs/nginx.pid;
#进程可打开的最大描述符数目,理论值是最多打开文件数(ulimit -n)与nginx进程数相除,但nginx分配请求不均匀,所以最好与ulimit -n 的值保持一致
#worker_rlimit_nofile 1024;
#【events块】配置影响nginx服务器或与用户的网络连接
events {
    #指定参考事件模型,可选:select(标准事件模型)、poll(标准事件模型)、kqueue(FreeBSD的高效事件模型)、epoll(Linux2.6+的高效事件模型)、/dev/poll(Solaris的高效事件模型)、Eventport(Solaris的高效事件模型)
    use epoll;
    #单个进程最大连接数,根据硬件调整,和前面工作进程配合起来用,尽量大
    worker_connections  1024;
    #保持活动超时时间
    keepalive_timeout 60;
    #客户端请求头部的缓冲区大小,必须设置为“系统分页大小(getconf PAGESIZE)”的整倍数。
    client_header_buffer_size 4k;
    #打开文件缓存数量,建议和上述“最大连接数”一致,inactive指经过多长时间文件没被请求后删除缓存。
    open_file_cache max=1024 inactive=60s;
    #多长时间检查一次缓存的有效性,默认是60s。
    open_file_cache_valid 80s;
    #缓存文件在指定时间内的最少使用次数,如果超过这个数字,文件描述符保留缓存中,否则将被移除。
    open_file_cache_min_uses 1;
    #当搜索一个文件时是否缓存错误信息,默认值off
    open_file_cache_errors on;
}
【http块】可以嵌套多个server,配置代理、缓存、日志等绝大多数功能和第三方模块的配置
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #载入文件扩展名与文件类型映射表
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;
    #默认编码
    #charset utf-8;
    #服务器名字的hash表最大值
    server_names_hash_max_size 512;
    #服务器名字的hash表大小
    server_names_hash_bucket_size 128;
    #如果Nginx检查语法提示需增大server_names_hash_max_size或server_names_hash_bucket_size,那么首要增大hash_max_size
    #客户端请求头部的缓冲区大小。可根据“系统分页大小(getconf PAGESIZE)”来设置
    client_header_buffer_size 4k;
    #大型客户端请求头缓冲区的数量和大小,优先使用client_header_buffer_size值,不够时才使用该值
    large_client_header_buffers 4 64k;
    #设定通过nginx上传文件的大小
    client_max_body_size 8m;
    #访问日志格式设定
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
        #日志格式用到的相关变量含义:
        #$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址(通常web服务器放在反向代理的后面时通过$remote_add拿到的IP地址是反向代理的iP地址。可以用$http_x_forwarded_for记录客户端的IP地址和客户端请求的服务器地址。)
        #$remote_user:用来记录客户端用户名称;
        #$time_local:用来记录访问时间与时区;
        #$request:用来记录请求的url与http协议;
        #$status:用来记录请求状态;成功是200,
        #$body_bytes_sent:记录发送给客户端文件主体内容大小;
        #$http_referer:用来记录从那个页面链接访问过来的;
        #$http_user_agent:记录客户浏览器的相关信息;
    #定义http服务器的访问日志路径和使用哪个格式    
    #access_log  logs/access.log  main;
    #开启高效文件传输模式,普通应用设为on,磁盘IO重负载应用(如下载),设为off。
    sendfile on;
    #开启目录列表访问,合适下载服务器,默认关闭。
    autoindex on;
    #开启nginx使用socke的TCP_CORK功能,此选项仅在使用sendfile的时候使用
    #tcp_nopush on;
    #开启nginx使用TCP_NODELAY功能
    #tcp_nodelay on;
    #长连接超时时间,单位是秒
    keepalive_timeout  65;
    #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    gzip on; #开启gzip压缩输出
    gzip_min_length 1k; #最小压缩文件大小
    gzip_buffers 4 16k;  #压缩缓冲区大小
    gzip_http_version 1.0; #压缩版本[1.0|1.1]
    gzip_comp_level 2; #压缩等级,范围1-9,越大压缩率越高
    gzip_types text/plain application/x-javascript text/css application/xml; #要压缩的MIME类型, #默认就已经包含text/html,就不用再写了,写上去会有一个warn。
    gzip_vary on; #和http头有关系,加个vary头,给代理服务器用的
    #开启限制IP连接数的时候需要使用
    #limit_zone crawler $binary_remote_addr 10m;
    #负载均衡配置
    upstream shili.com {
        #负载均衡分内置策略和扩展策略,再细分如下
        #1、轮询(内置默认)
        #每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
        server 192.168.80.121:80
        server 192.168.80.122:80
        #2、weight权重(内置),根据机器配置定义,越大被分配到的几率越大
        #server 192.168.80.121:80 weight=3;
        #server 192.168.80.122:80 weight=2;
        #3、ip_hash按来访ip的hash(内置),这样每个访客固定同一台后端服务器,可解决session问题
        #ip_hash;
        #server 192.168.0.14:88;
        #server 192.168.0.15:80;
        #4、fair按后端服务器的响应时间(扩展),响应时间短的优先分配
        #server server1;
        #server server2;
        #fair;
        #5、url_hash按访问url的hash(扩展),使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
        #server squid1:3128;
        #server squid2:3128;
        #hash $request_uri;
        #hash_method crc32;
        #另外每个设备的状态可设置为:
        #1.down:表示单前的server暂时不参与负载
        #2.weight:为weight越大,负载的权重就越大。
        #3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
        #4.fail_timeout:max_fails次失败后,暂停的时间。
        #5.backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
        #nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
        #client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
        #client_body_temp_path设置记录文件的目录 可以设置最多3层目录
        #location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
    }
    #【server块】配置虚拟主机
    server {
        listen  80; #监听端口
        server_name  localhost; #域名有多个时用空格隔开
        #charset utf-8; #设置字符集
        #keepalive_requests 120; #单连接请求上限次数
        #定义本虚拟主机的访问日志路径和使用哪个格式
        #access_log  logs/host.access.log  main;
        #【location块】配置路由、各种页面处理情况
        location / {
            root   html; #根目录
            index  index.html index.htm; #设置默认页
            deny 127.0.0.1;  #拒绝的ip
            allow 172.18.5.54; #允许的ip   
        }
        #将服务器404错误页面重定向到静态页面/404.html
        #error_page  404  /404.html;
        #将服务器错误页面重定向到静态页面/50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        #将PHP脚本反向代理到127.0.0.1:80
        location ~ \.php$ {
            proxy_pass   http://127.0.0.1; #代理转向服务器地址
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #以下是一些反向代理的配置,可选。
            proxy_set_header Host $host;
            #允许客户端请求的最大单文件字节数
            client_max_body_size 10m;
            #缓冲用户端请求的最大字节数
            client_body_buffer_size 128k;
            #表示使nginx阻止HTTP应答代码为400或者更高的应答。
            proxy_intercept_errors on;
            #代理连接后端超时时间
            proxy_connect_timeout 90;
            #代理发送数据给后端超时时间
            proxy_send_timeout 90;
            #代理读取后端服务器数据超时时间
            proxy_read_timeout 90;
            #设置代理服务器保存用户头信息的缓冲区大小
            proxy_buffer_size 4k;
            #设置用于读取应答的缓冲区数目和大小
            proxy_buffers 4 32k;
            #高负荷下缓冲大小(proxy_buffers*2)
            proxy_busy_buffers_size 64k;
            #设置在写入代理临时文件时数据的大小
            proxy_temp_file_write_size 64k;
        #}
        #将PHP脚本传递给在127.0.0.1:9000上监听的FastCGI服务器
        #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;
        #}
        #所有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;
        }
        #设置静态文件缓存时间
        location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        {
            expires 15d; 
        }
        #拒绝访问.htaccess文件
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    #基于IP、域名、端口的虚拟主机配置
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS服务器配置
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

转载请注明:零五宝典 » Nginx配置文件nginx.conf详解