我想限制对我网站的直接 IP 访问。我找到了几个涉及 .htaccess 的解决方案,但都不起作用。我还找到了一个通过 apache 虚拟主机配置的解决方案,在我通过 CPanel 安装 SSL 证书之前,它一直运行良好。我完全不知道 httpd.conf 文件中更改了什么,但现在即使我卸载了 SSL 证书,重定向设置也不起作用。
这是我当前的虚拟主机设置:
名称虚拟主机 192.168.1.1:80 名称虚拟主机 *
<VirtualHost 192.168.1.1:80>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /home/rotate/public_html
ServerAdmin [email protected]
UseCanonicalName Off
## User rotate # Needed for Cpanel::ApacheConf
UserDir disabled
UserDir enabled rotate
ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
</VirtualHost>
<VirtualHost 192.168.1.1:80>
ServerName 192.168.1.1
Redirect 403 /
ErrorDocument 403 "Sorry, direct IP access not allowed."
DocumentRoot /usr/local/apache/htdocs
ServerAdmin [email protected]
UseCanonicalName Off
UserDir disabled
</VirtualHost>
<VirtualHost *>
ServerName server.mysite.com
DocumentRoot /usr/local/apache/htdocs
ServerAdmin [email protected]
UserDir disabled
</VirtualHost>
NameVirtualHost 192.168.1.1:443
<VirtualHost 192.168.1.1:443>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /home/rotate/public_html
ServerAdmin [email protected]
UseCanonicalName Off
UserDir disabled
UserDir enabled rotate
ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
SSLEngine on
#SSL stuff here
</VirtualHost>
IP 和名称已替换为通用名称。自从安装 SSL 证书以来,“重定向 403 /”部分不起作用。如果有人能解释一下我在这里做错了什么,我将不胜感激。谢谢。
答案1
瞧,修复方法如下:
<VirtualHost mysite.com:80>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /home/rotate/public_html
ServerAdmin [email protected]
UseCanonicalName Off
</VirtualHost>
NameVirtualHost mysite.com:80
<VirtualHost 192.168.1.1:80>
ServerName 192.168.1.1
Redirect 403 /
ErrorDocument 403 "Sorry, direct IP access not allowed."
DocumentRoot /usr/local/apache/htdocs
ServerAdmin [email protected]
UseCanonicalName Off
UserDir disabled
</VirtualHost>
<VirtualHost *>
ServerName server.mysite.com
DocumentRoot /usr/local/apache/htdocs
ServerAdmin [email protected]
UserDir disabled
</VirtualHost>
NameVirtualHost mysite.com:443
<VirtualHost mysite.com:443>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /home/rotate/public_html
ServerAdmin [email protected]
UseCanonicalName Off
</VirtualHost>
解决方案是简单地将所有虚拟主机设置的 IP 替换为域名,除了需要重定向/限制直接 IP 访问的设置之外。
答案2
答案可能简单得多。
只需将其复制到 httpd.conf 的底部(通常位于 /etc/httpd/conf)
<VirtualHost *:80>
ServerName localhost
Redirect 403 /
UseCanonicalName Off
UserDir disabled
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>
那么只有访问者通过www.example.com访问时,他才能访问服务器。
答案3
您无法禁用通过 HTTPS 对服务器的直接 IP 访问,因为虚拟主机的主机名是在 SSL 证书内加密的。
客户端必须连接到您的 IP 地址,下载证书,读取内容,然后才能验证主机名是否正确。
唯一的其他方法是执行信噪比,但这会给使用旧版本 Internet Explorer 浏览的用户带来麻烦。
答案4
在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 vhost 文件的内容
<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