Nginx反向代理配置详解

当前大并发的网站基本都采用了Nginx来做代理服务器,并且做缓存,来扛住大并发。先前也用nginx配置过简单的代理,今天有时间把整合过程拿出来和大家分享,不过其中大部分也是网上找来的资源。不过我以我自己的理解方式写得更加详细点。

首先安装Nginx

1.建立用户和用户组

/usr/sbin/groupadd www
/usr/sbin/useradd -g www www

2.安装Nginx所需的pcre库:

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

3.安装Nginx

wget http://www.nginx.org/download/nginx-0.7.65.tar.gz
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

配置及配置优化

在/usr/local/nginx/conf/目录中创建nginx.conf文件:

rm -f /usr/local/nginx/conf/nginx.conf
vi /usr/local/nginx/conf/nginx.conf
#运行用户
user www www;
#启动进程数
worker_processes 8;
#全局错误日志
error_log /usr/local/nginx/logs/nginx_error.log crit;
#PID文件位置
pid /usr/local/nginx/nginx.pid;
#工作模式及连接数上限
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
#设定http服务器
http
{
#设定mime类型
include mime.types;
default_type application/octet-stream;
include proxy.conf;
#charset gb2312;
#指定服务器HASH表的最大值
server_names_hash_bucket_size 128;
#设定请求缓冲
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
#参数都有所调整.目的是解决代理过程中出现的一些502 499错误
sendfile on;
tcp_nopush on;
#参数加大,以解决做代理时502错误
keepalive_timeout 60;
tcp_nodelay on;
#开启gzip模块
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
include qinbin.me.conf;
#limit_zone crawler $binary_remote_addr 10m;
#设定虚拟主机
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;
}
#设定查看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;
}
}

/usr/local/nginx/conf/qinbin.me.conf

upstream www {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.0.100:8000 weight=5;
}

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

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;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_buffers 32 4k;
proxy_buffer_size 16k;

Nginx反向代理配置详解》上有8条评论

  1. 小云子

    还有这段
    #设定日志格式
    log_format access ‘$remote_addr – $remote_user [$time_local] “$request” ‘
    ‘$status $body_bytes_sent “$http_referer” ‘
    ‘”$http_user_agent” $http_x_forwarded_for’;
    日志格式一定要设置么

  2. 小小木同 文章作者

    日志格式最好设置下,这样做日志分析的时候可以按自己的格式来

  3. 小木同 文章作者

    可以实现,把tomcat和apache跑在81,82口上,nginx用80口,然后配成代理

发表评论

电子邮件地址不会被公开。 必填项已用*标注