You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NGINX转发URL中指定的动态端口

实现NGINX基于动态端口的反向代理转发

注:你描述中提到的域名是dummy.de,但示例使用dummy.com,以下配置以你提供的配置文件中的dummy.com为准。

要实现将dummy.com:动态端口的请求转发到xxx.yyy.zzz:相同动态端口,你需要利用NGINX的内置变量获取请求端口,并调整代理目标地址,同时确保NGINX监听对应端口。以下是具体修改方案:

修改后的NGINX配置

server {
    server_name dummy.com;

    # 监听所有需要代理的端口(示例包含443及动态端口范围,可根据实际需求调整)
    listen 443 ssl;
    listen 20000-20100 ssl; # 若需要批量监听端口范围,可使用这种格式
    # 如果是HTTP请求,添加对应的listen指令(无需ssl参数)
    # listen 80;
    # listen 20000-20100;

    location / {
        # 使用$server_port变量获取当前请求的端口,动态构造代理目标地址
        proxy_pass http://xxx.yyy.zzz:$server_port;
        
        proxy_set_header Host $host:$server_port; # 保留原主机和端口
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 以下SSL配置保持不变(由Certbot管理)
    ssl_certificate /etc/letsencrypt/live/dummy.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dummy.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

关键修改说明

  • 动态端口获取:使用NGINX内置变量$server_port,它会自动获取当前请求到达NGINX的端口,以此动态构造proxy_pass的目标地址,实现端口一一对应转发。
  • 端口监听配置:
    • 如果是HTTPS请求,每个需要代理的端口都要添加listen 端口 ssl;指令,可使用端口范围格式批量配置(如20000-20100 ssl)。
    • 如果是HTTP请求,添加不带ssl参数的listen指令即可。
  • Host头设置:将proxy_set_header Host改为$host:$server_port,确保后端服务能获取到完整的主机和端口信息,若后端无需端口可保留原$host。

注意事项

  1. 确保服务器防火墙已开放所有需要代理的端口(如20000-20100),否则外部请求无法到达NGINX。
  2. 若动态端口范围较大,批量监听端口可能会占用较多系统资源,需根据实际业务需求合理规划端口范围。
  3. 修改配置后,执行sudo nginx -t检查配置语法是否正确,无误后执行sudo systemctl reload nginx使配置生效。

内容的提问来源于stack exchange,提问作者n9p4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:48:34