我正在CentOS上使用apache Web服务器,并且需要禁用人们通过在Web浏览器中使用服务器的IP地址访问网站的功能。我想要这样,以便当有人尝试浏览到IP地址时,他们得到一条禁止的错误消息。
为此需要什么配置?
我正在CentOS上使用apache Web服务器,并且需要禁用人们通过在Web浏览器中使用服务器的IP地址访问网站的功能。我想要这样,以便当有人尝试浏览到IP地址时,他们得到一条禁止的错误消息。
为此需要什么配置?
Answers:
您可以使用mod_rewrite(在.htaccess
文件中,或者在默认服务器上下文中,或者在单独的VirtualHost(其中ServerName
,主机IP地址)中)实现此目的:
RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]
这表示如果HTTP_HOST标头与ip地址1.2.3.4匹配,则任何请求都应使用来满足403 Forbidden
。具有另一个HTTP_HOST标头(例如,具有实际域名而不是IP地址的标头)的任何请求都不会受到影响。
您不能通过IP阻止直接访问。您必须允许连接,然后再决定如何处理。这可以是返回403、404或将其重定向到所需的页面。您可以使用mod_rewrite完成此操作。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
RewriteRule ^(.*)$ - [F,L]
这将与Web客户端传递的HTTP HOST标头匹配。所有其他请求都会通过。
但是,您可能希望出于SEO目的标准化URL。
使用这种方法,您可以重写不符合预期结果的所有内容。
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
参考:https : //httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl
此解决方案未涵盖所有情况。
将IP URL中的任何数字或点替换为其%##,例如用%31 ... 1替换%38 ...用%38替换,您将到达IP,而不是域URL。
假设此不良IP用于缓解说明:123.45.6.789
您必须对所有数字和点使用2个替代方法:点是%2E,0..9是%30 ..%39
RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]
丑陋的,可以用{1,3}减少它,并限制为有效IP,但是就您的IP而言,不需要这样做。
不要忘记“:80”之类的端口。HTTP_HOST包含它,SERVER_NAME不可靠。