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

相关推荐
fatcoder8 小时前
玩转Nginx 04 — 反向代理:给 nginx 接上后端
前端·后端·nginx
fatcoder10 小时前
玩转Nginx 03 — location 匹配规则:让不同的路径各回各家
前端·后端·nginx
王坊兴11 小时前
Ubuntu 部署产品原型静态服务器:SFTP + Nginx
服务器·nginx·ubuntu
烬羽12 小时前
nginx 里写 localhost 反而 502?一条请求带你彻底搞懂 Docker 端口映射与反向代理
nginx·docker·程序员
小林ixn12 小时前
Docker + Nginx 反向代理:从“我电脑能跑”到“哪里都能跑”
nginx·docker·容器
CDN36012 小时前
源站隐藏实操:出海网站 IP 暴露、被扫描打源,CDN+Nginx 白名单加固方案
网络·tcp/ip·nginx·源站隐藏·cdn防护
运维全栈笔记13 小时前
Ubuntu 24.04 Certbot 自动化SSL证书配置指南
linux·运维·服务器·nginx·ubuntu·自动化·ssl
ly768914 小时前
负载均衡详解:从四层、七层到 LVS、Keepalived、Nginx 与 HAProxy
nginx·负载均衡·lvs
用户938515635071 天前
Docker + Nginx + Node.js:从“我的电脑能跑,你的电脑跑不了”到一键部署
后端·nginx·docker
teak_on_my_way1 天前
外网通过 Nginx 访问 Doris Stream Load:一次 HTTP 307 疑难排查与完整代理方案
运维·数据库·nginx·http