我目前的nginx配置是拆散的,这样可以便于在很多个虚拟主机和目录里重用部分配置。
总体是划分为这样一个结构:
conf/
conf/nginx.conf
conf/proxy.conf
conf/rewrite.conf
conf/location.conf
conf/port.conf
conf/upstream.conf
conf/servers/
conf/servers/www.sudone.com
conf/servers/www.163.com
1、nginx.conf
这就是nginx读取的主文件,没特殊情况是通用的
2、proxy.conf
代理的选项配置,也是通用的
3、rewrite.conf
所有主机的根目录公用的rewrite规则,默认是空文件,可以不使用。
4、location.conf
所有主机都会用到的location目录结构,默认是空文件,可以不使用。
5、port.conf
配置服务器绑定ip和端口,因为nginx如果各个主机ip端口配置有不同会有bug,所以最好是统一设定。
6、upstream.conf
upstream写在这里面,和业务分开,易于控制。
7、servers目录
这个目录下面放的是所有的虚拟主机配置,每个虚拟主机一个文件,由nginx.conf去include,这样处理这些配置变得很灵活。
可以在这里看到到公用的几个配置,带注释
nginx/proxy.conf
#proxy_set_header X-Forwarded-For $remote_addr;
#proxy_set_header REMOTE_ADDR $remote_addr;
#proxy_set_header RealIP $remote_addr;
proxy_set_header Host $proxy_host;
#proxy_set_header Accept-Encoding ”;#proxy_hide_header X-Cache;
#proxy_hide_header X-Powered-By;
#proxy_hide_header Last-Modified;
#proxy_hide_header Date;
#proxy_hide_header Content-Length;
#proxy_hide_header Content-Language;
#proxy_hide_header Cache-Control;#proxy_pass_header Server;
client_max_body_size 8m;
proxy_connect_timeout 15s;
proxy_send_timeout 1m;
proxy_read_timeout 1m;
proxy_temp_file_write_size 1024m;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;proxy_ignore_client_abort on;
proxy_next_upstream error timeout invalid_header http_503;
#proxy_set_header(设定header)
#proxy_hide_header(隐藏header)
#proxy_pass_header(通过header)
#proxy_connect_timeout(代理连接超时)
#proxy_send_timeout(代理发送超时)
#proxy_read_timeout(代理接收超时)
#proxy_temp_file_write_size(设定缓存文件夹大小)
#proxy_buffer_size(代理缓冲大小)
#proxy_buffers (代理缓冲)
#proxy_busy_buffers_size(高负荷下缓冲大小)
#proxy_ignore_client_abort(不允许代理端主动关闭连接)
nginx/nginx.conf
#使用小号
user nobody;#开启进程数
worker_processes 8;#制定进程到cpu(四cpu:0001 0010 0100 1000)
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;#每个进程最大打开文件数
worker_rlimit_nofile 10240;#进程号保存文件
pid logs/nginx.pid;events {
#使用epoll(linux2.6的高性能方式)
use epoll;
#每个进程最大连接数(最大连接=连接数x进程数)
worker_connections 10240;
}http {
#文件扩展名与文件类型映射表
include mime.types;#默认文件类型
default_type text/html;#日志文件格式
log_format main ‘$remote_addr – $remote_user [$time_local] $request ‘
‘”$status” $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
#日志文件
access_log /dev/null;#长链接超时时间
keepalive_timeout 30;#打开gzip压缩
gzip on;
#最小压缩文件大小
gzip_min_length 1000;
#压缩缓冲区
gzip_buffers 4 8k;
#压缩类型
gzip_types text/* text/css application/javascript application/x-javascript;
#压缩比率
gzip_comp_level 9;
#压缩通过代理的所有文件
gzip_proxied any;
#vary header支持
gzip_vary on;
#压缩版本(默认1.1,前端为squid2.5使用1.0)
gzip_http_version 1.0;
#输出缓冲区
output_buffers 4 32k;
#输出拆包大小
postpone_output 1460;#接收header的缓冲区大小
client_header_buffer_size 128k;
large_client_header_buffers 4 256k;#客户端发送header超时
client_header_timeout 1m;
#客户端发送内容超时
client_body_timeout 1m;
#发送到客户端超时
send_timeout 1m;
#开启高效文件传输模式
sendfile on;
#捕捉代理端的http错误
#proxy_intercept_errors on;
#默认编码
charset GBK;#默认域名(不能访问)
server {include port.conf;server_name null;location / {root /dev/null;log_not_found off;}}#嵌套upstream.conf
include upstream.conf;#嵌套servers/*.com;
include servers/*.com;
include servers/*.net;
include servers/*.org;
include servers/*.com.cn;
include servers/*.cn;
}
整个框架的例子可以下载这个rar包: