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

相关推荐
siqiangming13 小时前
SpringBoot+vue+SSE+Nginx实现消息实时推送
前端·vue.js·spring boot·nginx
流烟默14 小时前
用 Spring Boot 静态资源映射 vs 用 Nginx 提供静态文件服务总结
spring boot·后端·nginx
小妖66615 小时前
nginx 编译添加 ngx_http_proxy_connect_module 模块
运维·nginx·http
Clownseven1 天前
Nginx Lua模块(OpenResty)实战:动态化、智能化你的Nginx,实现复杂Web逻辑 (2025)
nginx·lua·openresty
dessler2 天前
Web服务器-一代经典LAMP
linux·运维·nginx
聂 可 以2 天前
Nginx基础篇(Nginx目录结构分析、Nginx的启用方式和停止方式、Nginx配置文件nginx.conf文件的结构、Nginx基础配置实战)
linux·运维·nginx
神秘的土鸡2 天前
Nginx网站服务:从入门到LNMP架构实战
运维·nginx·架构
☆凡尘清心☆2 天前
LNMP环境中php7.2升级到php7.4
linux·nginx·centos·lnmp
Menimeky3 天前
Nginx详解(三):ngx_http_rewrite_module模块核心指令详解
运维·nginx·http