實(shí)測(cè)一下代碼放在/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 詳細(xì)信息:
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
補(bǔ)充內(nèi)容:
編譯安裝Nginx
從1.9.0開始,nginx就支持對(duì)TCP的轉(zhuǎn)發(fā),而到了1.9.13時(shí),UDP轉(zhuǎn)發(fā)也支持了。提供此功能的模塊為ngx_stream_core。不過Nginx默認(rèn)沒有開啟此模塊,所以需要手動(dòng)安裝。
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.itdecent.cn/p/244386221cc5
補(bǔ)充tcp轉(zhuǎn)發(fā):
背景:如果nginx代理這個(gè)80到swoole(用swoole做webserver,其實(shí)就是做個(gè)轉(zhuǎn)發(fā)和html解析。),這個(gè)代理是個(gè)什么概念,那這個(gè)socket的fd是不是就沒法長(zhǎng)連接了呢??被反向80端口代理的swoole還能長(zhǎng)連接?用:nginx_tcp_proxy_module才行 ,否則肯定不行啊,即使http的keep-alive,https://github.com/yaoweibin/nginx_tcp_proxy_module 也就是說nginx的http代理長(zhǎng)連接不行,得走tcp這一層才行,用haproxy。
nginx屬于七層架構(gòu),支持的是http協(xié)議,本身對(duì)tcp協(xié)議沒有支持。所以不能代理mysql等實(shí)現(xiàn)負(fù)載均衡。但是lvs這個(gè)東西不熟悉,主要是公司的的負(fù)載均衡都是nginx所以決定研究一下nginx的這個(gè)功能實(shí)現(xiàn),下面簡(jiǎn)單介紹一下實(shí)現(xiàn)方法:
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
對(duì)比:
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;
}
}