当前位置: > Linux服务器 > nginx >

关于Nginx的配置文件解析

时间:2016-12-09 20:30来源:linux.it.net.cn 作者:IT

关于Nginx的主配置文件(/etc/nginx/nginx.conf)

Nginx 的配置文件主要分为4部分:
main (全局设置)            -> 此部分设置的指令将影响其它所有设置
server (主机设置)          -> 主要用于指定 "主机" 和 "端口"
upstream (负载均衡设置)    -> 用于负载均衡location (URL 匹配特定位置的设置)                      
location (URL 匹配特定位置的设置)        -> 匹配网页文件的类型和位置
            
# vi  /etc/nginx/nginx.conf  (内容如下,有一部分为在原有基础之上添加上去的)


  1. #user  nobody;                              指定以哪个用户的身份运行服务 
  2. worker_processes  1;                    -->启动几个工作进程(最好等于CPU的核数,或二倍)) 
  3.  
  4. #error_log  logs/error.log;                 定义错误日志的存放位置 
  5. #error_log  logs/error.log  notice;         定义什么级别的错误才会记录到日志中(日志的输出级别有:debug、info、notice、warning、error、crit等) 
  6. #error_log  logs/error.log  info; 
  7.  
  8. #pid        logs/nginx.pid;                 nginx的PID文件存放位置 
  9.  
  10.  
  11. events {                                 在这里还可以添加 "use  epoll;" 来指定Nignx的工作模式,(Nginx支持的工作模式有 select、poll、epoll、kqueue、rtsig等) 
  12. #       use epoll;                          select 和 poll 都是标准的工作模式,epoll 和 kqueue 是高效的工作模式(epoll 用于linux上,kqueue 用于BSD上)        
  13.         worker_connections  1024;       --> 每一个工作进程能接受的连接个数(请求)  该值受系统进程最大打开文件数限制,需要使用命令"ulimit -n 50000"设置 (/etc/sysctl.conf中添加fs.file-max=是无效的,可添加至rc.local开机设定) 

    关于http的相关设定,若想要使用mail的功能,在编译的时候就需要指定 --with-mail   --with-mail_ssl_module   --without-mail_pop3_module  --without-mail_imap_module   --without-mail_smtp_module 这几个选项


  1. http { 
  2.     include       mime.types;                         实现对配置文件所包含的文件类型的设定,mine.types内定义了各文件类型映像 
  3.     default_type  application/octet-stream;           默认的数据类型,当类型未定义时使用二进制流的方式,比如未安装PHP时,是不予解析,用浏览器访问则出现下载窗口 
  4.  
  5.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '              定义日志的输出格式,默认是使用与apache相兼容的日志格式(common) 
  6.     #                  '$status $body_bytes_sent "$http_referer" '                           
  7.     #                  '"$http_user_agent" "$http_x_forwarded_for"'; 
  8.  
  9.     # log_format download '$remote_add - $remote_user [$time_local] "$reuest"' 
  10.     #                  '$status $body_bytes_sent "$http_referer" '                           
  11.     #                  '"$http_user_agent" "$http_range"' 
  12.     #                  '"$sent_http_content_range"'; 
  13.      
  14.     #access_log  logs/access.log  main;                    nginx的日志存放位置 ( main 是日志输出格式的名称,引用上面定义的日志格式)                    

  1. # client_max_body_size  20m;                     设置允许客户端请求的最大单个文件的字节数,超出此值,报413 Request Entity Too Large 
  2.     # client_header_buffer_size  32k;                用于指定来自客户端请求头的headerbuffer 大小,对于大多数请求,1KB 的缓冲区大小已经足够,如果自定义了消息头可以增加缓冲区的大小 
  3.     # large_client_header_buffers  4  32k;           "4" 为个数,"128k" 为大小,默认是4k。申请4个128k。当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request,这是很有可能是cookie中写入的值太大造成的,因为header中的其他参数的size一般比较固定,只有cookie可能被写入较大的数据,这时可以调大上述两个值,相应的浏览器中cookie的字节数上限会增大。    

  1. sendfile        on;              打开系统函数sendfile()的功能,将tcp_nopush和tcp_nodely两个指令设置为on 用于防止网络阻塞 
  2.    #tcp_nopush     on;             打开linux(仅linux下)下TCP_CORK,sendfile打开时才有效,用来发送系统HTTP response headers,设置该选项的目的是告诉TCP协议不要仅仅为了清空发送缓存而发送报文段。通常应该设置TCPNOPUSH插口选项。这样,当请求长度超过报文段最大长度时,协议就会尽可能发出满长度的报文段。这样可以减少报文段的数量,减少的程度取决于每次发送的数据量 
  3.     #tcp_nodelay    on;  
  4.      
  5.     #keepalive_timeout  0; 
  6.     keepalive_timeout  65;           保持连接超时时间 

      上述四项可以有效提高文件传输性能,用sendfile()函数来转移大量数据,协议会需预先解析数据包报头部分信息,正常情况下报头很小,而且套接字上设置了TCP_NODELAY。有报头的包将被立即传输,在某些情况下,因为这个包成功地被对方收到后需要请求对方确认。这样,大量数据的传输就会被延迟而且产生大量不必要的网络流量交换。     而如果我们在socket上设置了 TCP_CORK,就像个管道塞住塞子,则带有报头的包会填满数据,所有数据根据大小填充,自动通过数据包发送出去,但在数据完成传输时,需要打开塞子。      如果你能一次发送HTTP响应的头和正文等数据集合,那这样就能使这些数据不存在延迟


  1. # gzip  on;                              是否启用压缩功能,实时压缩输出数据流 
  2.     # gzip_min_length        1k;             允许压缩的页面的最小字节数,建议设置成大于 1K 的字节数 ( 页面字节数从header 头的Content-Length 中获取的,默认值为 0 ,不管页面多大都进行压缩) 
  3.     # gzip_buffers       4   16k;            申请4 个单位为 16K 的内存作为压缩数结果的缓存。(默认是申请与原始数据大小相同的内存空间来存储gzip的压缩结果) 
  4.     # gzip_http_version      1.1;            设置识别HTTP协议的版本,默认是1.1,大部分浏览器已经支持gzip解压 
  5.     # gzip_comp_level        2;              设置压缩比(1 压缩比最小,9 压缩比最大) 
  6.     # gzip_types         text/plain  application/x-javascript text/css  application/xml;   指定压缩的类型(无论是否指定, "text/html" 类型一定是会被压缩的) 
  7.     # gzip_vary          on;                 可以让前端缓存服务器缓存经过 gzip 压缩的页面,如:Squid 
  8.      
  9.     # gzip_proxied expired no-cache no-store private no_last_modified no_etag auth any        该选项在做反向代理时设定压缩,后面参数为验证的header头信息,再做相应的压缩处理,关闭为off 

  1. # limit_zone  connlimit  $binary_remote_addr  10m;     定义名为connlimit的并发连接数限制空间,存储10M的带有二进制IP的会话信息,每个会话信息是32bytes,10M应该可以记录320000个会话。配合limit_conn 使用。 
  2.    
  3.     server {                            --> 关于虚拟主机的相关设定 
  4.         listen       80;                        监听的端口 
  5.         server_name  localhost;                 指定IP地址或域名(主机名,多域名用空格隔开) 
  6.  
  7.         #limit_conn connlimit 20;                限制一个IP只能最多只能发起20个连接,超过报 503 Service unavailable 
  8.         #charset koi8-r;                         设置网页的默认编码格式 
  9.  
  10.         #access_log  logs/host.access.log  main;        可以自定义虚拟主机的日志存放位置,main 用于指定输出格式 
  11.  
  12.         location / {                                定义路径(和apache下的DocumentRoot 和 Directory 类似)URL的根,网站的根目录 
  13.             root   html;                            通过 URL的根所能访问到的每一个网页文件位于当前操作系统的哪个位置(相对于软件的安装目录,也可以指定绝对路径) 
  14.             index  index.html index.htm;            设定默认访问的首页地址 
  15.         } 
  16.  
  17.         #location /downloads/ { 
  18.         #        limit_rate 20k;                     为某个特定路径限速 
  19.         #        root /web/downloads/; 
  20.         #} 
  21.          
  22.         #error_page  404              /404.html; 
  23.  
  24.         # redirect server error pages to the static page /50x.html 
  25.         # 
  26.         error_page   500 502 503 504  /50x.html;                        请求错误时,响应的错误页面        
  27.         location = /50x.html {                                          模式匹配 
  28.             root   html; 
  29.         } 

  1. # proxy the PHP scripts to Apache listening on 127.0.0.1:80     --> 反向代理 
  2.         # 
  3.         #location ~ \.php$ {                                    php与nginx 结合使用时就需要启用 
  4.         #    proxy_pass   http://127.0.0.1;                     把用户请求的php页面的所有内容转交给本地服务器的哪个端口来处理 
  5.         #} 
  6.  
  7.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        通过FastCGI的方式与PHP程序沟通 
  8.         # 
  9.         #location ~ \.php$ { 
  10.         #    root           html; 
  11.         #    fastcgi_pass  unix:/tmp/php-cgi.sock;           SOCKET方式转交fastcgi处理
  12.         #    fastcgi_pass   127.0.0.1:9000;                  9000端口方式fastcgi ,把用户请求的php页面的所有内容提交给本地服务器的9000端口来处理 
  13.         #    fastcgi_index  index.php; 
  14.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
  15.         #    include        fastcgi_params; 
  16.         #} 
  17.  
  18.         # deny access to .htaccess files, if Apache's document root         用户授权访问控制 
  19.         # concurs with nginx's one 
  20.         # 
  21.         #location ~ /\.ht { 
  22.         #    deny  all;                                       拒绝所有用户访问以 ".ht" 开头的文件 
  23.         #} 
  24.     } 

 


  1. # another virtual host using mix of IP-, name-, and port-based configuration            --> 定义其它的虚拟主机,默认只有一个虚拟主机 
  2. # 
  3. #server {                                            
  4. #    listen       8000; 
  5. #    listen       somename:8080; 
  6. #    server_name  somename  alias  another.alias; 
  7.  
  8. #    location / { 
  9. #        root   html; 
  10. #        index  index.html index.htm; 
  11. #    } 
  12. #} 

 


  1. # HTTPS server                  基于SSL的相关设定 
  2.     # 
  3.     #server { 
  4.     #    listen       443;          监听的端口 
  5.     #    server_name  localhost; 
  6.  
  7.     #    ssl                  on; 
  8.     #    ssl_certificate      cert.pem; 
  9.     #    ssl_certificate_key  cert.key; 
  10.  
  11.     #    ssl_session_timeout  5m; 
  12.  
  13.     #    ssl_protocols  SSLv2 SSLv3 TLSv1; 
  14.     #    ssl_ciphers  HIGH:!aNULL:!MD5; 
  15.     #    ssl_prefer_server_ciphers   on; 
  16.  
  17.     #    location / { 
  18.     #        root   html; 
  19.     #        index  index.html index.htm; 
  20.     #    } 
  21.     #} 
  22.  
  23. }  



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容