deepseek轻松解决 Nginx 网络透传问题实现内部IBM MQ和外部IBM MQ的通信

2025年5月30日

今天上午 客户突然打电话说还是要研究 Nginx 网络透传以解决IBM MQ和宝马IBM MQ的通信问题。本来这是一个备选方案,他们周一决定直接连接**IBM MQ的。

我是完全不懂的,上周二在无锡我问了一个以前很熟悉的***的老师,他告诉我可以实现。然后我就用deepseek开始了我的工作。

工作是出奇的顺利,deepseek给出了完全无误的方案。

我用华为云模拟了企业专线,很快就实现了公有云上的IBM MQ和私有数据中心的IBM MQ的数据通信。

理解了您的网络拓扑结构,我来重新配置 Nginx 的端口透传规则。Nginx 服务器有两个 IP:内网 IP 10.11.13.60 和公网 IP 36...218,需要连接的外部机器 IP 是 192.168.2.15

修正后的 Nginx 配置(完整版)

nginx

复制

下载

复制代码
# 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;

#加载stream模块
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

events {
    worker_connections 1024;
}

# TCP/UDP透传配置
stream {
    #配置1:内网访问 → 转发到外部机器
    server {
        listen 10.11.13.60:1414;  #监听Nginx内网IP
        proxy_pass 192.168.2.15:1414;  #转发到外部机器
        proxy_timeout 600s;
        proxy_connect_timeout 5s;
        proxy_buffer_size 16k;
    }

    #配置2:外部访问 → 转发到内网服务器
    server {
        listen 36.*.*.218:1414;  #监听Nginx公网IP
        proxy_pass 10.11.13.26:1414;  #转发到内网服务器
        proxy_timeout 600s;
        proxy_connect_timeout 5s;
        proxy_buffer_size 16k;
    }
}

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;

    include /etc/nginx/conf.d/*.conf;

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

        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 {
        }
    }

# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen \[::\]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# 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 {
# }
# }

}

配置说明

  1. 内网访问 → 外部机器 :

    nginx

    复制

    下载

    复制代码
    server {
        listen 10.11.13.60:1414;  #监听Nginx的内网IP
        proxy_pass 192.168.2.15:1414;  #转发到外部机器
    }
    • 当内网客户端访问 10.11.13.60:1414

    • Nginx 将流量透明转发到 192.168.2.15:1414

  2. 外部访问 → 内网服务器 :

    nginx

    复制

    下载

    复制代码
    server {
        listen 36.*.*.218:1414;  #监听Nginx的公网IP
        proxy_pass 10.11.13.26:1414;  #转发到内网服务器
    }
    • 当外部客户端访问 36...218:1414

    • Nginx 将流量透明转发到 10.11.13.26:1414

部署步骤

  1. 安装 stream 模块 (如果尚未安装):

    bash

    复制

    下载

    复制代码
    sudo dnf install nginx-mod-stream
  2. 验证配置

    bash

    复制

    下载

    复制代码
    sudo nginx -t
  3. 重启 Nginx

    bash

    复制

    下载

    复制代码
    sudo systemctl restart nginx
  4. 检查端口监听

    bash

    复制

    下载

    复制代码
    sudo ss -tulnp | grep nginx

    应该看到:

    复制

    下载

    复制代码
    tcp  LISTEN 0  4096  10.11.13.60:1414      *:*    users:(("nginx",pid=xxx,fd=yy))
    tcp  LISTEN 0  4096  36.*.*.218:1414    *:*    users:(("nginx",pid=xxx,fd=zz))
  5. 配置防火墙

    bash

    复制

    下载

    复制代码
    #开放内网端口
    sudo firewall-cmd --permanent --zone=internal --add-port=1414/tcp
    
    #开放公网端口
    sudo firewall-cmd --permanent --zone=public --add-port=1414/tcp
    
    sudo firewall-cmd --reload

网络拓扑说明

复制

下载

复制代码
内网客户端 → [Nginx内网IP:10.11.13.60:1414] → 专线 → [外部机器:192.168.2.15:1414]

外部客户端 → [Nginx公网IP:36.*.*.218:1414] → Nginx → [内网服务器:10.11.13.26:1414]

测试方法

  1. 测试内网到外网透传 (在内网任意机器执行):

    bash

    复制

    下载

    复制代码
    telnet 10.11.13.60 1414
    #检查外部机器192.168.2.15是否收到连接
  2. 测试外网到内网透传 (在外部网络执行):

    bash

    复制

    下载

    复制代码
    telnet 36.*.*.218 1414
    #检查内网服务器10.11.13.26是否收到连接

安全加固建议

  1. 限制内网访问范围

    nginx

    复制

    下载

    复制代码
    server {
        listen 10.11.13.60:1414;
        allow 10.11.13.0/24;  #只允许内网网段
        deny all;             #拒绝其他所有
        proxy_pass 192.168.2.15:1414;
        # ...
    }
  2. 限制外部访问源 IP (如果可能):

    nginx

    复制

    下载

    复制代码
    server {
        listen 36.*.*.218:1414;
        allow 192.168.2.15;   #只允许外部机器IP
        deny all;             #拒绝其他所有
        proxy_pass 10.11.13.26:1414;
        # ...
    }
  3. 启用连接限制

    nginx

    复制

    下载

    复制代码
    server {
        listen 36.*.*.218:1414;
        proxy_pass 10.11.13.26:1414;
        proxy_connect_timeout 10s;
        proxy_upload_rate 1m;  #限制上传速度
        proxy_download_rate 1m; #限制下载速度
    }

这个配置准确地反映了您的网络拓扑,使用 Nginx 的两个不同 IP 地址分别处理内网和外网的 1414 端口透传需求。

相关推荐
群联云防护小杜2 小时前
服务器异常磁盘写排查手册 · 已删除文件句柄篇
运维·服务器·nginx·开源·lua
川石课堂软件测试13 小时前
Oracle 数据库:视图与索引
数据库·网络协议·nginx·http·oracle·grafana·prometheus
小妖66614 小时前
mac 安装 nginx
运维·nginx·macos
Whitess00714 小时前
Websocket链接如何配置nginx转发规则?
websocket·网络协议·nginx
if时光重来1 天前
springboot项目使用websocket功能,使用了nginx反向代理后连接失败问题解决
spring boot·websocket·nginx
xiaozhenghahaha1 天前
Web相关知识(草稿)
运维·nginx
柯南二号1 天前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
工会代表1 天前
nginx配置,将前端项目配置到子路径下踩过的坑。
前端·nginx
云霄IT1 天前
CentOS7安装Nginx服务——为你的网站配置https协议和自定义服务端口
服务器·nginx·https
XMYX-01 天前
Tengine/Nginx 安装以及模块查看与扩展
运维·nginx