一、使用说明:
nginx可以一般用来做http的转发,当然也可以用来做tcp转发,需要第三方模块nginx_tcp_proxy_module,下载地址为:https://github.com/yaoweibin/nginx_tcp_proxy_module 作者:Weibin Yao(姚伟斌) (yaoweibin@gmail.com)
二、实验环境:
192.168.1.194服务器(centos 6.5 final版本)
nginx版本:nginx-1.6.1
三、安装配置:
这里假定已经安装好了nginx(安装nginx比较简单,网上案例很多),此刻需要给nginx扩展一个nginx_tcp_proxy_module模块。
下载nginx_tcp_proxy_module到nginx的同级目录:
wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip -o master.zip
解压此文件
unzip master.zip
可以看到
[root@localhost nginx]# ls
master.zip
nginx_tcp_proxy_module-master
nginx-1.6.1
nginx-1.6.1.tar.gz
然后进入nginx-1.6.1目录,执行:
[root@localhost nginx-1.6.1]# patch -p1 < …/nginx_tcp_proxy_module-master/tcp.patch
patching file src/core/ngx_log.c
Hunk #1 succeeded at 69 (offset 3 lines).
patching file src/core/ngx_log.h
Hunk #1 succeeded at 30 (offset 1 line).
Hunk #2 succeeded at 38 (offset 1 line).
patching file src/event/ngx_event_connect.h
Hunk #1 succeeded at 33 (offset 1 line).
Hunk #2 succeeded at 44 (offset 1 line).
打上补丁。
[root@localhost nginx-1.6.1]# /usr/local/apps/nginx/sbin/nginx -V
nginx version: nginx/1.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/apps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=…/gnosek-nginx-upstream-fair-a18b409/ --add-module=…/ngx_cache_purge-2.1 --with-http_ssl_module
nginx -V可以查看nginx的版本,以及之前编译的项目。
编译安装nginx_tcp_proxy_module,需要把之前的编译项目都copy进来,在加上新的nginx_tcp_proxy_module模块编译项。
[root@localhost nginx-1.6.1]# ./configure --prefix=/usr/local/rktsapps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=…/gnosek-nginx-upstream-fair-a18b409/ --add-module=…/ngx_cache_purge-2.1 --with-http_ssl_module --add-module=…/nginx_tcp_proxy_module-master/
注意后面多了一个–add-module=…/nginx_tcp_proxy_module-master/
[root@localhost nginx-1.6.1]# make && make install
执行安装,安装完成后,执行nginx -V,看看模块是否被编译上去了
[root@localhost nginx-1.6.1]# /usr/local/rktsapps/nginx/sbin/nginx -V
nginx version: nginx/1.6.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/rktsapps/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre=/home/workspace/auto_deploy/software/nginx/pcre-8.30 --with-openssl=/home/workspace/auto_deploy/software/nginx/openssl-1.0.1i --add-module=…/gnosek-nginx-upstream-fair-a18b409/ --add-module=…/ngx_cache_purge-2.1 --with-http_ssl_module --add-module=…/nginx_tcp_proxy_module-master/
ok,nginx_tcp_proxy_module已经被编译上去了,至此nginx已经支持tcp转发咯。
下面列一份tcp转发的nginx配置文件
vim tcp_test.conf
内容为:
tcp {
upstream tcpserver1 {
# simple round-robin
ip_hash;
server 192.168.1.70:26000;
server 192.168.1.71:26001;
server 192.168.1.72:26002;
server 192.168.1.73:26003;
check interval=3000 rise=2 fall=3 timeout=2000;
#check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;
#check interval=3000 rise=2 fall=5 timeout=1000 type=http;
#check_http_send “GET / HTTP/1.0\r\n\r\n”;
#check_http_expect_alive http_2xx http_3xx;
}
server {
listen 26000;
proxy_pass tcpserver1;
so_keepalive on;
tcp_nodelay on;
access_log logs/tcpserver1_access.log;
}
}
tcp的默认的access日志为默认为tcp_access.log,可以单独指定的。
注意,这里的tcp_test.conf,不能在配置文件中被包括进http{ }里面,否则会报
nginx: [emerg] “tcp” directive is not allowed here in xxx
这类的错误。这里一定要注意,tcp{ }和http{ }在nginx.conf配置文件里面是对等关系!
访问日志的说明如下:
log_time worker_process_pid client_ip host_ip accept_time upstream_ip bytes_read bytes_write
2011/08/02 06:19:07 [5972] 127.0.0.1 0.0.0.0:1982 2011/08/02 06:18:19 172.19.0.129:80 80 236305
转载于:https://blog.51cto.com/zhengmingjing/1907775