Apache - настройка сотен похожих сайтов без указания каждого - PullRequest
0 голосов
/ 22 июня 2019

Допустим, у меня есть такая структура папок на диске:

/var/www/site1.domain.com
/var/www/site2.domain.com
/var/www/site3.domain.com
/var/www/site4.domain.com
/var/www/site5.anotherdomain.com
/var/www/site6.anotherdomain.com
/var/www/site7.anotherdomain.com
/var/www/site8.anotherdomain.com

Это все похожие простые веб-сайты html / css / js, настроенные точно так же.

Возможно линастроить apache таким образом, чтобы входящие запросы для каждого домена направлялись в соответствующий каталог без настройки сотен <VirtualHost..> узлов?Я думаю, что я мог бы автоматически сгенерировать их, но я надеюсь, что вы поищите что-нибудь интересное в папке типа запроса в конфигурации домена.

Возможно ли это?Даже если это возможно, есть ли какие-либо проблемы с этой безопасностью или иным образом?

Если это невозможно, существует ли другая веб-технология, например, nginx, которая может это сделать?

Ответы [ 3 ]

1 голос
/ 23 июня 2019

Да, есть проблемы безопасности и другие проблемы.Лучше иметь один виртуальный хост на сайт с отдельной регистрацией и отдельными сертификатами SSL и т. Д.

Если это разные сайты, лучше их разделить, потому что:

  • Проще установитьфайл журнала для каждого из них
  • Проще настроить SSL-сертификаты для HTTPS, если они используют разные домены.
  • Помните, что пользователи могут легко изменять заголовок $ host, поэтому, если когда-нибудь вы создадите каталог: /var/www/site1.domain.com-backup или /var/www/secret-logs к ним можно получить доступ.
  • Мониторинг по сайту.
  • Если когда-нибудь вам понадобится специальная конфигурация для какого-либо сайта, установите базовую аутентификацию, измените некоторые параметры и т. Д.может с разными виртуалками.Смешать их было бы сложно и грязно.

Лучше их автоматически сгенерировать.Вы можете использовать множество шаблонных инструментов от простого bash-скрипта, который принимает некоторые параметры envvars, до более сложных инструментов, таких как SaltStack / Ansible.

Вот простой bash-скрипт для этого, он должен быть адаптирован к вашим потребностям:

#!/bin/bash                     

cat << EOF > /etc/nginx/sites-available/$SERVER_NAME.conf
server {                        
    listen 80;                  
    server_name $SERVER_NAME $ADDITIONAL_SERVER_NAMES;

    access_log /var/log/nginx/$SERVER_NAME-access.log;
    error_log /var/log/nginx/$SEVER_NAME-error.log;

    location / {                
        root /var/www/$SERVER_NAME;
    }                           
}                               
EOF                             

# Enable config on nginx        
ln -s /etc/nginx/sites-available/$SERVER_NAME.conf /etc/nginx/sites-enabled

# Test configration and apply if no errors                                                                                                                                                                                                                    
nginx -t && service nginx reload

Чтобы выполнить скрипт, назовите его nginx-site-generator, дайте разрешения на выполнение и:

 SERVER_NAME=site1.com ADDITIONAL_SERVER_NAMES=www.site1.com ./nginx-site-generator
1 голос
/ 22 июня 2019

С nginx это очень просто:

location / {
    root /var/www/$host;
}

Плюс nginx невероятно быстр.Если вы хотите придерживаться Apache, вы должны прочитать это: https://httpd.apache.org/docs/2.4/vhosts/mass.html

0 голосов
/ 23 июня 2019

Оказывается, для этого есть модуль apache:

sudo a2enmod vhost_alias

Подробнее о модуле можно прочитать здесь:

http://httpd.apache.org/docs/2.4/mod/mod_vhost_alias.html

Вот конфигэто сработало для меня:

#Define SNAME 999

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName domainname.com
        ServerAlias *.domainname.com

    VirtualDocumentRoot /var/www/domainname.com/%0

    #RewriteEngine on

        #This sets the variable to env:
        #RewriteRule .* - [E=SNAME:%{SERVER_NAME}]

        ErrorLog ${APACHE_LOG_DIR}/domainname.com.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug

        CustomLog ${APACHE_LOG_DIR}/domainname.com.access.log combined


</VirtualHost>
...