默認Nginx只支持http的反向代理,要想nginx支持tcp的反向代理,還須要在編譯時增長tcp代理模塊支持,即nginx_tcp_proxy_modulehtml
下面操做步驟只讓nginx支持tcp_proxy,沒有加入prce、gzip、ssl等功能,如須要,可自行在編譯時加上相關參數。mysql
wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zipunzip master tar -zxvf nginx-1.6.3.tar.gz cd nginx-1.6.3 patch -p1 < ../nginx_tcp_proxy_module-master/tcp.patch ./configure --add-module=../nginx_tcp_proxy_module-master --prefix=/usr/local/nginx-1.6.3 --with-http_stub_status_module --with-http_gzip_static_module make make install
nginx.conf主配置文件中增長以下配置配置:(也能夠在主配置文件中配置include,包含tcp轉發的配置文件include /usr/local/nginx-1.6.3/conf/tcp_proxy.conf;)
nginx
user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } include /usr/local/nginx-1.6.3/conf/tcp_proxy.conf; 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 0; keepalive_timeout 65; #gzip on; server { listen 3306; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } location /nginx_status { stub_status on; access_log logs/nginx_status.log; allow 10.195.197.124; deny all; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
include /usr/local/nginx-1.6.3/conf/tcp_proxy.conf;git
tcp { upstream mysql { server 10.207.238.66:3306; server 10.207.238.67:3306; check interval=3000 rise=2 fall=5 timeout=1000; #check interval=3000 rise=2 fall=5 timeout=1000 #check interval=3000 rise=2 fall=5 timeout=1000 #check_http_send "GET /HTTP/1.0\r\n\r\n"; #check_http_expect_alive http_2xxhttp_3xx; } server { listen 3307; proxy_pass mysql; } }
說明:
check interval 健康檢查,單位是毫秒
rise 檢查幾回正常後,將reslserver加入以負載列表中
fall 檢查幾回失敗後,摘除realserver
timeout 檢查超時時間,單位許毫秒
具體可查看nginx_tcp_proxy_module-master/README,很詳細。github