Nginx通过域名代理tcp端口
Nginx通过域名代理tcp端口 | Laravel China 社区 (learnku.com)
碰到一种场景,使用 nginx 进行反向代理 tcp 端口,网上大部门的设置都是一个端口代理一个端口,没有一个端口通过域名代理后端多个端口的情况。
stream 是一个单独的模块,不需要放在 nginx-http 配置中,可以放在 nginx.conf 的最后。
只需要把 map 中参数变成域名。
我用的案例2: 域名直接解析到 服务器, 然后通过 域名:8192 就可以访问。
stream {
upstream mysql{
server 10.1.5.3:3306;
}
upstream redis{
server 10.1.5.4:6379;
}
map $server_addr $bane {
192.168.168.238 mysql;
192.168.168.239 redis;
}
server {
listen 80;
proxy_pass $name;
}
}
案例2:
stream {
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
upstream tcp_proxy {
hash $remote_addr consistent; #远程地址做个hash
server 192.168.1.210:32035; #cloudservice8193 后期改成 socket 8193
}
server {
listen 8193;
proxy_connect_timeout 1s; #后端链接空闲超时断开
proxy_timeout 10s; #后端连接超时时间
proxy_pass tcp_proxy;
access_log /var/log/nginx/cloudservice.XXX.com.log basic;
#error_log /var/log/nginx/cloudservice.XXX.com.error.log;
}
案例3:{#more-18461}
1、 配置场景,在服务器(ip为192.168.2.3)上安装虚拟机centos(ip为192.168.146.200),现将mysql、redis安装到虚拟机上,现需要把mysql和redis代理出来
2、打开nginx.conf配置文件,根据具体的host和port进行配置
stream {
#代理mysql
upstream mysql {
server 192.168.146.200:3306;
}
server {
listen 13306;
proxy_pass mysql;
proxy_timeout 300s;
proxy_connect_timeout 10s;
}
#代理redis
upstream redis {
server 192.168.146.200:6379;
}
server {
listen 16379;
proxy_pass redis ;
proxy_timeout 300s;
proxy_connect_timeout 10s;
}
}
3、访问mysql服务
在本机使用 192.168.2.3:13306即可