码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx之——配置文件解析

时间:2014-06-08 02:31:34      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:linux   web   nginx   

主配置文件(nginx.conf):

user nginx nginx; #运行用户


worker_processes 8; #启动进程数,一般等于CPU的总核数或两倍,太多会占用CPU增高。


error_log /tol/app/nginx/logs/nginx_error.log crit; #定义错误日志文件及级别,有 [debug|info|notice|warn|error|crit]


pid /tol/app/nginx/logs/nginx.pid; #定义PID文件


worker_rlimit_nofile 51200; #和系统的单进程打开文件数一致,使用ulimit -SHn 65534 设置


events{

use epoll; #工作模式,有 [kqueue|rtsig|epoll|/dev/poll|select|poll]

    worker_connections 51200; #单进程最大连接数,程序最大连接数=worker_connections*worker_processes

}

http{

    include       mime.types; #文件扩展名与文件类型映射表


    default_type application/octet-stream; #设置默认类型是二进制流,当类型未定义时使用二进制流的方式。比如未加装PHP时,是不予解析,用浏览器访问则出现下载窗口

server_names_hash_bucket_size 128; #服务器名字的hash表大小,不能带单位

    client_header_buffer_size 128k; #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小

    large_client_header_buffers 4 128k; #客户请求头缓冲大小,4为个数,128k为大小,申请4个128k。nginx默认会用client_header_buffer_size这个buffer来读取header值.

如果header过大,它会使用large_client_header_buffers来读取.

如果设置过小HTTP头/Cookie过大 会报400 错误nginx 400 bad request.

如果超过buffer,就会报HTTP 414错误(URI Too Long).

nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request)。

    client_max_body_size 8m; #允许客户端请求的最大单个文件字节数(nginx上传文件的大小),若超出此值,报413 Request Entity Too Large


client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户,如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误


    sendfile on; #打开系统函数sendfile()支持,开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。

注意:如果图片显示不正常把这个改成off。

    tcp_nopush     on; #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用。参考:http://blog.csdn.net/zmj_88888888/article/details/9169227

也就是说tcp_nopush on 会设置调用tcp_cork方法。

这个也是默认的,结果就是数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞

    keepalive_timeout 60; #长连接超时时间,单位是秒


    tcp_nodelay on; #为了发送小数据,比如10B以下的数据,会封装一个带有40B的IP包。如果每次都将这些小数据封装成IP包,很容易造成网络拥塞,所以就可以设置是将多个小数据封装成一个包(tcp_nodelay off)还是封装这些小数据成一个包(tcp_nodelay on)。tcp_nodelay和tcp_nopush是互斥的。不过如果你同时设置了两个值的话,将会在第一个buf发送的时候,强制push数据,而第二个buf时,将会调用tcp_cork来打开nagle算法,也就是后面的都会应用tcp_nopush.

参考:http://www.pagefault.info/?p=228

#以上四项可以提高文件传输性能

    server_tokens off; #关闭报错时的Nginx版本显示


    gzip on; #开启gzip压缩输出


    gzip_min_length 1k; #从Content-Length中数值获取验证,小于1K会越压越大


    gzip_buffers     4 16k; #以16K为单位4倍的申请内存做压缩结果流缓存,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。


    gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)


    gzip_comp_level 2; #压缩比率1-9,1压缩比最小处理速度最快,9压缩比最大但处理最慢且耗CPU


    gzip_types       text/plain application/x-javascript text/css application/xml; #压缩类型,无论是否指定text/html总是会压缩


    gzip_vary on; #此选项可让前端的缓存服务,如squid缓存经过nginx压缩的数据


#limit_zone connlimit $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用,定义名为connlimit的并发连接数限制空间,存储10M的带有二进制IP的会话信息,每个会话信息是32bytes,10M应该可以记录320000个会话。配合limit_conn 使用。


    log_format access ‘$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地址;

$remote_user:用来记录客户端用户名称;

$time_local: 用来记录访问时间与时区;

$request: 用来记录请求的url与http协议;

$status: 用来记录请求状态;成功是200,

$body_bytes_s ent :记录发送给客户端文件主体内容大小;

$http_referer:用来记录从那个页面链接访问过来的;

$http_user_agent:记录客户浏览器的相关信息;

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。

反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;

    access_log off; #关闭访问日志


include /tol/app/nginx/conf/vhost/*.conf; #加载其他的配置文件

}



虚拟主机配置文件:

upstream zhuanti { #设定负载均衡的服务器列表,名称为zhuanti

             server 127.0.0.1:8040;

             } 

server {

    listen 80;

    server_name zhuanti.test.com;

    root /tol/htdocs/zhuanti/ROOT;

    index index.html index.jsp index.htm;

    #limit_conn connlimit 20; #限制一个IP只能最多只能发起20个连接,超过报 503 Service unavailable,与主配置文件里配置的名称对应。


    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {

      expires      1h; #缓存到客户端的浏览器一个小时

    }


    location / {

#autoindex on; 开启自动索引功能,一般用于可以下载文件的服务器

#autoindex_exact_size on|off; 设定索引时文件大小的单位,默认为on,单位是bytes,设为off时单位(B、KB、MB、GB)

#autoindex_localtime on|off; 开启以本地时间来显示文件时间的功能

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|bingbot|360Spider") { #$http_user_agent 匹配客户端agent信息

            proxy_pass http://ask2;

}

            proxy_pass      http://zhuanti/;

            proxy_redirect             off;

   #proxy_next_upstream  http_502 http_504 error timeout invalid_header; #如果后端服务器返回502、504、超时等错误自动将请求转发到upstream负载均衡池中的另一台服务器。

            proxy_set_header           Host $host;

            proxy_set_header           X-Real-IP $remote_addr;

            proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

#以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上

            client_max_body_size       50m;

            client_body_buffer_size    128k;

            proxy_connect_timeout      120; #nginx跟后端服务器连接超时时间_发起握手等候响应超时时间


            proxy_send_timeout         120; #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据


            proxy_read_timeout         120; #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)


            proxy_buffer_size          4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小


            proxy_buffers              4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置


            proxy_busy_buffers_size    64k; #高负荷下缓冲大小(proxy_buffers*2)


            proxy_temp_file_write_size 64k; #设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长

    }

access_log /tol/app/nginx/logs/zhuanti.log access;

location /nginxstatus {

            allow 127.0.0.1;

            deny all;

            stub_status on;

        access_log   off;

}

}


本文出自 “一行菜鸟上青天” 博客,请务必保留此出处http://rmeos.blog.51cto.com/761575/1423513

Nginx之——配置文件解析,布布扣,bubuko.com

Nginx之——配置文件解析

标签:linux   web   nginx   

原文地址:http://rmeos.blog.51cto.com/761575/1423513

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!