Apache2重定向后URL显示内网IP,如何保持域名显示?
解决方案
要让用户访问domain2.com时URL始终显示域名而非内网IP,不要用重定向(Redirect),改用反向代理——重定向会强制浏览器跳转并改变地址栏,反向代理是服务器后端转发请求,用户端URL不会变化。具体步骤如下:
1. 启用Apache代理模块
在192.168.1.16的树莓派上执行以下命令,开启Apache的代理功能:
a2enmod proxy proxy_http systemctl restart apache2
2. 修改VirtualHost配置
替换www.domain2.com对应的VirtualHost配置,去掉原来的Redirect指令,改用代理转发:
<VirtualHost *:80> ServerName www.domain2.com # 新增代理配置 ProxyPass "/" "http://192.168.1.11/" ProxyPassReverse "/" "http://192.168.1.11/" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
ProxyPass:把所有请求转发到内网的192.168.1.11服务器ProxyPassReverse:把192.168.1.11返回的响应中包含内网IP的内容替换成www.domain2.com,确保前端显示的是域名
3. 处理不带www的域名(可选)
如果需要支持domain2.com(不带www)的访问,在上述VirtualHost中添加ServerAlias:
ServerAlias domain2.com
为什么之前的方法失效?
- 直接重定向到内网IP:浏览器会收到跳转指令,地址栏直接显示192.168.1.11,不符合需求。
- 重定向到
domain2.com加hosts配置:192.168.1.16会把domain2.com解析到192.168.1.11,但192.168.1.11的Apache可能未配置domain2.com的站点;另外提示“无法提供安全连接”大概率是浏览器默认跳转HTTPS,但后端服务器未配置对应SSL证书。
内容的提问来源于stack exchange,提问作者Jacques
相关产品推荐
相关产品推荐

