Надо собрать все вместе, а то на память надежды нет. Собрано в кучу из нескольких источников.
Дано: CentOS 5 (64bit), Plesk 10.3, Apache 2.
Нужный результат: Nginx отсылает статику, Apache все остальное (php в основном).
1. Установка nginx на CentOS 5 (без фанатизма).
# rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
# yum install nginx
# chkconfig –level 35 nginx on
Меняем порт Apache по инструкции Parallels (Plesk 10.2, на 10.3 сработало)
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("http_port", 8080)'
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("https_port", 8080)'
Здесь 8080 — новый порт. Аналогичный указываем в /etc/httpd/conf/httpd.conf (Listen 80 → Listen 8080).
Ахтунг! В документации Plesk 10 есть тема про правку шаблона /usr/local/psa/admin/conf/templates/default/domain/domainVirtualHost.php и замену $VAR->server->webserver->httpPort на нужный порт — делать это не надо и очень вредно, Apache ругается: VirtualHost x.x.x.x:8080 overlaps with VirtualHost x.x.x.x:8080, the first has precedence, perhaps you need a NameVirtualHost directive).
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("http_port", 8080)'
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` -D psa -e'replace into misc (param, val) values ("https_port", 8080)'
# /usr/local/psa/admin/bin/httpdmng --reconfigure-all
У более ранних версий Plesk (до 9.5) была отдельная команда на этот случай (websrvmng –set-http-port –port=8080).
Дальше берем в этом малость устаревшем руководстве нужные файлы (тыц) и распаковываем куда-нибудь в рабочую папку. Копируем nginx.conf → /etc/nginx/nginx.conf и proxy.conf → /etc/nginx/proxy.conf — они подхачены для использования с Plesk.
UPDATE: По ссылке выше файлы не актуальны для Plesk 10 — там жестко зашито расположение корневых папок (document root) для доменов и поддоменов. В новом Плеске их можно произвольно переносить или переименовывать через панель управления, а сами данные хранятся в базе. Здесь исправленная версия generate_nginx_conf.sh для Plesk 10 и сопутствующие шаблоны, в которых тоже есть изменения. Не проверял и пока не менял ничего в настройке списков рассылки, webmail и sitebuilder.
Запускаем sh generate_nginx_conf.sh — скрипт выбирает из базы все домены и поддомены и создает в каждой папке /var/www/vhosts/*/conf/nginx.conf. Если порт для Апача выбран не 8080, то предварительно нужно поправить шаблоны template_dom.conf, template_subdom.conf (там порт жестко зашит).
Порт, на котором работает Apache (8080 или другой) нужно открыть в iptables. Делать это пришлось через панель управления, команда (iptables -A INPUT -p tcp --dport 8080 -j ACCEPT) не лечит.
Готово, вроде, перезапускаем httpd и nginx.
Проблемы по ходу дела — не запускался nginx, пришлось увеличивать server_names_hash_max_size 1024 (было 512) и server_names_hash_bucket_size 128 (было 64). Это /etc/nginx/nginx.conf.
TODO: После добавления домена в Plesk нужно создать конфиг для nginx. Скрипт generate_nginx_conf.sh каждый раз перезаписывает настройки виртуального хоста (/var/www/vhosts/*/nginx.conf) из шаблонов заново (нужно оставлять измененные).
UPDATE: Повесил скрипт создания/обновления nginx.conf на события в Plesk: Website created/updated/deleted (аналогично для Subdomain и Domain alias). Теперь конфигурация для nginx создается/обновляется автоматически.
Осталось одно желание — иметь возможность настраивать конфигурацию для каждого сайта отдельно. Сейчас все конфиги переписываются из шаблона и похожи как однояйцевые близнецы. Можно встроить проверку существования файла и не трогать его (только создавать новые), но это плохой выход, поскольку все поддомены/синонимы настраиваются в одном файле — после добавления алиаса или поддомена надо будет руками править nginx.conf.
Делать подключение еще одного файла на каждый домен/поддомен тоже бессмысленно — nginx не принимает переопределение, то есть 2 одинаковых директивы (location /, например) в «главном» и «подключаемом» конфигах сделать не получится, а без этого затея теряет смысл. Надо какой-то ум применить, пока не придумал ничего.
Реверансы
http://wiki.mediatemple.net/w/%28dv%29:Configure_nginx_as_reverse_proxy_web_server
http://www.grafxsoftware.com/faq.php/HOW-TO-configure-PLESK-with-NGinx-proxy-reverse/1/1/
http://kb.parallels.com/11232
http://www.x83.net/plesk-10-nginx-reverse-proxy-configuration-in-front-of-apache/
5 ответов к “Памятка: Plesk, Nginx, Apache”
Замечательный мануал, все работает с Plesk 10.4
единственное, при запуске апача выдает: [warn] NameVirtualHost x.x.x.x:8080 has no VirtualHosts
Большое Вам человеческое спасибо 😉
Спасибо за апдейты 🙂 и за всю заметку.
Привет! Вроде бы сделал всё правильно, но сайт не открывается — 502 bad gateway
Порт проверил, открыт.
В чём может быть ошибка? Куда копать?
server {
listen 80;
server_name something.ru;
error_log /var/log/nginx/something.ru.log warn;
location / {
proxy_pass http://something.ru:8180$request_uri;
include /etc/nginx/proxy.conf;
}
Это кусок конфига /var/www/vhosts/something.ru/conf/nginx.conf
1. Проверьте есть ли вообще такой файл. У меня их столько, сколько сайтов размещено. Вставляется ли он из /etc/nginx/nginx.conf (строка include /var/www/vhosts/*/conf/nginx.conf;), правильно ли указан путь.
2. Попробуйте зайти на something.ru:8081 (если у вас проброс на реальный адрес и он открыт извне). Адрес и порт, понятно, какие нужно указывайте. Если Апач отвечает, возвращаемся к п.1 — проблема в nginx.
Сложно что-нибудь умное посоветовать заочно, извините.
Файлы nginx.conf на месте. Все строчки там есть.
Указывая порт сайт не открывается.
>если у вас проброс на реальный адрес и он открыт извне
Видимо нет. Для этого нужно добавить mod_rpaf?
Установил, ничего не поменялось.
Если остановить nginx сайт не открывается.
Может выложить какие-то логи?