Несколько виртуальных хостов - Как создать отдельные каталоги?

Я купил второй домен и пытаюсь создать второй и отдельный сайт на том же сервере 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>

Как мне настроить его так, чтобы оба сайта были доступны в их собственном домене, в то время как ни один из сайтов не мог быть доступен из подкаталога другого?

РЕДАКТИРОВАТЬ:

Мой вопрос действительно о взаимосвязи между этими тремя вещами:

  1. apache2.conf "Directory"
  2. "DocumentRoot" сайта 1
  3. "DocumentRoot" сайта 2

И как я должен настроить свою структуру каталогов.

В настоящее время они настроены следующим образом:

  1. / var / www / public
  2. / var / www / public
  3. / var / www / site2

Прямо сейчас, если я захожу на сайт 2, он говорит, что 403 запрещено, потому что DocumentRoot сайта 2 находится за пределами папки Directory основного файла конфигурации. И я не хочу устанавливать DocumentRoot сайта 2 на / var / www / public / site2, потому что тогда он будет внутри каталога сайта 1.

Так нужно ли использовать эту конфигурацию?:

  1. / var / www / public
  2. / var / www / public / site1
  3. / var / www / public / site2

И в чем разница между этим и чем-то вроде этого:

  1. / var / www
  2. / var / www / site1
  3. / var / www / site2

Если в / var / www есть файлы только для сервера, может ли сайт 1 или сайт 2 когда-либо получить к ним небезопасный доступ (клиент просматривает их)?

У меня вопрос о том, как именно настроить структуру каталогов, и я не понимаю разницы между apache2.conf "Directory" и "DocumentRoot" conf с поддержкой сайтов.

0
задан 23 April 2020 в 23:26
1 ответ

Вот небольшой обзор конфигурации 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.


Важно помнить следующее:

  1. Не требуется, чтобы разделы были связаны с разделами и . не имеет абсолютно никакого отношения к DocumentRoot.
  2. 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, чтобы оно соответствовало имени сайта. Гораздо проще управлять, если вы сохраните все имена одинаковыми.

0
ответ дан 24 April 2020 в 00:33

Теги

Похожие вопросы