如何禁止通过EC2公网IPv4及公有DNS访问已部署的应用?
这个问题我之前帮朋友处理过,本质上是两个层面的问题:一是你的EC2实例直接暴露了公网访问入口,二是Apache的重定向规则只覆盖了自定义域名,没处理IP和EC2默认域名的情况。给你两个方案,优先推荐第一个,符合生产环境的最佳实践:
解决方案
方案1:通过安全组限制流量(推荐)
既然已经配置了负载均衡,正常来说所有用户流量都应该通过负载均衡转发到EC2实例,直接访问EC2的IP/DNS属于非预期访问。你可以通过修改EC2实例的安全组从根源解决:
- 编辑EC2实例的入站规则,移除对
0.0.0.0/0(所有公网IP)开放80(HTTP)和443(HTTPS)端口的规则 - 添加新的入站规则,允许负载均衡对应的安全组访问80和443端口
- 这样一来,只有负载均衡能和EC2实例通信,外部用户直接访问EC2的IP或DNS时会被安全组拦截,彻底杜绝这类非预期访问
方案2:配置Apache全局HTTPS重定向(保留直接访问场景)
如果因为测试或其他原因需要保留EC2 IP/DNS的直接访问权限,那就要修改Apache的配置,让所有HTTP请求不管访问的Host是什么,都强制重定向到HTTPS:
- 登录到你的EC2实例,打开Apache的站点配置文件(通常是
/etc/apache2/sites-available/000-default.conf或者WordPress对应的站点配置文件) - 在
<VirtualHost *:80>块中,替换原有内容为如下规则:<VirtualHost *:80> ServerName mysiteweb.com # 把EC2公有DNS和公网IP添加为别名 ServerAlias ec2-XX-XX-XX-XX.compute-1.amazonaws.com XX.XXX.XXX.XX # 永久重定向到HTTPS Redirect permanent / https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost> - 确保Apache已启用
rewrite模块(如果之前没启用):sudo a2enmod rewrite - 重启Apache服务使配置生效:
sudo systemctl restart apache2
额外检查:WordPress站点配置
如果通过IP或EC2 DNS访问时出现内容加载异常,还需要调整WordPress的站点URL设置:
- 登录WordPress后台,进入「设置」→「常规」
- 确保「WordPress地址(URL)」和「站点地址(URL)」都设置为你的自定义域名
https://mysiteweb.com,不要用IP或EC2默认域名 - 如果无法通过后台修改,直接编辑
wp-config.php文件,添加以下两行:define('WP_HOME','https://mysiteweb.com'); define('WP_SITEURL','https://mysiteweb.com');
这样处理后,要么彻底阻断直接访问EC2的路径,要么让所有HTTP请求(不管用什么地址访问)都跳转到HTTPS,完美解决你的问题。
内容的提问来源于stack exchange,提问作者medkhelifi
相关产品推荐
相关产品推荐

