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

借助Nginx反向代理移除URL中的端口号

问题排查与解决方案

核心问题分析

你的配置存在两个关键问题:

  • Nginx的server_name未指定目标域名,导致无法匹配dev.something.com的请求
  • Apache虚拟主机的ServerName包含端口号,与Nginx转发的Host头不匹配,Apache无法正确响应

具体修复步骤

1. 修正Nginx配置

编辑/etc/nginx/sites-available/default,将server_name改为你的目标域名,同时注释掉反向代理场景不需要的静态文件配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # 反向代理场景无需Nginx直接提供静态文件,注释以下配置
    # root /var/www/html;
    # index index.html index.htm index.nginx-debian.html;

    server_name dev.something.com;

    location / {
       proxy_pass http://dev.something.com:44999;
       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;
    }
}

2. 修正Apache虚拟主机配置

编辑/etc/apache2/sites-available/dev_something_com.conf,将ServerName改为不带端口的域名,确保与Nginx转发的Host头匹配:

<VirtualHost *:44999>

    ServerName dev.something.com

    ServerAdmin something@gmail.com
    DocumentRoot /var/www/dev_something_com

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

3. 验证配置并重启服务

  • 验证Nginx配置语法:
    sudo nginx -t
    
  • 验证Apache配置语法:
    sudo apache2ctl configtest
    
  • 重启两个服务使配置生效:
    sudo systemctl restart nginx
    sudo systemctl restart apache2
    

4. 防火墙检查

确保Ubuntu的ufw防火墙开放了80端口(Nginx监听端口):

sudo ufw allow 80/tcp
sudo ufw reload

5. 本地DNS缓存清理(可选)

如果本地访问仍存在解析问题,清理系统DNS缓存:

sudo systemd-resolve --flush-caches

测试访问

完成以上步骤后,直接访问http://dev.something.com即可正常访问Apache后端服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:47:36