插件窝 干货文章 nginx反向代理怎么实现多端口映射

nginx反向代理怎么实现多端口映射

proxy server 端口 映射 322    来源:    2025-04-23

Nginx反向代理实现多端口映射

Nginx反向代理可以通过多种方式实现多端口映射,以下是几种常见的方法:

方法一:基于不同server块的端口映射

# 映射端口8080到后端服务的80端口
server {
    listen 8080;
    server_name example.com;

    location / {
        proxy_pass http://backend_server:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# 映射端口8443到后端服务的443端口
server {
    listen 8443;
    server_name example.com;

    location / {
        proxy_pass https://backend_server:443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

方法二:基于不同location的端口映射

server {
    listen 80;
    server_name example.com;

    # 映射/app1到后端服务的8080端口
    location /app1 {
        proxy_pass http://backend_server:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 映射/app2到后端服务的8081端口
    location /app2 {
        proxy_pass http://backend_server:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

方法三:基于不同子域名的端口映射

# app1.example.com 映射到8080端口
server {
    listen 80;
    server_name app1.example.com;

    location / {
        proxy_pass http://backend_server:8080;
        proxy_set_header Host $host;
    }
}

# app2.example.com 映射到8081端口
server {
    listen 80;
    server_name app2.example.com;

    location / {
        proxy_pass http://backend_server:8081;
        proxy_set_header Host $host;
    }
}

方法四:使用变量动态映射端口

server {
    listen 80;
    server_name example.com;

    # 使用正则表达式捕获端口号
    location ~ ^/port/(\d+)(/.*)?$ {
        set $backend_port $1;
        set $backend_path $2;
        proxy_pass http://backend_server:$backend_port$backend_path;
        proxy_set_header Host $host;
    }
}

注意事项

  1. 确保Nginx配置文件中每个server块或location块都有正确的proxy_pass指令
  2. 根据需要添加适当的proxy_set_header指令
  3. 对于HTTPS服务,需要配置SSL证书
  4. 修改配置后需要重新加载Nginx:nginx -s reload
  5. 确保防火墙允许相关端口的流量

高级配置示例(带负载均衡)

upstream backend_servers {
    server backend1:8080;
    server backend2:8080;
    server backend3:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

以上配置可以根据实际需求进行调整和组合,实现灵活的多端口映射功能。