我想限制直接IP访问我的网站。 我发现几个涉及.htaccess的解决scheme,但没有任何工作。 我也find了一个解决scheme,通过Apache虚拟主机configuration工作正常,直到我通过CPanel安装SSL证书。 我完全不知道在httpd.conf文件中修改了什么,但现在redirect设置不起作用,即使我卸载了SSL证书。
这是我目前的虚拟主机设置:
NameVirtualHost 192.168.1.1:80 NameVirtualHost *
<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和名称被replace为通用的。 自从安装SSL证书后,“Redirect 403 /”部分不起作用。 如果有人能够澄清我在这里做错了什么,我将不胜感激。 谢谢。
而瞧,修复:
<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>
解决scheme是简单地将IPreplace为所有虚拟主机设置的域名,除了那些需要redirect/限制直接IP访问的域名。
答案可能要简单得多。
只需将其复制到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时,他才能访问服务器。
您无法禁用通过HTTPS直接访问您的服务器的IP,因为您的虚拟主机的主机名是在SSL证书内encryption的。
客户端必须连接到您的IP地址,下载证书,读取内容,然后他们可以validation主机名是否正确。
唯一的方法是通过强制执行SNI ,但是对于使用旧版Internet Explorer浏览的用户,会造成问题。
https://192.168.1.1访问者应该有SSL错误(因为URL不同于证书的URL)。 <VirtualHost *:443> SSLEngine on </VirtualHost>没有“默认SSL”网站<VirtualHost *:443> SSLEngine on </VirtualHost> 要添加另一个答案,mod_security,如果它值得你设置,有规则禁止通过IP地址访问服务器。
我在PHP中写了这个简单的代码来限制直接的IP访问!
$servername = $_SERVER['SERVER_NAME']; if($servername == 'your-domain.com'){ }elseif($servername == 'your-domain-with-www.com'){ }else{ die("Direct ip access not allowed!"); }
只需粘贴到您的PHP文件,享受!