У меня есть несколько сайтов размещен на моем сервере. Если вы напрямую введете IP-адрес на сервер, он приведет вас к одному из сайтов, я хотел ограничить это поведение, поэтому я использовал следующее исправление:
<VirtualHost 192.168.1.1:80>
ServerName 192.168.1.1
Redirect 403 /
ErrorDocument 403 "Forbidden"
DocumentRoot /var/www/html
ServerAdmin support@siteadmin.com
UseCanonicalName Off
#UserDir disabled
</VirtualHost>
И это сработало для ограничения прямого IP-доступа, однако теперь мой другой сайты теперь недоступны и отображают запрещенное сообщение.
Как я могу изменить это так, чтобы прямой IP-доступ по-прежнему был запрещен, но другие мои сайты по-прежнему могли быть доступны, используя их доменные имена?
Вот мой полный файл конфигурации:
<VirtualHost *:80>
ServerName admin.example.com
Redirect permanent / https://admin.example.com/
</VirtualHost>
<VirtualHost 192.168.1.1:80>
ServerName 192.168.1.1
Redirect 403 /
ErrorDocument 403 "Forbidden"
DocumentRoot /var/www/html
ServerAdmin support@example.com
UseCanonicalName Off
#UserDir disabled
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName admin.example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/user/example/static
<Directory /home/user/example/static>
Require all granted
</Directory>
<Directory /home/user/example/example>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/user/example/example/wsgi.py
WSGIDaemonProcess example python-path=/home/user/example python-home=/home/user/example/venv
WSGIProcessGroup example
SSLCertificateFile /etc/letsencrypt/live/admin.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/admin.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Один из способов - потребовать, чтобы клиент отправлял заголовок Host
:
Require expr %{HTTP_HOST} .
Вероятно, лучший способ - определить виртуальные хосты для всех имен хостов, которые вы хотите поддерживать, но иметь первый виртуальный host, который используется по умолчанию, если ни один из других не подходит, запрещает соединения:
<VirtualHost *>
Require all denied
</VirtualHost>
<VirtualHost *>
ServerName example.com
</VirtualHost>
<VirtualHost *>
ServerName admin.example.com
</Virtualhost>
...