Это веб-сервер, предназначенный в основном для отдачи статики (для того чтобы разгрузить бекенд) и использования в качестве фронтендов. Apache при этом можно использовать в качестве бэкенда для генерации динамического контента.
Так же Nginx можно использовать в режиме FastCGI, при этом Apache вам не понадобится. Однако при этом режиме у PHP наблюдается ряд проблем, поэтому на помощь приходит php-fpm!
Однако мы сегодня поговорим о совместной установке с Apache, а не в режиме FastCGI. Более того, по задаче у нас эти веб-сервера будут находится на одном сервере, поэтому выделим для Nginx - 80, а для Apache - 88 порт!
Установка Apache и Nginx
Ставим Apache:
cd /usr/ports/www/apache2
make config
make install clean
Ставим Nginx:
cd /usr/ports/www/nginx
make config
make install clean
# пользователь и группа от которого запускается процесс
user www www;
# 3 рабочих процесса
worker_processes 3;
# Лог для ошибок
error_log logs/error.log;
events {
# максимум рабочих соединений
worker_connections 1024;
# Метод обработки соединений
# kqueue — эффективный метод, используемый во FreeBSD
# Подробнее http://sysoev.ru/nginx/docs/events.html
use kqueue;
}
http {
# Подключаем таблицу mime
include mime.types;
# mime-тип по умолчанию
default_type application/octet-stream;
# Формат лог файла
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# Лог доступа всего веб-сервера
#access_log logs/access.log main;
# Директива задаёт таймаут при чтении заголовка запроса клиента
client_header_timeout 3m;
# Директива задаёт таймаут при чтении тела запроса клиента
client_body_timeout 3m;
# Директива задаёт таймаут при передаче ответа клиенту
send_timeout 3m;
# Директива задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 2m;
# Директива разрешает или запрещает использовать sendfile()
sendfile on;
# Директива разрешает или запрещает использовать опции TCP_NOPUSH во FreeBSD
# Подробнее http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#keepalive_timeout
#tcp_nopush on;
# Директива задаёт размер буфера для чтения заголовка запроса клиента
#client_header_buffer_size 1k;
# Директива задаёт максимальное число и размер буферов для чтения большого заголовка запроса клиента
#large_client_header_buffers 4 4k;
# Модуль позволяет описывать группы серверов, которые могут использоваться
# в директивах proxy_pass и fastcgi_pass.
upstream backend {
# Директива задаёт имя и параметры сервера. Обратите внимание, мы будем
# использовать имя "backend" в директиве proxy_pass
server 127.0.0.1:88;
}
server {
# Слушать 80 порт
listen 80;
# Использовать следующие хосты
server_name pyha.ru www.pyha.ru;
# Кодировка
#charset koi8-r;
# Лог доступа для конкретного виртуального хоста
#access_log logs/host.access.log main;
# Максимальный размер тела запроса клиента
client_max_body_size 101M;
# Разруливаем статику и динамку, смотрите описание ниже в этой статье!
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/pyha/pyha.ru;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://backend/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
# Адрес страницы 404-ой ошибки, далее все ошибки по аналогии
#error_page 404 /404.html;
# Аналогично 404, только при этом назначается псевдоним 50x.html для всех
# 50x-тых ошибок и далее перенаправляется все на "root"
error_page 500 502 503 504 /50x.html;
location = /50x.html {
# корневая директория
root /usr/local/www/nginx-dist;
}
}
}
После конфигурации необходимо перезагрузить Nginx
/usr/local/etc/rc.d/nginx restart
Nginx: Отдаем статику
С помощью этих правил разруливаем запросы на отдачу статику и динамического контента
# Следующие расширения файлов (jpg, jpeg, gif, png, ico, css, bmp, swf и js) отдаются напрямую, без участия Apache.
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/pyha/pyha.ru;
}
# htaccess и htpasswd не отдаем
location ~ /\.ht {
deny all;
}
# Все остальное разруливает бекенд (Apache)
location / {
# Адрес бекенда. Параметры бекенда перечислили в директиве "upstream" (см. выше в статье)
proxy_pass http://backend/;
# Заголовок Host
proxy_set_header Host $host;
# Заголовок X-Real-IP
proxy_set_header X-Real-IP $remote_addr;
# Заголовок X-Forwarded-For
proxy_set_header X-Forwarded-For $remote_addr;
# Директива задаёт таймаут для соединения с проксированным сервером, сек
proxy_connect_timeout 120;
# Директива задаёт таймаут при передаче запроса проксированному серверу, сек
proxy_send_timeout 120;
# Директива задаёт таймаут при чтении ответа проксированного сервера, сек
proxy_read_timeout 180;
}
Установка и настройка RPAF или даешь верный REMOTE_ADDR!
Так как у нас появился в цепи дополнительный элемент в виде фронтенд-сервера, то теперь в REMOTE_ADDR у нас не пользовательский IP, а IP-адрес фронтенд-сервера (на котором расположен Nginx). Поэтому на помощь приходит RPAF, он берет тело заголовка X-Forwarded-For, присланного от фронтенда и формирует на бекенде из него REMOTE_ADDR.
Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP!
Устанавливаем модуль RPAF
cd /usr/ports/www/mod_rpaf2
make install clean
mod_rpaf2 - для apache2, а для первого индейца надо mod_rpaf
Настраиваем RPAF, редактируем httpd.conf, добавляем в конец файла:
# Включаем модуль
RPAFenable On
# Доводит до ума X-Host
RPAFsethostname On
# Адрес фронтенда (nginx)
RPAFproxy_ips 82.146.61.55 127.0.0.1
# Имя отправляемого заголовка
RPAFheader X-Forwarded-For
После конфигурации необходимо перезагрузить Apache
apachectl restart
Ну вот вроде и все, смотрите ниже дополнительную литературу и задавайте вопросы в камменты!
Работает связка nginx+php-fpm.
Подскажите как сделать чтоб ошибки в php-скриптах выводились в браузер вместо сообщения "The page you are looking for is temporarily unavailable".
Никак не разберусь.
Автор, а где указанная в топике статья "Nginx. Использование PHP в режиме FastCGI с помощью php-fpm" http://adw0rd.ru/2009/nginx-and-php-fpm/ ? У меня вылезает "Ничего не найдено... Попробуйте воспользоваться поиском по сайту."
Уважаемый. Написано хорошо. Можно уточнить кто у вас обрабатывает пхп. Апач или нгинкс. У меня был настроен нгинкс без апача с пхп на fastcgi. Сейчас когда я подключаю апач, у меня не пашет пхп.
Ivet, в статье описывается способ работы nginx+apache+mod_php, таким образом пхп работает из под апача. А вы пхп пересобирали с включенным модулем mod_php?
Нет, в том то и дело. Мне бы хотелось отстатся на fastcgi. Буду разбиратся как заставить нгикс не отправлять обрабатывать пхп на Апач. Огромное спасибо за быстрый ответ.
У меня был настроен нгинкс без апача с пхп на fastcgi
теперь вы говорите
Буду разбиратся как заставить нгикс не отправлять обрабатывать пхп на Апач.
из этого делаю выводы, что у вас была связка nginx+php, и сейчас вы хотите nginx+php
Вопрос: Если не видно разницы, то что вы вообще хотите сделать? Оставайтесь на старой связке, или у вас сервак сгорел, а нету бекапов и вы не помните как настроить? :)
Все хорошо помню связка то осталась и меня она устраивает. Но когда я подключаю апач как бекенд-сервер. Нгинкс перестает понимать пхп, но у меня подозрение что он отправляет его обрабатывать Апачу.
Когда я ставил ФастЦГИ у меня отвалился пхп5, непомню по какой причине, но Апач совершенно отказался обрабатывать пхп. Вообщем сейчас я двигаюсь в направлении заставить апач обрабатывать пхп, не с помощью mod_php5, а с помощью mod_fcgid. Пока глухо но я рядом.
Я как-то вроде читал в обсуждении, что хотели сделать патч, который позволяет использовать файлы типа htaccess, естественно с другим синтаксимом, но с той же идеей. Тут я видел http://sysoev.ru/nginx/docs/maillists.html
Все то что я писал я поднимал на Дебиане. Промучался еще пару дней и плюнул, поднял на мод_пхп5. Но по долгу службы пришлось всю эту связку поднять под FreeBSD. Вообщем вышла у меня связка Nginx + (FreeBSD + mod_fcgid).
Все достаточно просто:
1)устанавливаем:
#pkg_add -r mod_fcgid
2)далее в конфиге Апача выключаем модуль пхп5.
3) Добавляем поддержку модуля fcgid
(
Собственно для сайтов на DLE связка вообще бессмысленна, т.к. там большинство статики отдаётся через пхп и, соответственно, нгикс больше тормозит систему чем помогает ей. Конечно можно резать нгиксом коннекты, но намного лучше делать это на уровне фаервола.
Да вроде там и надо было ставить "*". Либо попробуйте его закомментить вообще.
Иначе вам надо просто полезть в сорцы да посмотерть, думаю проблем нету, если вам действительно это необходимо...
Хотелось бы узнать у знающих людей, какую нагрузку (хостов в сутки) выдержит машинка со следующими параметрами: Celeron 600 MHz, 384 Mb памяти, на ней установлена ось FreeBSD 7.2, php-fpm, nginx. Предполагается, что будет крутится только один сайт.
Думаю 5-10 тысяч, но зависит от самого сайта, поэтому однозначно не могу сказать
Этот блог + http://kinburg.ru/ + http://blgo.ru/ и еще несколько сайтов держится на таком же железе (500 MHz, 256 Mb ОЗУ) + nginx/php-fpm
Здравствуйте, уважаемые! Интересует вот такой простой вопрос:
# Разруливаем статику и динамку, смотрите описание ниже в этой статье!
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/pyha/pyha.ru;
}
Если у меня к примеру небольшой хостинг, и, соответственно, юзеров в дирректории /home/ и доменов много, то как будет выглядеть директива
Если много доменов, то наверное у вас должно быть много server, в котором вы для каждого укажете где хранятся картинки. Это по правильному, но вот ответ на ваш конкретный вопрос:
Ого. Спасибо. Значит, простого и универсального решения нет - я правильно понимаю? И модификацией пары строк это решение не спроецировать на nginx+apache+directadmin?
Значит, простого и универсального решения нет — я правильно понимаю?
Ну простое это создавать для кажого server. Или я вас не понял?
Если вы раньше делали это для Apache, то покажите как, может тогда я пойму
Тут-то вот оно как: все стандартно: на debian5 установлен DirectAdmin в стандартной конфигурации. Хотелось бы в качестве фронта использовать nginx, потому как я везде читал, что этот кеширующий прокси-сервер вместо apache будет отдавать статический контент - изображения и html и за счет этого увеличится общая картина быстродействия.
Сейчас имеется такой конфиг, nginx работает на 8888 порту. При этом сайты не открываются, выдается "Apache is functioning normally".
Поправочка: "Apache is functioning normally" - это когда открывать пытаешься через порт 8888, например http://orenspace.ru:8888
Если открываешь просто http://orenspace.ru , то полный порядок.
nginx -t говорит все хорошо :)
2010/12/02 17:28:47 [info] 29928#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2010/12/02 17:28:47 [info] 29928#0: the configuration file /etc/nginx/nginx.conf was tested successfully
В php-fpm используется режим static и 10 процессов, в остальном ничего особенного. Nginx:
сделал такие же настройки у себя. потом запустил siege потестить сервачок. в настройках поставил эмуляцию 5 юзеров в течении 3-х минут. на серваке через TOP смотрел загрузку проца, был загружен на все 100%. После теста siege выдал среднее время отклика 1,3 секунды, и из почти 1000 запросов 13 вылетели по таймауту. Такие результаты нормальны или у меня что то все таки не так настроено?
И еще один ламерский вопрос: если пересобрать ядро именно под Celeron, будет ли выигрыш в производительности? И придется ли пересобирать по новой уже установленный софт (nginx, php, mysql и т.д.)?
вчера попробовал потестить апач через siege... что интересно у апача из 2000 запросов вылетело всего три соединения по таймауту, в то время как у nginx при тех же параметрах тестирования на 1000 запросов порядка 10-15 соединений вылетает по тайм ауту, хотя среднее время отклика у него меньше...
Люди помогите плиииииз.Не пускает на один сайт,пишет вот такое:Apache is functioning normally..Все остальные сайты работают отлично.Буду очень благодарен.
Спасибо за статью! На первый взгляд все работает. А какие есть средства для проверки что работает именно связка? И какие есть средства для отслеживания пути запроса? Чем вообще тестируете корректность работы веб сервера?
Adik, связку тестирую руками. Как и многое другое в жизни.
Если вы о нагрузочном тестировании, то есть ab, pylot, siege, jmeter и т.д.
Если вы о мониторинге, то nagios и munin использую...
Есть VDS сервер на CentOS 5.5 x32. Панель управления ISPManager Lite Настроена связка nginx+apache2 Работает нормально, но вот последнее время появилась проблема растет количество процессов apache которые жрут память сервера. Не подскажете кто сталкивался с проблемой и ее возможное решение.
На Ubuntu server стоит nginx+apache2+php+mysql;
apache2 прикручен на прослушку 127.0.0.1:81
Доступ к нгинксу осуществляется через домен trololo.com (к примеру :)
Теперь непосредственно сам эпик фейл - при заходе (ипользовании) phpmyadmin или phpbb3 в некоторых случаях (например при автоматической переадресации страницы средствами пхп) заменяется адрес на 127.0.0.1
Тоесть,к примеру, после ввода пароля в пхпмайадмине,вместо того, чтоб отправить меня по адресу trololo.com/phpmyadmin/index.php меня пытается переадресовать по 127.0.0.1:81/phpmyadmin/index.php , что соответственно не очень хорошо.
RPAF как я понял, отвечает сохранение и передачу ip клиента - индейцу. ОТсюда философский вопрос- что делать и как с этим бороться?
ЗЫ:Валенками просьба не закидывать если где ступил.
судя по вашему куску конфига nginx для обработки подключений по 443 порту любое обращение к серверу как https://pyha.ru не проксируется nginx к Апачу так, как это сделано у вас для обращений http://pyha.ru, а значит обрабатывается самим nginx. Это означает, что для подключений по https идея статьи использовать nginx как фронт-энд, а апач как бэк-энд работать не будет. Я правильно понимаю смысл или ошибаюсь?
Я смотрел подобные статьи по связке "frontend nginx + backend apache", но там говорят, что запросы на 443 порт nginx тоже должен проксировать апачу так как серверу нужно обрабатывать в том числе и php-код.
WTF0_o, думаю движки используют $_SERVER в своих гнусных целях, надо сделать страничку i.php (типа того) и там:
<?php var_dump($_SERVER);
На основе этой информации можно понять какие директивы используются, после чего их в Nginx предварительно подделывать.
ps. RPAF помогает правильно передавать клиентский IP, а вам надо сервера
У меня после подключения nginx на сайтах почему-то перестали загружаться скрипты, картинки и css.
Может в конфиге энджинкса неправильно задал пути?
Вот конфиг:
user www-data;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
#use kqueue;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
# Директива задаёт таймаут при чтении заголовка запроса клиента
client_header_timeout 3m;
# Директива задаёт таймаут при чтении тела запроса клиента
client_body_timeout 3m;
# Директива задаёт таймаут при передаче ответа клиенту
send_timeout 3m;
# Директива задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
keepalive_timeout 2m;
sendfile on;
upstream backend {
# Директива задаёт имя и параметры сервера. Обратите внимание, мы будем
# использовать имя "backend" в директиве proxy_pass
server 85.25.146.80:81;
}
server {
# Слушать 80 порт
listen 80;
# Использовать следующие хосты
server_name golf941.streamrootserver.com;
# Кодировка
#charset UTF-8;
# Лог доступа для конкретного виртуального хоста
#access_log logs/host.access.log main;
# Максимальный размер тела запроса клиента
client_max_body_size 101M;
# Разруливаем статику и динамку, смотрите описание ниже в этой статье!
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/roma;
}
location ~ /\.ht {
deny all;
}
location / {
proxy_pass http://backend/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
# Адрес страницы 404-ой ошибки, далее все ошибки по аналогии
error_page 404 /var/www/kayros/data/www/404.html;
# Аналогично 404, только при этом назначается псевдоним 50x.html для всех
# 50x-тых ошибок и далее перенаправляется все на "root"
error_page 500 502 503 504 /var/www/kayros/data/www/50x.html;
location = /50x.html {
# корневая директория
root /usr/local/www/nginx-dist;
}
}
#tcp_nodelay on;
#gzip on;
#gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#include /etc/nginx/conf.d/*.conf;
#include /etc/nginx/sites-enabled/*;
}
в root пишется путь к корневой директории сайта
В таком случае, что делать если сайтов несколько, в location через пробел перечислять адреса папок с каждым сайтом ?
Извиняюсь если вопрос глупый, просто я в настройках серверов мало что понимаю.
Поднимаю такую старую но нужную тему. Сделал по инструкции, все отлично. 5 поддоменов на одном сервере, на первый взгляд все хорошо. На одном из поддоменов крутится phpmyadmin. В нем пробую импортировать мускульный дамп, после некоторой задумки получаю всплывающее окно с ошибкой. Лезу в логи и вижу:
Если у Вас связка nginx+apache2 в ubuntu, то небоходимо настроить отдельный location, чтобы отображались картинки в phpmyadmin: http://joyit.ru/administrirovanie/40-nginx-apache-ubuntu-phpmyadmin.html
Здравствуйте.
Поставил себе Ubuntu14, связку nginx и apache2, и форум на моём сайте стал получать от пользователей вместо реальных IP локальный адрес сервера. Также и в логах апача сплошные 127.0.0.1. На старом сервере всё работало идеально без этих дополнительных настроек.
Установил RPAF - apt-get install libapache2-mod-rpaf, вписал в настройки RPAF рекомендованные из этой статьи строчки, прописал рекомендованные строчки в virtualhost. В логах апача стали писаться реальные IP, но форум всё равно не получает реальные IP - каждое сообщение любого пользователя имеет локальный IP. Написал скрипт, закинул на сайт - http://smirnovs.info/ip.php и выяснил, что по непонятной причине не хочет работать директива REMOTE_ADDR, остальное работает корректно.
Соответственно вопрос, как научить директиву REMOTE_ADDR работать корректно?
Из другого источника я получил информацию. Может она кому пригодится.
Модуль RPAF можно выключить - он бесполезен.
Вместо этого нужно в Apache2 задействовать модуль mod_remoteip и прописать в конфиге апача следующие строки:
Комментарии
руководство для Федоры (VPS):
http://www.drupal.ru/node/24131
Nginx рулит, пока обхожусь без апача вообще
а что насчет поддержки SSL ?
А какие именно вопросы по SSL?
Вот кусок из конфига:
И сам ман по модулю:
http://sysoev.ru/nginx/docs/http/ngx_http_ssl_module.html
Работает связка nginx+php-fpm.
Подскажите как сделать чтоб ошибки в php-скриптах выводились в браузер вместо сообщения "The page you are looking for is temporarily unavailable".
Никак не разберусь.
Спасибо.
bion, вот в Google-группе по PHP-FPM есть подобная тема: Как в php-fpm посмотреть ошибки php-скрипта
Замечательная статья, спасибо!
Спасибо.
Vit, пожалуйста!
в логах апача 127.0.0.1 вместо верного REMOTE_ADDR
модуль RPAF2 установлен
Юрий, покажите конфиг RPAF
Если имеется ввиду то, что добавляется в httpd.conf, то отличие только в опущенных комментариях и IP сервера
Юрий, покажите ваш конфиг с RPAF (из конфиг апача, блок RPAF) пожалуйста. И конфиг Nginx.
httpd.conf
nginx.conf
httpd-access.log
Покажите
на несоответствие внешнего IP в nginx.conf и остальных конфигах не обращайте внимание - оторвали и забыл подправить перед отправкой :)
http://213.179.227.214/22.php
Юрий, сделай страничку с
и дай на нее ссылку
http://213.179.227.214/21.php
Юрий, ну вроде все нормально... Покажи текущие логи, пару строк
Как не работало так и не работает
Юрий, да, странно... может логи nginx тогда юзать?
я уже думал об этом, просто интересно почему
Установка nginx как front-end к apache в Debian / Ubuntu
adw0rd, держи два спасибо. Одно за статью, второе за совет! :)
Юрий, кстати, а что у вас в REMOTE_ADDR?
Автор, а где указанная в топике статья "Nginx. Использование PHP в режиме FastCGI с помощью php-fpm" http://adw0rd.ru/2009/nginx-and-php-fpm/ ? У меня вылезает "Ничего не найдено... Попробуйте воспользоваться поиском по сайту."
Она дописывается :)
Уважаемый. Написано хорошо. Можно уточнить кто у вас обрабатывает пхп. Апач или нгинкс. У меня был настроен нгинкс без апача с пхп на fastcgi. Сейчас когда я подключаю апач, у меня не пашет пхп.
Ivet, в статье описывается способ работы nginx+apache+mod_php, таким образом пхп работает из под апача. А вы пхп пересобирали с включенным модулем mod_php?
Нет, в том то и дело. Мне бы хотелось отстатся на fastcgi. Буду разбиратся как заставить нгикс не отправлять обрабатывать пхп на Апач. Огромное спасибо за быстрый ответ.
Как уже не мучался явным образом указываю ведь обрабатывать пхп
И все равно обрабатыает пхп Апач.
Ivet, так у вас же и был настроен nginx+php:
теперь вы говорите
из этого делаю выводы, что у вас была связка nginx+php, и сейчас вы хотите nginx+php
Вопрос: Если не видно разницы, то что вы вообще хотите сделать? Оставайтесь на старой связке, или у вас сервак сгорел, а нету бекапов и вы не помните как настроить? :)
Все хорошо помню связка то осталась и меня она устраивает. Но когда я подключаю апач как бекенд-сервер. Нгинкс перестает понимать пхп, но у меня подозрение что он отправляет его обрабатывать Апачу.
Ivet, nginx никакое управление не передаст апачу, если вы явно это не укажете
Вот такой у меня конфиг когда я подключаю Apache.
А в апаче настроена обработка php? Типа того:
Глянул в конфигах Апача. Не нашел. Добавил. Не помогло.
Хм, а вообще с чего вы взяли что обрабатывать стал апач?
Когда я ставил ФастЦГИ у меня отвалился пхп5, непомню по какой причине, но Апач совершенно отказался обрабатывать пхп. Вообщем сейчас я двигаюсь в направлении заставить апач обрабатывать пхп, не с помощью mod_php5, а с помощью mod_fcgid. Пока глухо но я рядом.
А, теперь понял. конечно не мое дело, но в чем смысл использовать апач в вашей связке? Вообще какую роль он должен играть у вас на сервере?
Да, дело в том что, nginx не умеет читать .htaccess, что мне есть очень важно.
Я как-то вроде читал в обсуждении, что хотели сделать патч, который позволяет использовать файлы типа htaccess, естественно с другим синтаксимом, но с той же идеей. Тут я видел http://sysoev.ru/nginx/docs/maillists.html
Все то что я писал я поднимал на Дебиане. Промучался еще пару дней и плюнул, поднял на мод_пхп5. Но по долгу службы пришлось всю эту связку поднять под FreeBSD. Вообщем вышла у меня связка Nginx + (FreeBSD + mod_fcgid).
Все достаточно просто:
1)устанавливаем:
2)далее в конфиге Апача выключаем модуль пхп5.
)3) Добавляем поддержку модуля fcgid
(
4)в конец файла добавляем
5) Добавляем:
6) И еще:
7) Дальше перезапускаем Апач ну и он обрабатывает хпх посредством модуля fcgid, но пока это топорная настройка я думаю ее реально модифицировать.
А может nginx для определенного домена сделать запрос к Apache на другом сервере?
т.е. есть два сайта xxx.ru & yyy.ru
xxx.ru на apache 127.0.0.1
yyy.ru на apache 192.168.0.2
Да, может конечно
привет, adw0rd, подскажи, пожалуйста, я не совсем понимаю как будут работать виртуальные сайты(хосты) апача?
ну то есть - моя ситуация. на debian стоят apache2+mod_php.
у апача примерно20 сайтов, конфиги к этим сайтам лежат у меня в
/etc/apache2/conf.d
например:
/etc/apache2/conf.d/site1.com.conf
/etc/apache2/conf.d/site2.com.conf
/etc/apache2/conf.d/site3.com.conf
и в каждом файлике прописаны настойки к виртуальному хосту, типа:
как по вашей схеме будет работать ngnix?
или не будет?
заранее огромное спасибо!
Работать будет. В чем вы видите проблему?
а зачем апач на все ip на 80 порт открываеть если на них буит nginx пахать?
sapun, вы обращаетесь к Иннокентий?
ага =)
Да думаю он либо все уже решил, либо забил :)
всё ещё пишеш ?
Ага, надо бы на днях закончить :/
welnax, http://adw0rd.ru/2010/nginx-and-php-fpm/ готово :)
Собственно для сайтов на DLE связка вообще бессмысленна, т.к. там большинство статики отдаётся через пхп и, соответственно, нгикс больше тормозит систему чем помогает ей. Конечно можно резать нгиксом коннекты, но намного лучше делать это на уровне фаервола.
Я не работал с DLE, но судя по отзывам о этой системе - никогда не буду с ней работать.
Забыли в конце статьи сказать о том, что после всего еще нужно прописать в /etc/rc.conf добавить nginx_enable="YES"!!!!
Сергей, судя по вашему каменту, вы потеряли на этой "мелочи" часа 2-4 )))
А как сделать чтобы RPAF принимал X-Forwarded-For и записывал в REMOTE_ADDR
с любого IP,
то есть что-то вроде этого:
RPAFproxy_ips *
нужно это для организации большого количества nginx web proxy, а править httpd.conf каждый раз при добавлении нового фронтэнда надоедает :( .
Да вроде там и надо было ставить "*". Либо попробуйте его закомментить вообще.
Иначе вам надо просто полезть в сорцы да посмотерть, думаю проблем нету, если вам действительно это необходимо...
Автор сайта молодец, статья хороша, понравилось что есть ссылки на CGI если не хочешь использовать апач. Респект;)
Подскажите плиз, почему такое может быть - настроил по вашему примеру выдает стандартный ответ апача - IT WORKS!
Ну значит все работает, вы вирт. хосты прописали?
Да, уже разобрался, в виртах почему-то нехватало трейлинг слеша (в конце) или же я где-то в другом месте его пропустил.
Спасибо за помощь и статью!
Кстати использовал связку nginx + apache на DLE, скорость генерации страницы снизилась в три раза.
Может дело в DLE? :) Насколько я знаю dle еще то гавно, типа жумлы, но никогда не работал с ним...
Он случайно картинки не php-скриптами отдает?
Хотелось бы узнать у знающих людей, какую нагрузку (хостов в сутки) выдержит машинка со следующими параметрами: Celeron 600 MHz, 384 Mb памяти, на ней установлена ось FreeBSD 7.2, php-fpm, nginx. Предполагается, что будет крутится только один сайт.
Думаю 5-10 тысяч, но зависит от самого сайта, поэтому однозначно не могу сказать
Этот блог + http://kinburg.ru/ + http://blgo.ru/ и еще несколько сайтов держится на таком же железе (500 MHz, 256 Mb ОЗУ) + nginx/php-fpm
Евгений, зависит от того, что за сайт.
"Он случайно картинки не php-скриптами отдает?"
Шаблонизатор.
Сайт - типа статейного каталога, сами статьи хранятся в Mysql, на формирование каждой странички со статьей используется три простых mysql запроса.
Евгений, думаю у вас больше 10 000 хостов в сутки выдержит - точно.
А когда столько наберете, то вам будет по карману нормальный дедик...
Понял, спасибо за консультацию...
Здравствуйте, уважаемые! Интересует вот такой простой вопрос:
Если у меня к примеру небольшой хостинг, и, соответственно, юзеров в дирректории /home/ и доменов много, то как будет выглядеть директива
Спасибо!
Если много доменов, то наверное у вас должно быть много server, в котором вы для каждого укажете где хранятся картинки. Это по правильному, но вот ответ на ваш конкретный вопрос:
Ого. Спасибо. Значит, простого и универсального решения нет - я правильно понимаю? И модификацией пары строк это решение не спроецировать на nginx+apache+directadmin?
Покажи что вы хотите сделать, более подробно
Тут-то вот оно как: все стандартно: на debian5 установлен DirectAdmin в стандартной конфигурации. Хотелось бы в качестве фронта использовать nginx, потому как я везде читал, что этот кеширующий прокси-сервер вместо apache будет отдавать статический контент - изображения и html и за счет этого увеличится общая картина быстродействия.
Сейчас имеется такой конфиг, nginx работает на 8888 порту. При этом сайты не открываются, выдается "Apache is functioning normally".
Думаю все дело в "root /home//domains//public_html/;".
Поправочка: "Apache is functioning normally" - это когда открывать пытаешься через порт 8888, например http://orenspace.ru:8888
Если открываешь просто http://orenspace.ru , то полный порядок.
А что вам говорит nginx -t? И какая версия установлена?
Если это возможно, то можно каким либо образом глянуть конфиги php-fmp и nginx? Заранее спасибо!
В php-fpm используется режим static и 10 процессов, в остальном ничего особенного. Nginx:
nginx -t говорит все хорошо :)
2010/12/02 17:28:47 [info] 29928#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2010/12/02 17:28:47 [info] 29928#0: the configuration file /etc/nginx/nginx.conf was tested successfully
nginx version: nginx/0.6.32
сделал такие же настройки у себя. потом запустил siege потестить сервачок. в настройках поставил эмуляцию 5 юзеров в течении 3-х минут. на серваке через TOP смотрел загрузку проца, был загружен на все 100%. После теста siege выдал среднее время отклика 1,3 секунды, и из почти 1000 запросов 13 вылетели по таймауту. Такие результаты нормальны или у меня что то все таки не так настроено?
Чем нагружен то был сервачек на 100%? Что за процессы?
nginx порядка 10%, остальное php-fpm.
А можно top сюда привести? И опции с которыми вы запускали siege, посмотрю у себя
Выдача TOP:
Конфигурация siege:
top с виду нормальный, LA в том числе, даже простаивает
это выдача топ во время работы siege, а так да, в основном сервер простаивает, сейчас средняя посещаемость 500 хостов в сутки...
И еще один ламерский вопрос: если пересобрать ядро именно под Celeron, будет ли выигрыш в производительности? И придется ли пересобирать по новой уже установленный софт (nginx, php, mysql и т.д.)?
Думаю да, но опыта не было
вчера попробовал потестить апач через siege... что интересно у апача из 2000 запросов вылетело всего три соединения по таймауту, в то время как у nginx при тех же параметрах тестирования на 1000 запросов порядка 10-15 соединений вылетает по тайм ауту, хотя среднее время отклика у него меньше...
истина где то рядом как обычно... ))
при рестарте apache выдает
Invalid command "RPAFenable" perhaps misspelled or defined by a module not included in the server configuration
как быть?
Спасибо, всё работает
Люди помогите плиииииз.Не пускает на один сайт,пишет вот такое:Apache is functioning normally..Все остальные сайты работают отлично.Буду очень благодарен.
Спасибо за статью! На первый взгляд все работает. А какие есть средства для проверки что работает именно связка? И какие есть средства для отслеживания пути запроса? Чем вообще тестируете корректность работы веб сервера?
Сергей, найдите другой сайт :) Можете попробовать "cache:example.org" в Google
Adik, связку тестирую руками. Как и многое другое в жизни.
Если вы о нагрузочном тестировании, то есть ab, pylot, siege, jmeter и т.д.
Если вы о мониторинге, то nagios и munin использую...
Есть VDS сервер на CentOS 5.5 x32. Панель управления ISPManager Lite Настроена связка nginx+apache2 Работает нормально, но вот последнее время появилась проблема растет количество процессов apache которые жрут память сервера. Не подскажете кто сталкивался с проблемой и ее возможное решение.
Есть небольшой но вредный трабл:
На Ubuntu server стоит nginx+apache2+php+mysql;
apache2 прикручен на прослушку 127.0.0.1:81
Доступ к нгинксу осуществляется через домен trololo.com (к примеру :)
Теперь непосредственно сам эпик фейл - при заходе (ипользовании) phpmyadmin или phpbb3 в некоторых случаях (например при автоматической переадресации страницы средствами пхп) заменяется адрес на 127.0.0.1
Тоесть,к примеру, после ввода пароля в пхпмайадмине,вместо того, чтоб отправить меня по адресу trololo.com/phpmyadmin/index.php меня пытается переадресовать по 127.0.0.1:81/phpmyadmin/index.php , что соответственно не очень хорошо.
RPAF как я понял, отвечает сохранение и передачу ip клиента - индейцу. ОТсюда философский вопрос- что делать и как с этим бороться?
ЗЫ:Валенками просьба не закидывать если где ступил.
Уважаемый adw0rd,
судя по вашему куску конфига nginx для обработки подключений по 443 порту любое обращение к серверу как https://pyha.ru не проксируется nginx к Апачу так, как это сделано у вас для обращений http://pyha.ru, а значит обрабатывается самим nginx. Это означает, что для подключений по https идея статьи использовать nginx как фронт-энд, а апач как бэк-энд работать не будет. Я правильно понимаю смысл или ошибаюсь?
Я смотрел подобные статьи по связке "frontend nginx + backend apache", но там говорят, что запросы на 443 порт nginx тоже должен проксировать апачу так как серверу нужно обрабатывать в том числе и php-код.
root_s, MaxClients в Apache надо уменьшить, например до 10.
WTF0_o, думаю движки используют $_SERVER в своих гнусных целях, надо сделать страничку i.php (типа того) и там:
На основе этой информации можно понять какие директивы используются, после чего их в Nginx предварительно подделывать.
ps. RPAF помогает правильно передавать клиентский IP, а вам надо сервера
Александр, если вы хотите чтобы nginx обрабатывал 443, то добавьте его в listen:
на
http://nginx.org/ru/docs/http/ngx_http_core_module.html#listen
Автор, прочтите пожалуйста: https:// debian.pro/628
Dmitry Paskal, отлично, только при чем тут Debian?
У меня происходит установка из портов на FreeBSD, поэтому используется make install ))
У меня после подключения nginx на сайтах почему-то перестали загружаться скрипты, картинки и css.
Может в конфиге энджинкса неправильно задал пути?
Вот конфиг:
Как я понял в блоке
в root пишется путь к корневой директории сайта
В таком случае, что делать если сайтов несколько, в location через пробел перечислять адреса папок с каждым сайтом ?
Извиняюсь если вопрос глупый, просто я в настройках серверов мало что понимаю.
Например, если адрес картинки "http://golf941.streamrootserver.com/images/my.png" то этот location будет запрашивать картинку так:
У вас по этому адресу картинка?
Вообщем вот такая схема:
http://wiki.nginx.org/HttpCoreModule#.24document_root
http://wiki.nginx.org/HttpCoreModule#.24request_uri
Почитайте http://wiki.nginx.org/HttpCoreModule#try_files
Несколько это сколько?
Если 3, то делайте для каждого свой "server" и там определяйте location's.
Если 1000, то вычисляйте автоматически, типа того:
ps. location не проверял
Еще посмотрите http://wiki.nginx.org/HttpCoreModule#alias
Поднимаю такую старую но нужную тему. Сделал по инструкции, все отлично. 5 поддоменов на одном сервере, на первый взгляд все хорошо. На одном из поддоменов крутится phpmyadmin. В нем пробую импортировать мускульный дамп, после некоторой задумки получаю всплывающее окно с ошибкой. Лезу в логи и вижу:
В nginx:
xxx.yyy.zzz.qqq - - [04/May/2013:05:30:22 +0000] "GET /server_import.php?db=&token=d233950b9cc97380f14fe529aa96ef15&ajax_request=true&ajax_page_request=true&menuHashes=957353df&_nocache=1367645430561421331 HTTP/1.1" 200 20387 "http://phpmyadmin.my.domain/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "-"
xxx.yyy.zzz.qqq - - [04/May/2013:05:30:23 +0000] "POST /navigation.php?ajax_request=1&token=d233950b9cc97380f14fe529aa96ef15 HTTP/1.1" 200 2014 "http://phpmyadmin.my.domain/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "-"
xxx.yyy.zzz.qqq - - [04/May/2013:05:30:27 +0000] "GET /import_status.php?id=51849cee2baaa&token=d233950b9cc97380f14fe529aa96ef15&&_nocache=1367645436530991572 HTTP/1.1" 200 114 "http://phpmyadmin.my.domain/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "-"
xxx.yyy.zzz.qqq - - [04/May/2013:05:31:28 +0000] "GET /import_status.php?message=true&token=d233950b9cc97380f14fe529aa96ef15 HTTP/1.1" 404 570 "http://phpmyadmin.my.domain/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "-"
xxx.yyy.zzz.qqq - - [04/May/2013:05:31:43 +0000] "POST /import.php HTTP/1.1" 404 570 "http://phpmyadmin.my.domain/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31" "-"
В httpd:
127.0.0.1 - - [04/May/2013:05:30:22 +0000] "GET /server_import.php?db=&token=d233950b9cc97380f14fe529aa96ef15&ajax_request=true&ajax_page_request=true&menuHashes=957353df&_nocache=1367645430561421331 HTTP/1.0" 200 20352
127.0.0.1 - - [04/May/2013:05:30:22 +0000] "POST /navigation.php?ajax_request=1&token=d233950b9cc97380f14fe529aa96ef15 HTTP/1.0" 200 2014
127.0.0.1 - - [04/May/2013:05:30:27 +0000] "GET /import_status.php?id=51849cee2baaa&token=d233950b9cc97380f14fe529aa96ef15&&_nocache=1367645436530991572 HTTP/1.0" 200 114
То есть последние два запроса не были отброшены на апач.
Кусок конфига Nginx
Странно то, что у вас эти последние два запроса стали 404
Именно! Есть ли какие-то мысли? У меня абсолютно нет
А если сейчас их вручную вызвать эти последнии 3-4 запроса, то посмотрите дойдут ли они до Apache?
Дойдут. Раньше смотрел лог ошибок нгинкса - был пустой. Сейчас все почистил, рестартовал, пробую - ошибка та же. В логах есть запись
Хотя бы примерно ясно в чем проблема. Спасибо, что не бросили одного )
Если у Вас связка nginx+apache2 в ubuntu, то небоходимо настроить отдельный location, чтобы отображались картинки в phpmyadmin: http://joyit.ru/administrirovanie/40-nginx-apache-ubuntu-phpmyadmin.html
Здравствуйте.
Поставил себе Ubuntu14, связку nginx и apache2, и форум на моём сайте стал получать от пользователей вместо реальных IP локальный адрес сервера. Также и в логах апача сплошные 127.0.0.1. На старом сервере всё работало идеально без этих дополнительных настроек.
Установил RPAF - apt-get install libapache2-mod-rpaf, вписал в настройки RPAF рекомендованные из этой статьи строчки, прописал рекомендованные строчки в virtualhost. В логах апача стали писаться реальные IP, но форум всё равно не получает реальные IP - каждое сообщение любого пользователя имеет локальный IP. Написал скрипт, закинул на сайт - http://smirnovs.info/ip.php и выяснил, что по непонятной причине не хочет работать директива REMOTE_ADDR, остальное работает корректно.
Соответственно вопрос, как научить директиву REMOTE_ADDR работать корректно?
Из другого источника я получил информацию. Может она кому пригодится.
Модуль RPAF можно выключить - он бесполезен.
Вместо этого нужно в Apache2 задействовать модуль mod_remoteip и прописать в конфиге апача следующие строки:
И тогда везде будут реальные IP.
Добрый день.
Обратил внимание что если перезагрузить картинку на сервер, то nginx отдает заголовок 304 Not Modified и указывает старую дату.
Вопрос: Как подсказать nginx что картинка изменилась?
Обновить кэш браузера
Denis, либо выставить expires маленький, либо передавать GET переменную, типа "/path/to/image.jpg?v=123123"
Оставьте свой комментарий