借助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
相关产品推荐
相关产品推荐

