четверг, 19 ноября 2009 г.

Настройка виртуальных хостов на одном айпи с использованием связки apache и nginx

У меня настроена связка Апача и Nginx на системе с одним выделенным айпи адресом, где Апач обрабатывает динамику, а Nginx выдает статику, то есть Нгиникс проксирует данные для Апача. Подробнее о настройке веб сервера вы можете прочитать в соответствующей статье в этом блоге. Требовалось завести в системе пачку хостов с различием по доменным именам, например, host.ru, host2.ru и так далее.

Порывшись в интернете не нашел адекватно простых способов сделать это. Оказалось все еще проще простого. Для выполнения задачи необходимо завести виртуальные хосты как в апаче, так и в нгниксе. Каждый хост имеет относящуюся к нему директорию на жестком диске, для определения принадлежности, хосты различаются по имени (а не по айпи).

Настройка виртуальных хостов в Nginx.

server {
listen 85.249.???.???:80;
server_name host.spb.ru www.host.spb.ru;
location / {
proxy_pass http://85.249.???.???:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(html|jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {
root /usr/local/www/apache22/data/host.spb.ru;
}

Как видно, у нас прописан адрес и порт, на котором будет слушать нгиникс, имя хоста и имя хоста с www, это необходимо для корректного индексирования сайта поисковиками (по крайней мере, это верно для моей системы). Далее идут настройки для связки с Апачем. В строчке location указываются расширения файлов, которые будет выдавать Nginx, строка root указывает путь до директории, где хронятся файлы, относящиеся к данному хосту.

Настройка виртуальных хостов в Апаче.


DocumentRoot "/usr/local/www/apache22/data/host.spb.ru/"
ServerName host.spb.ru
ServerAlias www.host.spb.ru


Прописываем сетевой адрес, на котором будет слушать Апач, директорию на винчестере, где лежат файлы хоста, имя сервера и алиас к нему (имя сервера с www).

И не забудьте, до в днс записи для доменного имени должна быть строчка вида:

www.host.spb.ru CNAME host.spb.ru

Чтобы запросы с www отправлялись на этот же сервер.

Если вы нигде не ошиблись, то все должно работать! :-) Удачи!