내 웹 사이트에 대한 직접 IP 액세스를 제한하고 싶습니다. .htaccess와 관련된 몇 가지 솔루션을 찾았지만 작동하지 않습니다. 또한 CPanel을 통해 SSL 인증서를 설치할 때까지 아파치 가상 호스트 구성을 통해 하나의 솔루션을 찾았습니다. httpd.conf 파일에서 무엇이 변경되었는지 전혀 몰랐지만 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 me@mysite.com
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 me@mysite.com
UseCanonicalName Off
UserDir disabled
</VirtualHost>
<VirtualHost *>
ServerName server.mysite.com
DocumentRoot /usr/local/apache/htdocs
ServerAdmin me@mysite.com
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 me@mysite.com
UseCanonicalName Off
UserDir disabled
UserDir enabled rotate
ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
SSLEngine on
#SSL stuff here
</VirtualHost>
IP와 이름은 일반적인 것으로 대체되었습니다. SSL 인증서를 설치 한 이후 “Redirect 403 /”부분이 작동하지 않습니다. 누군가 내가 여기서 뭘 잘못하고 있는지에 대해 밝힐 수 있다면 감사 할 것입니다. 감사.
답변
그리고 짜잔, 수정 :
<VirtualHost mysite.com:80>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /home/rotate/public_html
ServerAdmin me@mysite.com
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 me@mysite.com
UseCanonicalName Off
UserDir disabled
</VirtualHost>
<VirtualHost *>
ServerName server.mysite.com
DocumentRoot /usr/local/apache/htdocs
ServerAdmin me@mysite.com
UserDir disabled
</VirtualHost>
NameVirtualHost mysite.com:443
<VirtualHost mysite.com:443>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /home/rotate/public_html
ServerAdmin me@mysite.com
UseCanonicalName Off
</VirtualHost>
해결책은 IP를 직접 IP 액세스를 리디렉션 / 제한해야하는 경우를 제외하고 모든 가상 호스트 설정에 대한 도메인 이름으로 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을 통해 액세스 할 때만 서버에 액세스 할 수 있습니다.
답변
가상 호스트의 호스트 이름이 SSL 인증서 내에서 암호화되므로 HTTPS를 통해 서버에 대한 직접 IP 액세스를 비활성화 할 수 없습니다.
클라이언트는 IP 주소에 연결하고 인증서를 다운로드하고 내용을 읽은 다음 호스트 이름이 올바른지 확인할 수 있어야합니다.
다른 방법은 SNI 를 적용하는 것이지만 이전 버전의 Internet Explorer를 사용하는 사용자에게는 문제가 발생할 수 있습니다.
답변
- 인증서가 192.168.1.1이 아닌 example.com에 발행되거나 둘 다 발행되지 않았을 수 있습니다. 따라서 사용하는 방문자
https://192.168.1.1
는 URL이 인증서의 URL과 다르기 때문에 SSL 오류가 있어야합니다. - ‘기본 SSL’웹 사이트가 없습니다
<VirtualHost *:443> SSLEngine on </VirtualHost>
- 호스트 당 SSL을 사용하려면 SNI 지원 (일부 libSSL 및 Apache 버전 요구 사항이 있음)과 함께 Apache를 사용해야합니다 ( 하나의 IP 주소로 Apache에서 여러 SSL 인증서 사용 참조)
답변
답변
또 다른 대답을 추가하기 위해 mod_security는 설정하는 것이 가치가 있다면 ip 주소로 서버에 액세스하는 것을 금지하는 규칙을 가지고 있습니다.
답변
파일을 기본 / var / www / html 디렉토리에 넣지 않으면 쉽게 할 수 있습니다. 다른 디렉토리를 만들면 / web이라고 말하면됩니다.
mkdir /web
mkdir /web/example
파일을 복사하고 chown을 변경하십시오.
sudo chown -R www-data:www-data /web
그런 다음 다음 구성으로 가상 호스트를 만듭니다.
<Directory /web/example>
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /web/example
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
# Force SSL, you can remove this line
Redirect permanent / https://example.com/
ServerAdmin webmaster@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# If you use SSL
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot /web/example
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# adapt this to your paths
SSLEngine on
SSLCertificateFile /etc/ssl/example/example_com.crt
SSLCertificateKeyFile /etc/ssl/example/example.key
SSLCertificateChainFile /etc/ssl/example/example_com.ca-bundle
</VirtualHost>
</IfModule>
가상 호스트를 활성화하는 것을 잊지 마십시오 (예 :
sudo a2ensite example.com.conf