Я купил второй домен и пытаюсь создать второй и отдельный сайт на том же сервере ubuntu.
Как мне настроить папки и файлы конфигурации, чтобы разрешить моим сайтам иметь отдельные исходные файлы, которые не могут получить доступ друг к другу?
Мой файл конфигурации apache2:
/etc/apache2/apache2.conf:
Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups On
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel notice
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /var/www/public>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
Файл конфигурации моих портов:
/etc/apache2/ports.conf:
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Мой conf для сайта 1 (в настоящее время работает с SSL):
/etc/apache2/sites-enabled/site1.com.conf:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName site1.com
DocumentRoot /var/www/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/site1.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/site1.com/privkey.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>
Моя conf для сайта 2 (сейчас я хочу настроить его как HTTP, я настрою SSL после подтверждения, что он работает):
/etc/apache2/sites-enabled/site2.com.conf:
<VirtualHost *:80>
ServerName site2.com
ServerAlias www.site2.com
DocumentRoot /var/www/site2
</VirtualHost>
Я положил конфигурационный файл второго сайта в / etc / apache2 / sites-available и запустил a2ensite site2.com.conf, а затем запустил systemctl reload apache2.
Как мне настроить его так, чтобы каждый сайт имел доступ только к своему собственному каталогу ?
Если я удалю эти строки из apache2.conf:
<Directory /var/www/public>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Тогда загрузка site1.com показывает ошибку 403 Запрещено, хотя site1.com.conf имеет эту строку:
DocumentRoot /var/www/public
Я подумал о том, чтобы поместить тег каталога в site1 .com.conf, но он уже есть:
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
Как мне настроить его так, чтобы оба сайта были доступны в их собственном домене, в то время как ни один из сайтов не мог быть доступен из подкаталога другого?
РЕДАКТИРОВАТЬ:
Мой вопрос действительно о взаимосвязи между этими тремя вещами:
И как я должен настроить свою структуру каталогов.
В настоящее время они настроены следующим образом:
Прямо сейчас, если я захожу на сайт 2, он говорит, что 403 запрещено, потому что DocumentRoot сайта 2 находится за пределами папки Directory основного файла конфигурации. И я не хочу устанавливать DocumentRoot сайта 2 на / var / www / public / site2, потому что тогда он будет внутри каталога сайта 1.
Так нужно ли использовать эту конфигурацию?:
И в чем разница между этим и чем-то вроде этого:
Если в / var / www есть файлы только для сервера, может ли сайт 1 или сайт 2 когда-либо получить к ним небезопасный доступ (клиент просматривает их)?
У меня вопрос о том, как именно настроить структуру каталогов, и я не понимаю разницы между apache2.conf "Directory" и "DocumentRoot" conf с поддержкой сайтов.
Вот небольшой обзор конфигурации Apache для начала:
— это тег в стиле XML, с которого начинается раздел конфигурации. Он заканчивается на . Между этими двумя тегами все относится к каталогу, указанному в открывающем теге. Apache называет эти «разделы».
В вашем примере у вас есть несколько разделов
:
— этот раздел охватывает абсолютно все в вашей файловой системе , если только он не переопределен более конкретным тег . Самый важный пункт здесь — Require all denied
. Это предотвращает доступ Apache ко всему на вашем жестком диске.
— этот раздел описывает каталог, в котором находится ваш сайт. Важная строка здесь — Требовать все предоставленные
, которая позволяет Apache получить доступ к файлам в этом каталоге.
DocumentRoot /some/path/to/somewhere
DocumentRoot
сообщает Apache, где находятся файлы веб-сайта. Обычно он находится в разделе
, так как именно здесь вы хотите определить настройки своего веб-сайта.
В вашем примере у вас есть несколько директив DocumentRoot
:
DocumentRoot /var/www/public
— это внутри
для вашего site1.com
. Это означает, что когда пользователь переходит на site1.com
, Apache должен искать контент в /var/www/public
.
DocumentRoot /var/www/site2
— находится внутри
для вашего site2.com
. Это означает, что когда пользователь переходит на site2.com
, Apache должен искать контент в /var/www/site2
.
Важно помнить следующее:
были связаны с разделами
и .
не имеет абсолютно никакого отношения к DocumentRoot
. DocumentRoot
— это верхний уровень веб-сайта. Пользователь, зашедший на site1.com
, сможет видеть файлы только в /var/www/public
, а пользователь, зашедший на site2.com
, видеть только файлы в /var/www/site2
(если только у вас нет каких-либо проблем с безопасностью в программном обеспечении, которое вы размещаете, но это другой разговор). Ни один из сайтов не сможет увидеть файлы в /var/www
, поскольку этот путь находится «выше» DocumentRoot
— вот что означает «Корень». Однако, несмотря на отсутствие связи между DocumentRoot
и Каталогом
, факт в том, что вам все равно нужен раздел <Каталог>
для каждого из ваших места. (Вы также можете использовать один для всех сайтов, но пока мы сделаем его простым и более безопасным.) Причиной этого является упомянутый выше раздел
, который блокирует доступ ко всем по умолчанию и заставляет вас явно предоставлять доступ к другим каталогам.
Теперь, когда мы объяснили взаимосвязь между этими двумя элементами конфигурации, давайте посмотрим, что вам нужно для настройки:
У вас есть два сайта: site1.com
и site2.com.
.В настоящее время они находятся в /var/www/public
и /var/www/site2
соответственно, как установлено директивой DocumentRoot
в каждом < Виртуальный хост>
.
Поэтому, чтобы разрешить доступ к этим каталогам, у вас также должно быть два раздела <Каталог>
, по одному для каждого сайта. Для ваших целей оба их содержимого могут быть идентичны текущему разделу
, который у вас уже есть:
<Directory /var/www/public>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/site2>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Отдельно от них вам нужен DocumentRoot
директивы в том виде, в каком вы их изначально написали.
Лично яЯ бы также переименовал /var/www/public
в /var/www/site1
, чтобы оно соответствовало имени сайта. Гораздо проще управлять, если вы сохраните все имена одинаковыми.