worker_processes 4; //生成进程数,等于CPU总核数两倍
error_log /data1/logs/nginx_error.log crit; //错误日志路径,错误日志可选项为:【debug info notice warn error crit】
pid /usr/local/nginx/logs/nginx.pid; //PID路径
worker_rlimit_nofile 51200; //指定文件描述符数量
events {
use epoll; //使用网络I/O模型
worker_connections 51200; //允许连接数,文件描述符
}
http
{
include mime.types; //文件类型
default_type application/octet-stream; //默认文件类型
charset UTF-8 //语言类型
server_names_hash_bucket_size 128; //根据CPU的cache来设定
client_header_buffer_size 4; //记录缓存4k
large_client_header_buffers 4 8k; //如果4k不够,用8k
sendfile on; //
指定nginx是否调用sendfile函数(zero copy方式)来输出文件,普通应用必须设为on,对于普通文件用on。如果进行下载I/O负载应用,设置为off,以平衡磁盘磁盘和网络I/O处理速度。
#tcp_nopush on; //允许或禁止使用socket的TCP_NOPUSH(on freebsd或TCP_COR(on linux),此选择仅仅在使用sendfile时候可用,
keepalive_timeout 65; //长连接超时时间
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#开启gzip压缩,
用于支持在线实时压缩输出数据流
gzip on; //off关闭或者on开启gzip功能
gzip_min_length 1k; //设置允许压缩最小字节数,0表示多大都压,最好设置大于1k,小于1k越压越大
gzip_buffers 4 16k; //系统获取几个单位的缓存,用于存储gzip压缩结果数据流。
4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存,如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_http_version 1.1; //判断http协议版本,是否支持压缩,否则用户看到乱码。默认即可,大部分都得支持
gzip_comp_level 2; //gzip压缩比,
1 压缩比最小处理速度最快,9 压缩比最大但处理最慢
gzip_types text/plain application/x-javascript text/css application/xml; //
默认nginx是开启gzip压缩,但是只针对html文件押送 gzip_types text/plain application/x-javascript text/css text/html application/xml text/javascript; 在nginx的gzip的gzip_types加上
gzip_vary on; //和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩。
client_max_body_size 50m; //允许客户端请求的最大单个文件字节数
client_body_buffer_size 128k; //缓冲区代理用户端请求的最大字节数,可以理解先保存到本地在穿给用户
proxy_connect_timeout 600; //和后端服务器连接的超时时间,发起握手等候相应超时时间
proxy_read_timeout 600; //连接成功后,等待后端服务器相应时间,已经进入后端的排队之中等候处理
proxy_send_timeout 600; //后端服务器数据回传时间,在规定时间内服务器必须传完所有数据
proxy_buffer_size 16k; //只保存用户头信息一共nginx进行规则处理,用于缓存代理请求
proxy_buffers 4 32k; //告诉nginx保存单个用的几个Buffer最大用多大空间
proxy_busy_buffers_size 64k; //如果系统很忙可以申请更大的proxy_buffers,官方推荐 *2
proxy_temp_file_write_size 64k; //proxy缓存临时文件大小
upstream http_server_pool {
server 192.168.1.2:8080 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.1.3:8080 weight=2 max_fails=2 fail_timeout=30s;
} //设置地址池,后端2台服务器
server //第一个虚拟主机,反向代理http_server_pool这组服务器
{
listen 80; //监听端口
server_name www.xiao.com; //主机名称
location /
{
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; //http://www.2tutu.com/post/2008/631.html //后端服务器返回500 503 404错误,自动请求转发到upstream池中另一台服务器
proxy_pass http://http_server_pool;
proxy_set_header Host www.xiao.com;
proxy_set_header
X-Forwarded-For $remote_addr;
}
access_log logs/www.xiao.com.access.log combined;
}
}
proxy_set_header Host $host :
首先说明 proxy_set_header 指令在向反向代理的后端Web服务器发起请求时添加指定的 Header头信息,后端web服务器有多个基于域名的虚拟主机时,通过头信息Host,用于指定请求的域名,这样后端web才能识别反向代理请求哪个虚拟主机处理。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for :联系下面PS中所写,在后端web中就算加上$http_x_Forwarded_for这条,也得不到用户的IP,所以在nginx反向代理添加Header头信息 X-Forwarded-For在配合后端服务器日志文件的$http_x_Forwarded_for这条就可以获得用户的IP地址了。