В настоящее время я настраиваю веб-сайт на Ubuntu 18.04 с Apache2.4.
Я пытаюсь ограничить доступ HTTP (S) к моим поддоменам определенными IP-адресами. Эти поддомены используются либо для тестов разработки, либо являются инструментами администратора (phpMyAdmin и т. Д.), Поэтому я определенно не хочу, чтобы эти поддомены были общедоступными.
Я также хочу, чтобы domain.com был общедоступным.
Каково текущее состояние сайта:
Каков ожидаемый результат:
Это моя конфигурация:
Записи DNS:
Name Type TTL Target
A 300 ServerIP
sub1 CNAME 300 domain.com
sub2 CNAME 300 domain.com
www CNAME 300 domain.com
apache2.conf:
[...]
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/html/sub1>
AllowOverride All
Require all denied
</Directory>
[...]
/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName domain.com
ServerAlias domain.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
/etc/apache2/sites-available/sub1.domain.com.conf
<VirtualHost *:80>
ServerName sub1.domain.com
DocumentRoot /var/www/html/sub1
<Directory /var/www/html/sub1>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all denied
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =sub1.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Символические ссылки сделаны из /etc/apache2/sites-available/sub*.domain.com.conf
к /etc/apache2/sites-enabled
Я тоже не понимаю, если я попытаюсь добавить файл .htaccess в /var/www/html/php56
, не учитывается, несмотря на AllowOverride All
Еще одна вещь, которую я пытаюсь сделать, - это перенаправить запросы domain.com/sub1 на sub1.domain.com вместо выдачи ошибки 403, но без файла .htaccess, поэтому я минимизирую количество файлов конфигурации.
Примечание. В целях тестирования я намеренно установил Require all denied
вместо того Require ip x.x.x.x
Что я делаю не так?
Если я забыл предоставить необходимую информацию, сообщите мне.
Спасибо за вашу помощь
ОБНОВИТЬ:
Благодаря совету Тома я понял, в чем дело. В моем /etc/apache2/sites-available/sub1.domain.com.conf
У меня было перенаправление с HTTP на HTTPS. Собственно, Let's Encrypt создал /etc/apache2/sites-available/sub1.domain.com-le-ssl.conf
файл (во время настройки сертификата я выбрал принудительное перенаправление HTTPS), и в этом файле были Require all granted
Итак, этот файл перезаписывал мой sub1.domain.com.conf
файл.
Наконец, я изменил настройку каталогов в соответствии с ответом Тома - так стало намного понятнее, спасибо!
Это также решило мой вопрос о перенаправлении, поскольку теперь моя корневая папка для domain.com /var/www/domain.com/www
Я бы не стал делать корневой каталог субдомена вложенной папкой корневого домена. Вместо того:
/var/www/html/
- sub1/
- sub2/
- sub3/
Сам бы сделал так:
/var/www/domain.com/
- www/ (the root)
- sub1/
- sub2/
- sub3/
Это значительно упрощает ограничение доступа к файлам. В вашей текущей настройке, возможно, доступ ограничен VirtualHost
но к тем же данным можно получить доступ, перейдя через корневой домен: http://www.example.com/sub1/data
.