/ 中存储网

Nginx配置实现基于tcp协议的反向代理和负载均衡

2013-09-27 08:58:02 来源:itjs.cn

1.安装环境

系统环境:centos6.3_x64

软件版本:nginx-1.4.2.tar.gz  nginx_tcp_proxy_module-master.zip

2.软件安装 cd /root/

wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.12/pcre-8.12.tar.gz

tar zxvf pcre-8.12.tar.gz

cd pcre-8.12/

./configure

make && make install

cd /usr/local/src

wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz

tar -zxvf openssl-1.0.1c.tar.gz

cd /root/

wget http://nginx.org/download/nginx-1.4.2.tar.gz

groupadd www

useradd -g www www

tar zxvf nginx-1.4.2.tar.gz

cd nginx-1.4.2/

 # 到 https://github.com/yaoweibin/nginx_tcp_proxy_module 这个地址下载nginx_tcp_proxy_module模块

unzip nginx_tcp_proxy_module-master.zip

patch -p1 < /root/nginx-1.4.2/nginx_tcp_proxy_module-master/tcp.patch

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.1c --add-module=/root/nginx-1.4.2/nginx_tcp_proxy_module-master

make && make install

3.nginx配置

 # cat /usr/local/nginx/conf/nginx.conf

user  www;

worker_processes  8;   #等同于CPU核数

error_log  logs/error.log;

pid        logs/nginx.pid;

events {

use epoll;

worker_connections  51200;

}

http {

include       mime.types;

default_type  application/octet-stream;

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  logs/access.log  main;

sendfile        on;

#tcp_nopush     on;

keepalive_timeout  65;

client_header_buffer_size 4k;

large_client_header_buffers 4 16k;

client_max_body_size 50m;

client_body_buffer_size 256k;

proxy_connect_timeout 600;

proxy_read_timeout 600;

proxy_send_timeout 600;

proxy_buffer_size 64k;

proxy_buffers   4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

gzip  on;

}

tcp {

#### dhserver ####

 upstream dh {

  server 192.168.5.83:26888;

  server 192.168.5.84:26888;

  check interval=3000 rise=2 fall=5 timeout=1000;

 }

 server {

  listen 26888;

  proxy_pass dh;

 }

####  mainserver ####

upstream main {

 server 192.168.5.85:8088;

 server 192.168.5.86:8088;

  check interval=3000 rise=2 fall=5 timeout=1000;

}

server {

listen 8088;

proxy_pass main;

}

#### files ####

upstream files1 {

server 192.168.5.93:30001;

server 192.168.5.94:30001;

check interval=3000 rise=2 fall=5 timeout=1000;

}

server {

listen 30001;

proxy_pass files1;

}

upstream files2 {

server 192.168.5.93:30002;

server 192.168.5.94:30002;

check interval=3000 rise=2 fall=5 timeout=1000;

}

server {

listen 30002;

proxy_pass files2;

}

}

需要说明的是,tcp流量负载是无法让后端的RealServer获取到用户的真实IP的,只能通过nginx的log文件来判断。