关于Nginx的配置文件解析

(大部分内容是基于作者本人的理解和在网络上搜索到的资料整合而成)由于本人理解能力有限,若有不足或错误之处还请各位看官多多指点!

 

关于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. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值