Apache에서 누군가 웹 브라우저에서 IP 주소 만 사용할 때 웹 사이트에 대한 액세스를 비활성화하려면 어떻게합니까? 아파치 웹

CentOS에서 아파치 웹 서버를 사용하고 있으며 웹 브라우저에서 서버의 IP 주소를 사용하여 사람들이 웹 사이트에 액세스하는 기능을 비활성화해야합니다. 누군가가 IP 주소를 탐색하려고 할 때 금지 된 오류 메시지가 표시되도록하고 싶습니다.

이를 위해 어떤 구성이 필요합니까?



답변

기본 가상 호스트를 설정하기 만하면됩니다. 주석이 달린 예가 httpd.conf있거나 다음과 같은 사소한 일을합니다.

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>


답변

mod_rewrite ( .htaccess파일 또는 기본 서버 컨텍스트 또는 ServerName호스트의 IP 주소 인 별도의 VirtualHost )를 사용하여이를 수행 할 수 있습니다.

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]

웹 클라이언트가 전달한 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

참조 : http://en.wikipedia.org/wiki/URL_normalization


답변

이 솔루션은 모든 경우를 다루지는 않습니다.

IP URL의 숫자 나 점을 % ## (예 : 1 x % 31 … 8 x % 38)로 바꾸면 도메인 URL이 아닌 IP에 도착하게됩니다.

설명을 쉽게하기 위해 사용 된이 잘못된 IP를 가정하십시오. 123.45.6.789

모든 숫자와 점에 대해 두 가지 대안을 사용해야합니다. 도트는 % 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이 (가) 신뢰할 수 없습니다.


답변