主机上有两个 web 服务,分别占用 4000 端口和 3000 端口,基于域名+端口可成功访问
希望实现子域名访问对应端口,如下:
sub1.domain.com -- ip:3000
sub2.domain.com -- ip:4000
在域名解析供应商处完成如下配置
参考以下步骤,在服务器上完成 apache2 反向代理配置子
在 Apache 中,你可以使用mod_proxy
模块来设置反向代理,从而隐藏后端服务的真实端口号。通过这种方式,用户访问子域名时就像访问普通的 HTTP 或 HTTPS 网站一样,而不会看到后端服务运行的具体端口。
以下是基于 Apache 完成反代配置的步骤:
确保安装了 Apache 和必要的模块:
确保你的 Apache 服务器已经安装了mod_proxy
、mod_proxy_http
等模块。如果没有安装,可以通过以下命令安装(以 Debian/Ubuntu 系统为例):
sudo a2enmod proxy
sudo a2enmod proxy_http
安装完成后需要重启 Apache 服务:
sudo systemctl restart apache2
配置虚拟主机:
在 Apache 的配置文件目录下(通常是/etc/apache2/sites-available/
),创建一个新的虚拟主机配置文件,或者编辑现有的配置文件。假设你想要为子域名service.example.com
配置反向代理,并且该子域名将指向本地机器上运行的一个服务,例如运行在 3000 端口上的 Web 应用。
添加反向代理配置: 编辑配置文件并添加如下内容:
<VirtualHost *:80>
ServerName service.example.com
# 可选:重定向所有请求到 HTTPS
Redirect permanent / https://service.example.com/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName service.example.com
# SSL 证书配置
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private.key
# 如果有中间证书
SSLCertificateChainFile /path/to/chain.pem
# 开启日志记录
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# 反向代理配置
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
</IfModule>
这个配置做了几件事:
启用站点并重启 Apache: 保存更改后的配置文件,然后启用这个站点配置:
sudo a2ensite your-config-file.conf
sudo systemctl reload apache2
测试配置:
使用浏览器或其他工具(如 curl )访问http://service.example.com
,应该会被自动重定向到https://service.example.com
,并且最终可以看到运行在 8080 端口上的服务内容。
完成配置后,访问http://sub1.example.com
,无法访问,提示 502
上述配置方法可能是哪里出错了?请有实操经验的大佬指导下
除了上面这个方法,有没有其他方法?(已尝试宝塔面板)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.