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 端口透传需求。

相关推荐
肠胃炎1 小时前
挂载方式部署项目
服务器·前端·nginx
曲幽5 小时前
FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了!
python·websocket·nginx·socket·fastapi·web·async·socketio
袁庭新7 小时前
M系列芯片Mac上通过Homebrew一键安装/卸载Nginx并上线项目全指南
运维·nginx·macos·袁庭新·袁庭新ai
Densen20148 小时前
发布blazor应用到Linux, 使用nginx作为WebSocket代理
linux·websocket·nginx
不是书本的小明8 小时前
Apache vs Nginx vs Tomcat 核心区别与优化
nginx·tomcat·apache
困惑阿三1 天前
客户消息及时反馈
nginx·node.js·飞书·企业微信
liurunlin8881 天前
httpslocalhostindex 配置的nginx,一刷新就报404了
运维·nginx
BullSmall1 天前
Nginx负载均衡会话保持配置指南
运维·nginx·负载均衡
你才是臭弟弟1 天前
Nginx部署前后端
运维·nginx