Dynamically configured mass virtual hosting

Лапочкин Константин kostenl at gmail.com
Wed Apr 9 11:37:07 UTC 2014


Добрый день.

Для части своих проектов используем связку nginx + apache с использованием в
apache mod_vhost_alias.  Это удобно для доступа к серверам с именем типа
example.*.domain.ru где под звёздочкой подставляется имя проекта . Тогда
добавление нового проекта не требует правки конфига веб-сервисов. При этом
конфигурация выглядит примерно следующим образом:
На nginx проксирование с кэшированием:

server {
        server_name ~^example\.[^.]*.domain.com;
        location ~*
\.(bmp|ico|jpg|png|jpeg|gif|css|js|mp3|flv|swf|exe|wmv|zip|pdf|doc|rar|ppt|x
ls|MP3|JPG|avi|woff|bin|img)$ {
                proxy_cache     zone;
                proxy_pass http://nodes_ example;
                include include/proxy.conf;
                expires      1d;
        }
        location / {
                proxy_pass  http://nodes_ example;
                include include/proxy.conf;
        }
}

В apache2 включен модуль vhost_alias и  конфиг выглядит следующим образом:
<VirtualHost *:80>
  ServerName example.domain.ru
  ServerAlias example.*.domain.ru
  
  VirtualDocumentRoot /var/www/projects/%2/data
  <Directory /var/www/projects/%2/data>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
</VirtualHost>
Где в переменную %2 подставляется соответсувующая часть fqdn сервера. Более
подробно  http://httpd.apache.org/docs/2.2/ru/vhosts/mass.html
Таким образом, добавив в директорию /var/www/projects/ папку с новым
проектом получаем рабочий сайт.

А теперь проблема: часть проектов переводим на связку nginx + php-fpm. При
этом задание рутовой директории ложится на nginx. Как так же красиво и легко
сделать задание root в конфиге nginx?


Подробная информация о списке рассылки nginx-ru