如何通过Apache配置将URL中的IP:端口还原为mysite.com域名?
解决URL显示公网IP+端口而非原域名的问题
先捋清楚你的场景:
- 你用Namecheap的DNS重定向把
mysite.com指向了路由器公网IP45.40.45.40:9999(Ubuntu虚拟机Apache的非标准端口) - 访问
mysite.com:9999时,浏览器地址栏会变成45.40.45.40:9999,想让地址栏一直显示mysite.com
这个问题核心是DNS重定向本质是HTTP跳转,没让Apache正确处理域名请求,再加上用了非标准端口,得从DNS、路由器转发、Apache配置三个层面调整,具体操作如下:
一、先修正DNS设置(关键前提)
Namecheap的DNS重定向会直接触发地址跳转,这是地址栏变IP的根源。你得改成A记录解析:
- 登录Namecheap后台,找到域名的DNS设置面板
- 添加一条A记录:主机记录填
@(或留空),值填公网IP45.40.45.40,TTL选默认(比如300) - 如果需要支持
www.mysite.com,再添加一条A记录:主机记录填www,值同样是45.40.45.40
这样DNS会直接把域名解析到公网IP,而不是做跳转。
二、配置路由器端口转发
要让用户不用手动加端口访问,得把标准HTTP端口转发到虚拟机的9999端口:
- 登录路由器管理后台,找到「端口转发」/「虚拟服务器」选项
- 添加规则:外部端口80,内部端口9999,内部IP填Ubuntu虚拟机的局域网IP(比如
192.168.1.100),协议选TCP - 后续如果要配HTTPS,再添加外部端口443转发到内部9999(也可以单独用一个新端口,先搞定HTTP再说)
这样用户访问mysite.com(默认走80端口)时,路由器会自动把请求转发到虚拟机的Apache 9999端口。
三、调整Apache虚拟主机配置
你的现有配置已经监听9999端口,但需要加规则强制把IP+端口的请求重定向回域名。修改/etc/apache2/sites-available/mysite.com.conf:
Listen 9999 <VirtualHost *:9999> <Directory /var/www/mysite.com/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> ServerAdmin info@mysite.com ServerName mysite.com ServerAlias www.mysite.com DocumentRoot /var/www/mysite.com/html # 新增重写规则,把非域名的请求强制跳转到原域名 RewriteEngine On RewriteCond %{HTTP_HOST} !^mysite\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC] RewriteRule ^(.*)$ https://mysite.com$1 [R=301,L] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
执行以下命令让配置生效:
sudo a2enmod rewrite # 如果之前没启用重写模块,先执行这个 sudo systemctl restart apache2
四、验证步骤
- 清空浏览器缓存(避免旧的跳转记录干扰)
- 访问
mysite.com,地址栏应该保持mysite.com不变 - 如果还是有问题,排查这几点:
- 用
nslookup mysite.com检查DNS解析是否指向正确的公网IP - 用在线端口检测工具确认路由器的80端口是否开放
- 用
sudo netstat -tulpn | grep apache2确认Apache在监听9999端口
- 用
内容的提问来源于stack exchange,提问作者qlf
相关产品推荐
相关产品推荐

