Nginx反向代理配置详解

Nginx简单的反向代理配置,包括配置文件中各项参数的的注释,好了,开始!


开始首先安装Nginx

一、建立用户和用户组

1

2

/usr/sbin/groupadd www

/usr/sbin/useradd -g www www

二、安装Nginx所需的pcre

1

2

3

4

5

6

http://sourceforge.net/projects/pcre/

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.01.tar.gz

tar zxvf  pcre-7.9.tar.gz

cd pcre-7.9/

./configure

make &&  make install

三、安装Nginx

1

2

3

4


5

下载nginx源码包.

tar zxvf  nginx-0.7.61.tar.gz

cd nginx-0.7.61/

./configure  --user=www --group=www --prefix=/usr/local/nginx  --with-http_stub_status_module --with-http_ssl_module

make &&  make install

四、配置及配置优化

1、在/usr/local/nginx/conf/目录中修改nginx.conf文件


vi  /usr/local/nginx/conf/nginx.conf (请先做好备份)


#运行用户

user www www;

#启动进程数,一般为CPU核数的俩倍。

worker_processes  8;

#全局错误日志

error_log  /usr/local/nginx/logs/nginx_error.log crit;

#PID文件位置

pid  /usr/local/nginx/nginx.pid;



#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数

(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,

所以建议与ulimit -n的值保持一致。

worker_rlimit_nofile  51200;

events

{

#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,

可以大大提高nginx的性能

use epoll;

#单个后台worker  process进程的最大并发链接数

worker_connections  51200;

}

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

http

{

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

include  mime.types;

default_type  application/octet-stream;#默认文件类型

include  proxy.conf;#将配置文件单独写,使主配置文件简单明了,此为代理配置文件。

include  server.conf;#将配置文件单独写,使主配置文件简单明了,此为定义服务器列表配置文件。

#charset  gb2312;#默认编码

server_names_hash_bucket_size  128;#指定服务器HASH表的最大值


#设定请求缓冲

client_header_buffer_size  32k;#上传文件大小限制

large_client_header_buffers  4 32k; #设定请求缓存

client_max_body_size  8m;#设定请求缓存

#sendfile 指令指定  nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.

sendfile on;

tcp_nopush on;#防止网络阻塞

tcp_nodelay on;#防止网络阻塞

#参数加大,以解决做代理时502错误

keepalive_timeout  120;

#开启gzip模块

gzip on;

gzip_min_length  1k;#最小压缩文件大小

gzip_buffers 4  16k;#压缩缓冲区

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

gzip_comp_level  2;#压缩等级


gzip_types  text/plain application/x-javascript text/css application/xml;#压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn


gzip_vary on;

gzip_disable "MSIE [1-6]\.(?!.*SV1)";#对于IE6浏览器,不进行压缩。

#limit_zone  crawler $binary_remote_addr 10m;#开启限制IP连接数的时候需要使用

#设定虚拟主机

server

{

listen  192.168.0.100:80 default;

server_name _;

#下面对于  / 启用反向代理.

location / {

if ($host !~*  www\.(.*)) {

set  $host_without_www $1;

set $xhost  www.$host;

rewrite ^(.*)$  http://$xhost$host_without_www$1 permanent;

}

proxy_pass  http://www; #请求转向www  定义的服务器列表,注意在location {} 内。

}

#设定查看Nginx状态的地址

location /ns {

stub_status on;

access_log off;

}

#设定日志格式

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

'$status  $body_bytes_sent "$http_referer" '

'"$http_user_agent"  $http_x_forwarded_for';

#设定access  log

access_log  /usr/local/nginx/logs/access.log access;

}

}

2/usr/local/nginx/conf/server.conf

nginx 代理后端web的配置文件,在主配置文件中已经 include

upstream www {

#weigth参数表示权值,权值越高被分配到的几率越大

server  192.168.0.100:8000 weight=5;

server  192.168.0.101:8000 weight=3;

}





3/usr/local/nginx/conf/proxy.conf

nginx 代理配置,在主配置文件中已经include

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



proxy_redirect off;

proxy_set_header  Host $host;

proxy_set_header  X-Real-IP $remote_addr;

proxy_set_header  REMOTE_ADDR $remote_addr;

proxy_set_header  HTTP_CLIENT_IP $remote_addr;

proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size  10m;#允许客户端请求的最大单文件字节数

client_body_buffer_size  128k;#缓冲区代理缓冲用户端请求的最大字节数

proxy_connect_timeout  30;#nginx跟后端服务器连接超时时间(代理连接超时)

proxy_send_timeout 30;#后端服务器数据回传时间(代理发送超时)

proxy_read_timeout  30;#连接成功后,后端服务器响应时间(代理接收超时)

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

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

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


以上配置完毕,重新启动nginx. 做验证即可….

                                OK , 到此结束!