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

同一域名不同端口部署双服务:Nginx配置可行性咨询

问题

我在Linux服务器上运行着一个监听http://localhost:9500的HTTP服务,该服务器已通过Nginx在443端口配置了对外提供服务的公网网站https://example.com。请问能否通过配置Nginx,将本地服务映射到https://example.com:9500对外提供访问?

当前Nginx配置如下:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;
    server_tokens off;
    root /home/app/example.com/public;

    ssl_certificate /etc/nginx/ssl/example.com/1722357/server.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/1722357/server.key;

    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_dhparam /etc/nginx/dhparams.pem;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/example.com-error.log error;

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
解答

完全可以实现,只需新增一个监听9500端口的HTTPS Server块,将请求反向代理到本地http://localhost:9500服务即可,具体操作如下:

1. 添加新的Nginx Server配置

在现有Nginx配置文件中插入以下server块:

server {
    listen 9500 ssl http2;
    listen [::]:9500 ssl http2;
    server_name example.com;
    server_tokens off;

    # 复用原有SSL证书,无需重新申请
    ssl_certificate /etc/nginx/ssl/example.com/1722357/server.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/1722357/server.key;

    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_dhparam /etc/nginx/dhparams.pem;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # 核心反向代理规则,转发到本地服务
    location / {
        proxy_pass http://localhost:9500;
        proxy_set_header Host $host;
        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;
    }

    access_log off;
    error_log /var/log/nginx/example.com-9500-error.log error;
}

2. 配置关键说明

  • SSL复用:直接使用原有证书,保证https://example.com:9500的访问安全,避免浏览器出现证书告警
  • 反向代理:proxy_pass指令将外部HTTPS请求转发到本地HTTP服务,Nginx自动完成协议转换
  • 代理头设置:传递Host、X-Real-IP等头信息,让后端服务能正确识别客户端来源和请求协议

3. 验证并重启Nginx

  • 先检查配置语法是否正确:
    nginx -t
    
  • 确认无误后重启Nginx生效:
    systemctl restart nginx
    

4. 开放防火墙端口

确保服务器防火墙已开放9500端口的TCP访问,否则公网无法连接:

  • 若使用ufw:
    ufw allow 9500/tcp
    
  • 若使用firewalld:
    firewall-cmd --add-port=9500/tcp --permanent && firewall-cmd --reload
    

可选替代方案

如果不想额外开放9500端口,也可以通过路径前缀(如https://example.com/local-service)来映射本地服务,只需在原有443端口的server块中新增以下location规则:

location /local-service/ {
    proxy_pass http://localhost:9500/;
    proxy_set_header Host $host;
    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;
}

这种方式无需修改端口配置,更适合注重端口安全的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:17:52