如何在 Apache 中禁用直接 ip 访问
Posted
技术标签:
【中文标题】如何在 Apache 中禁用直接 ip 访问【英文标题】:How disable direct ip access in Apache 【发布时间】:2019-02-04 20:12:07 【问题描述】:我有一个有CloudFlare保护的网站,貌似也不错,不过输入我服务器的原IP就可以正常进入了。
我正在使用 Apache (XAMPP) 和 SSL (https://)
当您使用 CloudFlare 从 IP 地址输入时,我想要类似的东西,这会引发错误 1003
【问题讨论】:
Stack Overflow 用于编程问题。 Server Fault 或 Webmasters 是询问网络服务器配置的更好地方。 【参考方案1】:编辑或创建一个默认虚拟主机并将其放入:
<VirtualHost *:80>
ServerName xxx.xxx.xxx.xxx
Redirect 403 /
DocumentRoot /var/www/html
</VirtualHost>
xxx.xxx.xxx.xxx 是你的服务器 ip 地址
之后重启你的apache
sudo a2ensite your-vhost.conf
sudo systemctl restart apache2
希望有帮助
【讨论】:
【参考方案2】:您可以验证请求中收到的域是否与您的站点域匹配。如果不是,则强制重定向到用户。像这样:
RewriteEngine on
RewriteCond %HTTP_HOST !^www.example.com
RewriteRule (.*) https://www.example.com$1 [R=301,L]
所以IP访问将被强制回域名。 显然,你可以返回任何东西,这只是我经常看到的一种方法。
【讨论】:
【参考方案3】:ubuntu 20.04下
服务器版本:Apache/2.4.41 (Ubuntu)
我刚刚将我的 000-default-ssl.conf 复制为 disable-ip.ssl.conf 并放在内容下方
cd /etc/apache2/sites-available
cp 000-default-ssl.conf disable-ip.ssl.conf
disable-ip.ssl.conf 虚拟主机文件的内容
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin root@localhost
ServerName localhost
ServerAlias XXX.XXX.XX.XX # here write ip adresss of your web site
UseCanonicalName Off
Redirect 403 /
ErrorDocument 403 "Sorry, direct IP access not allowed."
ErrorLog $APACHE_LOG_DIR/error.log
CustomLog $APACHE_LOG_DIR/access.log combined
SSLEngine on
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
然后
a2ensite disable-ip.ssl.conf
service apache2 restart
【讨论】:
以上是关于如何在 Apache 中禁用直接 ip 访问的主要内容,如果未能解决你的问题,请参考以下文章
centos服务器如何监控访问ip,并将非法ip通过防火墙禁用