如何在AWS中将端口服务映射到对应子域名?
问题分析与解决方案
你的配置核心问题在于:子域名的虚拟主机监听了服务自身的端口(如5601、5050),但用户访问子域名时默认走80端口,Apache未在80端口处理这些子域名请求,也未通过反向代理将请求转发到对应服务端口。以下是修正后的完整配置方案:
1. 启用Apache反向代理必需模块
先执行命令启用所需模块:
sudo a2enmod proxy proxy_http proxy_html rewrite sudo systemctl restart apache2
2. 修正各虚拟主机配置
default.conf(处理example.com与/radius)
将根路径转发到React的3000端口,同时保留/radius路径指向本地PHP后端:
<VirtualHost *:80> ServerAdmin contact@example.com ServerName example.com # 排除/radius路径,不转发到React ProxyPass /radius ! # 根路径反向代理到React服务 ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ # 处理/radius的PHP后端 DocumentRoot "/var/www/html" <Directory "/var/www/html/"> AllowOverride all Require all granted </Directory> </VirtualHost>
kibana.conf(处理kibana.example.com)
监听80端口,将请求转发到Kibana的5601端口:
<VirtualHost *:80> ServerAdmin contact@example.com ServerName kibana.example.com ProxyPass / http://localhost:5601/ ProxyPassReverse / http://localhost:5601/ # 解决Kibana反向代理路径适配问题 RequestHeader set X-Forwarded-Proto "http" </VirtualHost>
pgadmin.conf(处理postgradmin.example.com)
转发到PostgREST Admin的5050端口:
<VirtualHost *:80> ServerAdmin contact@example.com ServerName postgradmin.example.com ProxyPass / http://localhost:5050/ ProxyPassReverse / http://localhost:5050/ </VirtualHost>
phpmyadmin.conf(处理phpmyadmin.example.com)
转发到phpMyAdmin的8080端口:
<VirtualHost *:80> ServerAdmin contact@example.com ServerName phpmyadmin.example.com ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
3. 验证配置并重启Apache
检查配置语法:
sudo apache2ctl configtest
若返回Syntax OK,重启服务:
sudo systemctl restart apache2
额外检查项
- 确认EC2安全组允许80端口的入站流量(之前开放的3000、5601等端口仍需保留,用于本地调试)。
- 确认Docker服务已正确映射端口到EC2主机(如
-p 3000:3000,你之前能通过端口访问,此步骤无需改动)。 - 确认Route53的所有子域名A记录均指向EC2公网IP,且DNS已生效(可通过
nslookup kibana.example.com验证)。
内容的提问来源于stack exchange,提问作者user17783631
相关产品推荐
相关产品推荐

