如何在 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通过防火墙禁用

wampserver外网ip不能直接访问?

Apache HTTP Server:如何将对目录列表的访问限制在某些 IP 范围内?

如何禁用对 iframe 的直接访问

如何在 ios 模拟器中禁用 ip https 验证?

apache_conf 禁用直接访问文件