nginx.conf配置详解

ginx的配置文件nginx.conf配置详解如下:

user nginx nginx ;

#Nginx用户及组:用户 组。window下不指定

worker_processes 8;

#工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。默认为1

error_log  logs/error.log;

error_log  logs/error.log  notice;

error_log  logs/error.log  info;

#制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg

pid        logs/nginx.pid;

#指定nginx进程运行文件存放地址

worker_rlimit_nofile 204800;

#指定每个进程可以打开的最大文件描述符:数目,即能打开的文件数。现在在Linux 2.6内核下开启文件打开数为65535。理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。

events

{

accept_mutex on;  #设置网路连接序列化,防止惊群现象发生,默认为on

multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off

use epoll;

#使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定。

worker_connections 204800;

#指定每个工作进程的最大连接数量,默认为512。根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。并发总数是 worker_processes 和 worker_connections 的乘积,即 max_clients = worker_processes * worker_connections

keepalive_timeout 60;

#keepalive超时时间。

client_header_buffer_size 4k;

#客户端请求头部的缓冲区大小,通常设置为分页大小,分页大小可以用命令getconf PAGESIZE取得

open_file_cache max=65535 inactive=60s;

#为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存

open_file_cache_valid 80s;

#这个是指多长时间检查一次缓存的有效信息。

open_file_cache_min_uses 1;

open_file_cache指令中的inactive参数时间内文件的最少使用次数

}

##设定http服务器,利用它的反向代理功能提供负载均衡支持

http

{

include mime.types;

#设定mime类型,类型由mime.type文件定义,文件扩展名与文件类型映射表

default_type  application/octet-stream;

#默认文件类型,默认为text/plain

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';

#日志格式设置。

$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;

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

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

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

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

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

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

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

access_log  logs/host.access.log  main;

access_log  logs/host.access.404.log  log404;

#用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;

client_header_buffer_size 4k;

#客户端请求头部的缓冲区大小。

large_client_header_buffers 8 128k;

#客户请求头缓冲大小。

open_file_cache max=102400 inactive=20s;

#这个指令指定缓存是否启用。

open_file_cache_errors

语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off  使用字段:http, server, location

open_file_cache_min_uses

语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1  使用字段:http, server, location

open_file_cache_valid

语法:open_file_cache_valid time 默认值:open_file_cache_valid 60  使用字段:http, server, location

client_max_body_size 300m;

#设定通过nginx上传文件的大小

sendfile on;

#nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。

tcp_nopush on;

此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用

sendfile_max_chunk 100k;

#每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。

proxy_connect_timeout 90;

#后端服务器连接的超时时间_发起握手等候响应超时时间

proxy_read_timeout 180;

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

proxy_send_timeout 180;

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

proxy_buffer_size 256k;

#设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小

proxy_buffers 4 256k;

#设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k

proxy_busy_buffers_size 256k;

proxy_temp_file_write_size 256k;

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

proxy_temp_path /data0/proxy_temp_dir;

proxy_temp_path和proxy_cache_path指定的路径必须在同一分区

proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

#设置内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。

keepalive_timeout 65;

#连接超时时间,默认为75s,可以在http,server,location块。

client_body_buffer_size 512k;

如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。

无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误

proxy_intercept_errors on;

表示使nginx阻止HTTP应答代码为400或者更高的应答。

gzip  on;

gzip_disable "MSIE [1-6].";

#开启gzip压缩

upstream mysvr {

server 127.0.0.1:7878;

server 127.0.0.1:8028;

server 127.0.0.1:8029;

server 192.168.10.121:3333 backup;  #热备

}

#nginx的upstream目前支持5种方式的分配

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

例如:

upstream bakend {

server 192.168.0.14 weight=10;

server 192.168.0.15 weight=10;

}

3、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

例如:

upstream bakend {

ip_hash;

server 192.168.0.14:88;

server 192.168.0.15:80;

}

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backend {

server server1;

server server2;

fair;

}

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {

server squid1:3128;

server squid2:3128;

hash $request_uri;

hash_method crc32;

##配置虚拟机

server

{

listen 80;

#配置监听端口

server_name www.nginx.cn;

#配置访问域名

location ~* \.(mp3|exe)$ {

#对以“mp3或exe”结尾的地址进行负载均衡

proxy_pass http://img_relay$request_uri;

#设置被代理服务器的端口或套接字,以及URL

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://mysvr;  #请求转向mysvr 定义的服务器列表

deny 127.0.0.1;  #拒绝的ip

allow 172.18.5.54; #允许的ip

}

location / {

#定义首页索引文件的名称

index index.php index.html index.htm;

}

#默认请求

error_page  500 502 503 504 /50x.html;  # 定义错误提示页面

location /NginxStatus {

stub_status on;

access_log on;

auth_basic "NginxStatus";

auth_basic_user_file conf/htpasswd;

}

#设定查看Nginx状态的地址

location ~ /\.ht {

deny all;

}

#禁止访问.htxxx文件

}

}

你可能感兴趣的:(nginx.conf配置详解)