nginx 转发到mysql

2019-01-02  本文已影响4人  五大RobertWu伍洋

实测一下代码放在/etc/nginx/nginx.conf最后面,在yunip编译版本的nginx上可以成功连接到mysql (在apt安装的nginx版本不行,nginx version: nginx/1.4.6 (Ubuntu)):

stream {

server {

listen 23306;

proxy_pass winip:3307;

# 也支持socket

# proxy_pass unix:/var/lib/mysql/mysql.socket;

}

nginx 详细信息:

2032 $ nginx -V

nginx version: nginx/1.12.1

built with OpenSSL 1.0.1f 6 Jan 2014

TLS SNI support enabled

configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -fPIC -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-0QJgRe/nginx-1.12.1/debian/modules/nginx-auth-pam --add-dynamic-module=/build/nginx-0QJgRe/nginx-1.12.1/debian/modules/nginx-dav-ext-module --add-dynamic-module=/build/nginx-0QJgRe/nginx-1.12.1/debian/modules/nginx-echo --add-dynamic-module=/build/nginx-0QJgRe/nginx-1.12.1/debian/modules/nginx-upstream-fair --add-dynamic-module=/build/nginx-0QJgRe/nginx-1.12.1/debian/modules/ngx_http_substitutions_filter_module

补充内容:

编译安装Nginx

从1.9.0开始,nginx就支持对TCP的转发,而到了1.9.13时,UDP转发也支持了。提供此功能的模块为ngx_stream_core。不过Nginx默认没有开启此模块,所以需要手动安装。

cd /usr/local/src

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

tar zxf nginx-1.12.1.tar.gz

cd nginx-1.12.1

./configure --prefix=/usr/local/nginx --with-stream --without-http

make && make install

参考:

http://www.jianshu.com/p/244386221cc5

补充tcp转发:

背景:如果nginx代理这个80到swoole(用swoole做webserver,其实就是做个转发和html解析。),这个代理是个什么概念,那这个socket的fd是不是就没法长连接了呢??被反向80端口代理的swoole还能长连接?用:nginx_tcp_proxy_module才行 ,否则肯定不行啊,即使http的keep-alive,https://github.com/yaoweibin/nginx_tcp_proxy_module 也就是说nginx的http代理长连接不行,得走tcp这一层才行,用haproxy。

nginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司的的负载均衡都是nginx所以决定研究一下nginx的这个功能实现,下面简单介绍一下实现方法:

1.下载module模块

下载地址 : https://nodeload.github.com/yaoweibin/nginx_tcp_proxy_module/zipball/master

$ wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'

$ tar -xzvf nginx-1.2.1.tar.gz

$ cd nginx-1.2.1/

$ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch  /path是指nginx_tcp_proxy_module路径

$  ./configure --add-module=/usr/local/ngx_cache_purge-1.4  --prefix=/usr/local/nginx --with-http_stub_status_module --add-module=/path/to/nginx_tcp_proxy_module   //编译

$ make

$ make install

2、修改nginx配置文件:

http {

server {

listen 80;

location /status {

check_status;

}

}

}

tcp {

upstream mysql{

server 10.10.10.17:3306 weight=1;

server 10.10.10.18:3306 weight=1;

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

}

server {

listen 3306;

proxy_pass mysql;

}

}

参考:  http://ju.outofmemory.cn/entry/124180

对比:

tcp {

upstream mysql {

server 172.17.0.3:3306 weight=1;

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

}

server {

listen 23306;

proxy_pass mysql;

}

}

stream {

server {

listen 23306;

proxy_pass 60.205.189.32:3307;

# 也支持socket

# proxy_pass unix:/var/lib/mysql/mysql.socket;

}

}

上一篇下一篇

猜你喜欢

热点阅读