nginx做TCP代理

要实现TCP代理,可以使用Nginx的stream模块。stream模块允许Nginx作为一个转发代理来处理TCP流量,包括TCP代理、负载均衡和SSL终止等功能。

以下是配置Nginx实现TCP代理的基本步骤:

  1. 在Nginx配置文件中添加stream块,并在该块中配置代理服务:
nginx 复制代码
stream {
    server {
        listen 12345;  # 设置监听端口
        proxy_pass destination_server:destination_port;  # 配置代理目标服务器和端口
    }
}
  1. 将上述配置添加到Nginx配置文件中的http块之后。确保在启动或重新加载Nginx时加载此配置。

  2. 重新加载Nginx以使配置生效:

bash 复制代码
sudo nginx -s reload

通过上述配置,Nginx将会将收到的TCP连接传递给目标服务器和端口,并将其响应返回给客户端,实现了TCP代理的功能。

确认模块是否存在

要确定Nginx是否安装了TCP代理模块,您可以执行以下步骤:

  1. 查看Nginx的详细版本信息:
bash 复制代码
nginx -V
  1. 在输出中查找--with-stream参数,如果存在该参数,则表示Nginx已安装了stream模块,支持TCP代理功能。

  2. 如果--with-stream参数不存在,表示Nginx未编译安装stream模块,无法支持TCP代理功能。

如果您需要启用TCP代理功能,可以重新编译并安装Nginx,并在编译时包含--with-stream参数。然后按照先前提供的步骤配置Nginx以实现TCP代理功能。

完整配置文件

本例做了一个MySQL的TCP代理,使得部署在内网的MySQL可以通过nginx的公网IP访问。

bash 复制代码
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }


}
stream {
    server {
        listen 3306;  # 设置监听端口
        proxy_pass 内网IP:3306;  # 配置代理目标服务器和端口
    }
}
相关推荐
IPFoxy6662 小时前
探索路由器静态IP的获取方式
网络·智能路由器
menge23332 小时前
VLAN:虚拟局域网
网络·智能路由器
小鹿( ﹡ˆoˆ﹡ )3 小时前
探索IP协议的神秘面纱:Python中的网络通信
python·tcp/ip·php
ZachOn1y3 小时前
计算机网络:计算机网络概述 —— 初识计算机网络
网络·计算机网络·知识点汇总·考研必备
三金121383 小时前
SpringIoC容器的初识
网络·网络协议·rpc
狼头长啸李树身4 小时前
眼儿媚·秋雨绵绵窗暗暗
大数据·网络·服务发现·媒体
SizeTheMoment5 小时前
初识HTTP协议
网络·网络协议·http
哲伦贼稳妥6 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
苹果醋36 小时前
快速玩转 Mixtral 8x7B MOE大模型!阿里云机器学习 PAI 推出最佳实践
spring boot·nginx·毕业设计·layui·课程设计
5967851546 小时前
DotNetty ChannelRead接收数据为null
tcp/ip·c#