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文件
}
}