
主机上有两个 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
上述配置方法可能是哪里出错了?请有实操经验的大佬指导下
除了上面这个方法,有没有其他方法?(已尝试宝塔面板)
可能是背景交代不全,补充说明下,服务器端的web服务是docker起的,架构如下

1 pgup 2024-10-06 21:12:31 +08:00 想知道配置文件中『 ProxyPass 』和『 ProxyPassReverse 』后面配置的内容是什么。这个地方比较容易出错,可能误以为 /sub1/ http://localhost:8080/ 对应 https://sub1.example.com ,但实际上对应 https://example/sub1.com 。 |
2 CamelName OP @pgup 感谢答复,以 sub1 为例(对应端口 3000 ),配置文件中的两个参数是如下配置: ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ |
3 z7356995 2024-10-06 21:55:20 +08:00 via Android 你要查看 log |
4 CamelName OP @pgup 完整参数如下: ``` <VirtualHost *:80> ServerName sub1.example.com # 反向代理配置 ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> # 设置后端服务地址 ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ # 日志记录 ErrorLog ${APACHE_LOG_DIR}/sub1.example.com_error.log CustomLog ${APACHE_LOG_DIR}/sub1.example.com_access.log combined </VirtualHost> ``` |
5 jucelin 2024-10-07 08:29:00 +08:00 可以测试下 http://localhost:3000/ 能不能访问。 再分别尝试 http://127.0.0.1:3000/ http://内网 IP:3000/ |
6 SenLief 2024-10-07 08:31:10 +08:00 看一下日志吧,502 有些是后端应用的问题,我之前就是后端挂了不知道出现了 502 |
7 CamelName OP @jucelin 服务端 Curl 这几种写法都是能访问的  |
9 CamelName OP 结帖,问题还是,DNS 子域名配置的问题,参考下图配置,就能成功访问了。  |