Меня часто спрашивают, как настроить связку Nginx+Apache на хостинге с несколькими виртуальными доменами, причем так, чтобы nginx, как обратный прокси (reverse proxy), работал не для всех доменов?
Ответ: это невозможно.
Основная идея обратного проксирования в том, что Nginx вешается на 80й порт и принимает на себя все http запросы к серверу, перенаправляя их на бэкенды, которые могут находиться где угодно, хоть на той же машине (но на другом порту), хоть где-нибудь еще (читай: на других серверах)
Поскольку Nginx и Apache не могут висеть на одном и том же восьмидесятом порту, ответ: “невозможно”.
Но что же делать, если у нас несколько виртуальных серверов на одном сервере, а обратное проксирование настроить хочется?
Все просто, к сожалению в официальной документации этот вопрос не очень прозрачно описан, поэтому рассказываю:
Для всего количества виртуальных серверов, описанных в конфиге Apache, мы делаем аналогичные записи в конфиге nginx.
Выглядит это так:
В апачевском http.conf
Port 8080
DocumentRoot /data/www/host1/html
ServerName host1
…
DocumentRoot /data/www/host2/html
ServerName host2
…
А в nginx.conf пишем
##host1
server {
listen 80;
server_name host1;
...
location ~* ^.+\.(js|gif|jpg)$ {
root /data/www/host1/html;
}
}
##host2
server {
listen 80;
server_name host2;
...
location ~* ^.+\.(js|gif|jpg)$ {
root /data/www/host2/html;
}
}
Вот собственно и все. При этом, вы можете обращаться и напрямую к виртуальным хостам апача (если порт 8080 не закрыт фаирволом) например так: http://host1:8080/
Продвинутые админы, могут написать скрипт малой автоматизации
для добавления, удаления виртуальных хостов. Это задание на дом.


Один комментарий
Будь всегда в теме, подпишись на RSS ленту комментов.
Что ж, будем надеятся это не последний ваш пост.