nginx_apache

Зачем нужен Nginx?

Это веб-сервер, предназначенный в основном для отдачи статики (для того чтобы разгрузить бекенд) и использования в качестве фронтендов. Apache при этом можно использовать в качестве бэкенда для генерации динамического контента.

Так же Nginx можно использовать в режиме FastCGI, при этом Apache вам не понадобится. Однако при этом режиме у PHP наблюдается ряд проблем, поэтому на помощь приходит php-fpm!

Более подробно о PHP-FPM в моей статье: Nginx. Использование PHP в режиме FastCGI с помощью php-fpm

Однако мы сегодня поговорим о совместной установке с Apache, а не в режиме FastCGI. Более того, по задаче у нас эти веб-сервера будут находится на одном сервере, поэтому выделим для Nginx — 80, а для Apache — 88 порт!

web_sch_1

Установка Apache и Nginx

Ставим Apache:

cd /usr/ports/www/apache2
make config
make install clean

Ставим Nginx:

cd /usr/ports/www/nginx
make config
make install clean

Настройка Nginx

Отредактируем файл /usr/local/etc/nginx/nginx.conf

# пользователь и группа от которого запускается процесс
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: Отдаем статику

web_sch_2

С помощью этих правил разруливаем запросы на отдачу статику и динамического контента

# Следующие расширения файлов (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;
}

Настройка Apache

Редактируем файл /usr/local/etc/apache2/httpd.conf

# Меняем порт с 80 на 88
Listen 88

Тоже самое делаем и в httpd-vhosts.conf для ваших хостов.

Если у вас появляется следующая ошибка:
> [warn] (2) No such file or directory:
> Failed to enable the ‘httpready’ Accept Filter

то вам следует подгрузить модуль
# kldload accf_http

Подробнее тут http://www.mydigitallife.info/2006/04/23/freebsd-apache-http-accept-filter-error/

Установка и настройка 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

Полезные ссылки
Пример конфигурации nginx
Список рассылки
Lexa Software: Архив рассылки по nginx
Настройка виртуальных серверов
Отличная статья с Хабра: Тюнинг nginx
Полезная статья про балансировку нагрузки, оптимизацию и кеширование в Nginx: Введение в nginx, часть 2: Другие возможности


Комментарии (112) на запись «Nginx и Apache2. Установка и быстрая настройка!»

» Трекбеки скрыты, показать их?
  1. Seodigger.com заговорил по русски! | Мастерская интернет-разработчика | 28.03.2009 в 11:26

    [...] описание kqueue [...]

  2. Рингтоны для гиков! | Мастерская интернет-разработчика | 29.03.2009 в 14:24

    [...] nginx events [...]

  3. Hello, World! | Мастерская интернет-разработчика | 30.03.2009 в 10:17

    [...] сервер Nginx используется совместно с Apache [...]

  4. Пора делать свой код совместимым с PHP 6 | Мастерская интернет-разработчика | 30.03.2009 в 12:29

    [...] настройка apache2 [...]

  5. Список плагинов для FireFox 2 - облегчающие жизнь веб-программисту! | Мастерская интернет-разработчика | 01.04.2009 в 15:58

    [...] nginx apache php 502-error [...]

  6. Akzhan | 07.04.2009 в 23:29

    руководство для Федоры (VPS):

    www.drupal.ru/node/24131

  7. Автосервис | 17.04.2009 в 18:41

    Nginx рулит, пока обхожусь без апача вообще

  8. avarkin | 25.05.2009 в 14:54

    а что насчет поддержки SSL ?

  9. adw0rd | 25.05.2009 в 15:23

    А какие именно вопросы по SSL?

    Вот кусок из конфига:

        # HTTPS server
        #
        #server {
        #    listen       443;
        #    server_name  localhost;

        #    ssl                  on;
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;

        #    ssl_session_timeout  5m;

        #    ssl_protocols  SSLv2 SSLv3 TLSv1;
        #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        #    ssl_prefer_server_ciphers   on;

        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}

    И сам ман по модулю:

    sysoev.ru/nginx/docs/http..._ssl_module.html

  10. bion | 25.05.2009 в 17:58

    Работает связка nginx+php-fpm.

    Подскажите как сделать чтоб ошибки в php-скриптах выводились в браузер вместо сообщения «The page you are looking for is temporarily unavailable».

    Никак не разберусь.

    Спасибо.

  11. adw0rd | 25.05.2009 в 18:07

    bion, вот в Google-группе по PHP-FPM есть подобная тема: Как в php-fpm посмотреть ошибки php-скрипта

  12. Gleb | 26.05.2009 в 01:12

    Замечательная статья, спасибо!

  13. Vit | 18.06.2009 в 22:32

    Спасибо.

  14. adw0rd | 18.06.2009 в 22:44

    Vit, пожалуйста!

  15. Юрий | 19.06.2009 в 11:44

    в логах апача 127.0.0.1 вместо верного REMOTE_ADDR

    модуль RPAF2 установлен

  16. adw0rd | 19.06.2009 в 12:32

    Юрий, покажите конфиг RPAF

  17. Юрий | 19.06.2009 в 13:07

    Если имеется ввиду то, что добавляется в httpd.conf, то отличие только в опущенных комментариях и IP сервера

  18. adw0rd | 19.06.2009 в 15:21

    Юрий, покажите ваш конфиг с RPAF (из конфиг апача, блок RPAF) пожалуйста. И конфиг Nginx.

  19. Юрий | 19.06.2009 в 15:54

    httpd.conf

    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 1.2.3.4
    RPAFheader X-Forwarded-For

    nginx.conf

    user  www www;
    worker_processes  3;
    error_log  /var/log/nginx-error.log;

    events {
        worker_connections  1024;
        use kqueue;
            }

    http {
        include       mime.types;
        default_type  application/octet-stream;

        client_header_timeout  3m;
        client_body_timeout    3m;
        send_timeout           3m;
        keepalive_timeout      2m;
        sendfile        on;

        upstream bak {
        server 127.0.0.1:8080;
                     }

        server {
           listen       213.179.227.214:80;
           server_name  localhost;

           client_max_body_size 10M;

           location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
                    root /home/www/test;
               }

        location ~ /\.ht {
                    deny  all;
        }

        location / {
                proxy_pass http://bak/;
                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;
             }


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   /usr/local/www/nginx-dist;
            }
        }
    }

    httpd-access.log

    127.0.0.1 - - [19/Jun/2009:13:20:50 +0300] "GET /22.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.0" 200 2524 "http://1.2.3.4/22.php" "Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1"
    127.0.0.1 - - [19/Jun/2009:13:20:50 +0300] "GET /22.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.0" 200 2146 "http://1.2.3.4/22.php" "Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1"
    127.0.0.1 - - [19/Jun/2009:13:44:37 +0300] "GET / HTTP/1.0" 304 - "-" "Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1"

  20. adw0rd | 19.06.2009 в 15:59

    Покажите

    $_SERVER['HTTP_HOST']
    $_SERVER['HTTP_X_REAL_IP']
    $_SERVER['HTTP_X_FORWARDED_FOR']

  21. Юрий | 19.06.2009 в 16:07

    на несоответствие внешнего IP в nginx.conf и остальных конфигах не обращайте внимание — оторвали и забыл подправить перед отправкой :)

  22. Юрий | 19.06.2009 в 16:14

    213.179.227.214/22.php

  23. adw0rd | 19.06.2009 в 16:26

    Юрий, сделай страничку с

    var_dump(
      $_SERVER['HTTP_HOST'],
      $_SERVER['HTTP_X_REAL_IP'],
      $_SERVER['HTTP_X_FORWARDED_FOR']
    );

    и дай на нее ссылку

  24. Юрий | 19.06.2009 в 16:30

    213.179.227.214/21.php

  25. adw0rd | 19.06.2009 в 16:41

    Юрий, ну вроде все нормально... Покажи текущие логи, пару строк

  26. Юрий | 19.06.2009 в 16:49

    # tail -n3 /var/log/httpd-access.log
    127.0.0.1 - - [19/Jun/2009:14:37:36 +0300] "GET /21.php HTTP/1.0" 200 87 "-" "Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1"
    127.0.0.1 - - [19/Jun/2009:14:40:57 +0300] "GET /21.php HTTP/1.0" 200 83 "http://adw0rd.ru/2009/nginx-and-apache-install/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1"
    127.0.0.1 - - [19/Jun/2009:14:42:30 +0300] "GET /21.php HTTP/1.0" 200 87 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.31 Safari/530.5"

  27. Юрий | 19.06.2009 в 17:02

    Как не работало так и не работает

  28. adw0rd | 19.06.2009 в 17:05

    Юрий, да, странно... может логи nginx тогда юзать?

  29. Юрий | 19.06.2009 в 17:08

    я уже думал об этом, просто интересно почему

  30. debianworld.ru | 29.06.2009 в 07:47

    Установка nginx как front-end к apache в Debian / Ubuntu

  31. bionic | 01.07.2009 в 21:35

    adw0rd, держи два спасибо. Одно за статью, второе за совет! :)

  32. adw0rd | 10.08.2009 в 20:51

    Юрий, кстати, а что у вас в REMOTE_ADDR?

  33. Varsosnill | 19.09.2009 в 09:30

    Автор, а где указанная в топике статья «Nginx. Использование PHP в режиме FastCGI с помощью php-fpm» adw0rd.ru/2009/nginx-and-php-fpm/ ? У меня вылезает «Ничего не найдено... Попробуйте воспользоваться поиском по сайту.»

  34. adw0rd | 20.09.2009 в 13:46

    Она дописывается :)

  35. Ivet | 07.10.2009 в 19:03

    Уважаемый. Написано хорошо. Можно уточнить кто у вас обрабатывает пхп. Апач или нгинкс. У меня был настроен нгинкс без апача с пхп на fastcgi. Сейчас когда я подключаю апач, у меня не пашет пхп.

  36. adw0rd | 07.10.2009 в 20:20

    Ivet, в статье описывается способ работы nginx+apache+mod_php, таким образом пхп работает из под апача. А вы пхп пересобирали с включенным модулем mod_php?

  37. Ivet | 08.10.2009 в 12:27

    Нет, в том то и дело. Мне бы хотелось отстатся на fastcgi. Буду разбиратся как заставить нгикс не отправлять обрабатывать пхп на Апач. Огромное спасибо за быстрый ответ.

  38. Ivet | 08.10.2009 в 13:13

    Как уже не мучался явным образом указываю ведь обрабатывать пхп

    location ~ \.php$ {
                root           /var/www/playlist;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/playlist$fastcgi_script_name;
                include        fastcgi_params;
            }

    И все равно обрабатыает пхп Апач.

  39. adw0rd | 08.10.2009 в 13:14

    Ivet, так у вас же и был настроен nginx+php:

    У меня был настроен нгинкс без апача с пхп на fastcgi

    теперь вы говорите

    Буду разбиратся как заставить нгикс не отправлять обрабатывать пхп на Апач.

    из этого делаю выводы, что у вас была связка nginx+php, и сейчас вы хотите nginx+php

    Вопрос: Если не видно разницы, то что вы вообще хотите сделать? Оставайтесь на старой связке, или у вас сервак сгорел, а нету бекапов и вы не помните как настроить? :)

  40. Ivet | 08.10.2009 в 13:23

    Все хорошо помню связка то осталась и меня она устраивает. Но когда я подключаю апач как бекенд-сервер. Нгинкс перестает понимать пхп, но у меня подозрение что он отправляет его обрабатывать Апачу.

  41. adw0rd | 08.10.2009 в 13:33

    Ivet, nginx никакое управление не передаст апачу, если вы явно это не укажете

  42. Ivet | 08.10.2009 в 13:44

    server {
            listen       80;
            server_name  playlist.in.ua www.playlist.in.ua;

            #charset koi8-r;

            #access_log  logs/host.access.log  main;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
             }
                 location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|php)$ {
                 root /var/www/playlist;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www/playlist$fastcgi_script_name;
                include        fastcgi_params;
                   }
                location / {
                             proxy_pass http://127.0.0.1:8080/;
                             proxy_set_header Host $host;
                             proxy_set_header X-Real-IP $remote_addr;
                             proxy_set_header X-Forwarded-For $remote_addr;
           
                    client_max_body_size       5m;
                     client_body_buffer_size    128k;
                     proxy_connect_timeout      90;
                      proxy_send_timeout         90;
                     proxy_read_timeout         90;
                     proxy_buffer_size          4k;
                     proxy_buffers              4 32k;
                     proxy_busy_buffers_size    64k;
                     proxy_temp_file_write_size 10m;

                    }
    }

    Вот такой у меня конфиг когда я подключаю Apache.

  43. adw0rd | 08.10.2009 в 13:55

    А в апаче настроена обработка php? Типа того:

    AddType application/x-httpd-php php

  44. Ivet | 08.10.2009 в 14:03

    Глянул в конфигах Апача. Не нашел. Добавил. Не помогло.

  45. adw0rd | 09.10.2009 в 00:23

    Хм, а вообще с чего вы взяли что обрабатывать стал апач?

  46. Ivet | 09.10.2009 в 20:35

    Когда я ставил ФастЦГИ у меня отвалился пхп5, непомню по какой причине, но Апач совершенно отказался обрабатывать пхп. Вообщем сейчас я двигаюсь в направлении заставить апач обрабатывать пхп, не с помощью mod_php5, а с помощью mod_fcgid. Пока глухо но я рядом.

  47. adw0rd | 09.10.2009 в 21:24

    А, теперь понял. конечно не мое дело, но в чем смысл использовать апач в вашей связке? Вообще какую роль он должен играть у вас на сервере?

  48. Ivet | 09.10.2009 в 21:49

    Да, дело в том что, nginx не умеет читать .htaccess, что мне есть очень важно.

  49. adw0rd | 09.10.2009 в 21:59

    Я как-то вроде читал в обсуждении, что хотели сделать патч, который позволяет использовать файлы типа htaccess, естественно с другим синтаксимом, но с той же идеей. Тут я видел sysoev.ru/nginx/docs/maillists.html

  50. Ivet | 16.10.2009 в 16:01

    Все то что я писал я поднимал на Дебиане. Промучался еще пару дней и плюнул, поднял на мод_пхп5. Но по долгу службы пришлось всю эту связку поднять под FreeBSD. Вообщем вышла у меня связка Nginx + (FreeBSD + mod_fcgid).

    Все достаточно просто:

    1)устанавливаем:

    #pkg_add -r mod_fcgid

    2)далее в конфиге Апача выключаем модуль пхп5.

    3) Добавляем поддержку модуля fcgid

    (

    LoadModule fcgid_module libexec/apache2/mod_fcgid.so

    )

    4)в конец файла добавляем

    <IfModule mod_fcgid.c>    
    AddHandler fcgid-script .fcgi    
    FCGIWrapper /usr/local/bin/php-cgi .php  
    </IfModule>

    5) Добавляем:

    AddType application/x-httpd-php .php
       AddType application/x-httpd-php-source .phps

    6) И еще:

    <Directory "/usr/local/www/data">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny    
    SetHandler fcgid-script    
    FCGIWrapper /usr/local/bin/php-cgi .php    
    Options ExecCGI    
    Allow from all
    </Directory>

    7) Дальше перезапускаем Апач ну и он обрабатывает хпх посредством модуля fcgid, но пока это топорная настройка я думаю ее реально модифицировать.

  51. Serge Kuznetsov | 30.10.2009 в 19:51

    А может nginx для определенного домена сделать запрос к Apache на другом сервере?

    т.е. есть два сайта xxx.ru & yyy.ru

    xxx.ru на apache 127.0.0.1

    yyy.ru на apache 192.168.0.2

  52. adw0rd | 31.10.2009 в 12:14

    Да, может конечно

  53. Иннокентий | 07.01.2010 в 01:45

    привет, 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

    и в каждом файлике прописаны настойки к виртуальному хосту, типа:

    <VirtualHost *:80>
        php_admin_value doc_root ...
        php_admin_value open_basedir ...
        php_admin_value safe_mode_exec_dir ...
        php_admin_value upload_tmp_dir ...
        DocumentRoot ...
        ServerName ...
        ServerAlias ...
        ErrorLog ...
        CustomLog ...
    <Directory ...>
        Options -Indexes
        AllowOverride All
    </Directory>

    </VirtualHost>

    как по вашей схеме будет работать ngnix?

    или не будет?

    заранее огромное спасибо!

  54. adw0rd | 08.01.2010 в 12:42

    Работать будет. В чем вы видите проблему?

  55. sapun | 19.01.2010 в 15:27

    а зачем апач на все ip на 80 порт открываеть если на них буит nginx пахать?

  56. adw0rd | 19.01.2010 в 15:48

    sapun, вы обращаетесь к Иннокентий?

  57. sapun | 19.01.2010 в 16:26

    ага =)

  58. adw0rd | 19.01.2010 в 17:51

    Да думаю он либо все уже решил, либо забил :)

  59. welnax | 26.01.2010 в 23:39

    Более подробно о PHP-FPM в моей статье: Nginx. Использование PHP в режиме FastCGI с помощью php-fpm

    всё ещё пишеш ?

  60. adw0rd | 27.01.2010 в 09:51

    Ага, надо бы на днях закончить :/

  61. adw0rd | 27.01.2010 в 15:53

    welnax, adw0rd.ru/2010/nginx-and-php-fpm/ готово :)

  62. train | 31.01.2010 в 01:46

    Собственно для сайтов на DLE связка вообще бессмысленна, т.к. там большинство статики отдаётся через пхп и, соответственно, нгикс больше тормозит систему чем помогает ей. Конечно можно резать нгиксом коннекты, но намного лучше делать это на уровне фаервола.

  63. adw0rd | 31.01.2010 в 11:10

    Я не работал с DLE, но судя по отзывам о этой системе — никогда не буду с ней работать.

  64. Сергей | 11.02.2010 в 18:16

    Забыли в конце статьи сказать о том, что после всего еще нужно прописать в /etc/rc.conf добавить nginx_enable="YES"!!!!

  65. phpdude | 05.03.2010 в 16:08

    Сергей, судя по вашему каменту, вы потеряли на этой «мелочи» часа 2-4 )))

  66. lothlorian | 13.05.2010 в 12:59

    А как сделать чтобы RPAF принимал X-Forwarded-For и записывал в REMOTE_ADDR

    с любого IP,

    то есть что-то вроде этого:

    RPAFproxy_ips *

    нужно это для организации большого количества nginx web proxy, а править httpd.conf каждый раз при добавлении нового фронтэнда надоедает :( .

  67. adw0rd | 13.05.2010 в 13:38

    Да вроде там и надо было ставить «*». Либо попробуйте его закомментить вообще.

    Иначе вам надо просто полезть в сорцы да посмотерть, думаю проблем нету, если вам действительно это необходимо...

  68. guf | 27.07.2010 в 02:06

    Автор сайта молодец, статья хороша, понравилось что есть ссылки на CGI если не хочешь использовать апач. Респект;)

  69. Полезные ссылки « ZSV.ETEL.RU | 19.10.2010 в 14:47

    [...] Nginx и Apache2. Установка и быстрая настройка! Рубрика: Полезные ссылки Комментарии (RSS)  |  Обратная ссылка  |  Permalink [...]

  70. miha | 19.11.2010 в 00:35

    Подскажите плиз, почему такое может быть — настроил по вашему примеру выдает стандартный ответ апача — IT WORKS!

  71. adw0rd | 19.11.2010 в 17:42

    Ну значит все работает, вы вирт. хосты прописали?

  72. miha | 19.11.2010 в 18:12

    Да, уже разобрался, в виртах почему-то нехватало трейлинг слеша (в конце) или же я где-то в другом месте его пропустил.

    Спасибо за помощь и статью!

    Кстати использовал связку nginx + apache на DLE, скорость генерации страницы снизилась в три раза.

  73. adw0rd | 19.11.2010 в 21:14

    Может дело в DLE? :) Насколько я знаю dle еще то гавно, типа жумлы, но никогда не работал с ним...

    Он случайно картинки не php-скриптами отдает?

  74. Евгений | 30.11.2010 в 17:51

    Хотелось бы узнать у знающих людей, какую нагрузку (хостов в сутки) выдержит машинка со следующими параметрами: Celeron 600 MHz, 384 Mb памяти, на ней установлена ось FreeBSD 7.2, php-fpm, nginx. Предполагается, что будет крутится только один сайт.

  75. adw0rd | 30.11.2010 в 18:18

    Думаю 5-10 тысяч, но зависит от самого сайта, поэтому однозначно не могу сказать

    Этот блог + kinburg.ru + blgo.ru и еще несколько сайтов держится на таком же железе (500 MHz, 256 Mb ОЗУ) + nginx/php-fpm

  76. phpdude | 30.11.2010 в 18:18

    Евгений, зависит от того, что за сайт.

  77. miha | 30.11.2010 в 23:13

    «Он случайно картинки не php-скриптами отдает?»

    Шаблонизатор.

  78. Евгений | 01.12.2010 в 08:42

    Сайт — типа статейного каталога, сами статьи хранятся в Mysql, на формирование каждой странички со статьей используется три простых mysql запроса.

  79. adw0rd | 01.12.2010 в 14:31

    «Он случайно картинки не php-скриптами отдает?»

    Шаблонизатор.

    Не понял вас, чего «шаблонизатор»?
  80. adw0rd | 01.12.2010 в 14:33

    Евгений, думаю у вас больше 10 000 хостов в сутки выдержит — точно.

    А когда столько наберете, то вам будет по карману нормальный дедик...

  81. Евгений | 01.12.2010 в 14:39

    Понял, спасибо за консультацию...

  82. Игорь | 01.12.2010 в 18:03

    Здравствуйте, уважаемые! Интересует вот такой простой вопрос:

    # Разруливаем статику и динамку, смотрите описание ниже в этой статье!
                    location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
                            root /home/pyha/pyha.ru;
                    }

    Если у меня к примеру небольшой хостинг, и, соответственно, юзеров в дирректории /home/ и доменов много, то как будет выглядеть директива

    root /home/pyha/pyha.ru;

    Спасибо!

  83. adw0rd | 01.12.2010 в 18:19

    Если много доменов, то наверное у вас должно быть много server, в котором вы для каждого укажете где хранятся картинки. Это по правильному, но вот ответ на ваш конкретный вопрос:

    server {
        listen       80 default;
        server_name  localhost;

        location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
            root /home/www/$http_host;
        }

        ...

    }

  84. Игорь | 01.12.2010 в 18:46

    Ого. Спасибо. Значит, простого и универсального решения нет — я правильно понимаю? И модификацией пары строк это решение не спроецировать на nginx+apache+directadmin?

  85. adw0rd | 02.12.2010 в 00:23

    > Значит, простого и универсального решения нет — я правильно понимаю?

    Ну простое это создавать для кажого server. Или я вас не понял?

    Если вы раньше делали это для Apache, то покажите как, может тогда я пойму

  86. adw0rd | 02.12.2010 в 00:25

    И модификацией пары строк это решение не спроецировать на nginx+apache+directadmin?

    Покажи что вы хотите сделать, более подробно

  87. Игорь | 02.12.2010 в 06:57

    Тут-то вот оно как: все стандартно: на debian5 установлен DirectAdmin в стандартной конфигурации. Хотелось бы в качестве фронта использовать nginx, потому как я везде читал, что этот кеширующий прокси-сервер вместо apache будет отдавать статический контент — изображения и html и за счет этого увеличится общая картина быстродействия.

    Сейчас имеется такой конфиг, nginx работает на 8888 порту. При этом сайты не открываются, выдается «Apache is functioning normally».

    user www-data;
    worker_processes  2;

    error_log  /etc/nginx/log/error.log;
    pid        /var/run/nginx.pid;

    events {
        worker_connections  1024;
    }

    http {
        include      mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] $status '
                          '"$request" $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "http_x_forwarded_for"';

        access_log  /etc/nginx/log/access.log  main;

        sendfile        on;
        tcp_nopush     on;
        tcp_nodelay    on;

        server {
            listen       8888;
            server_name  *.*;

            access_log  /etc/nginx/log/host.access.log  main;

            # Main location
            location / {
                proxy_pass         http://127.0.0.1:80/;
                proxy_redirect     off;

                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

                client_max_body_size       10m;
                client_body_buffer_size    128k;

                proxy_connect_timeout      90;
                proxy_send_timeout         90;
                proxy_read_timeout         90;

                proxy_buffer_size          4k;
                proxy_buffers              4 32k;
                proxy_busy_buffers_size    64k;
                proxy_temp_file_write_size 64k;
                location ~* \.(gif|jpg|jpeg|pdf|txt|css|js|png|ico|xml|xml|gz)$ {
                root /home/*/domains/*/public_html/;
                }

                 }

         }
    }

    Думаю все дело в «root /home/*/domains/*/public_html/;».

  88. Игорь | 02.12.2010 в 07:03

    Поправочка: «Apache is functioning normally» — это когда открывать пытаешься через порт 8888, например orenspace.ru:8888

    Если открываешь просто orenspace.ru , то полный порядок.

  89. adw0rd | 02.12.2010 в 07:21

    А что вам говорит nginx -t? И какая версия установлена?

  90. Евгений | 02.12.2010 в 10:06

    ...еще несколько сайтов держится на таком же железе (500 MHz, 256 Mb ОЗУ)...

    Если это возможно, то можно каким либо образом глянуть конфиги php-fmp и nginx? Заранее спасибо!

  91. adw0rd | 02.12.2010 в 10:57

    В php-fpm используется режим static и 10 процессов, в остальном ничего особенного. Nginx:

    user  www www;
    worker_processes 1;
    worker_rlimit_nofile 8192;

    events {
        worker_connections  1024;
        use kqueue;
    }

    http {
        include       mime.types;
        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 off;
        sendfile       on;
        tcp_nopush     on;
        tcp_nodelay    on;
        server_tokens  off;
        fastcgi_intercept_errors    on;
        client_max_body_size 101M;

        gzip             on;
        gzip_min_length  1000;
        gzip_proxied     any;
        gzip_types       text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
        gzip_disable     "msie6";
        gzip_comp_level  6;

        upstream php-fpm {
            server unix:/tmp/php53-fpm.sock;
        }

        include /path/to/vhosts/*.conf;
    }

  92. Игорь | 02.12.2010 в 17:29

    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

  93. Игорь | 02.12.2010 в 17:35

    nginx version: nginx/0.6.32

  94. Евгений | 02.12.2010 в 21:41

    В php-fpm используется режим static и 10 процессов, в остальном ничего особенного. Nginx:

    сделал такие же настройки у себя. потом запустил siege потестить сервачок. в настройках поставил эмуляцию 5 юзеров в течении 3-х минут. на серваке через TOP смотрел загрузку проца, был загружен на все 100%. После теста siege выдал среднее время отклика 1,3 секунды, и из почти 1000 запросов 13 вылетели по таймауту. Такие результаты нормальны или у меня что то все таки не так настроено?

  95. adw0rd | 03.12.2010 в 11:08

    Чем нагружен то был сервачек на 100%? Что за процессы?

  96. Евгений | 03.12.2010 в 13:11

    nginx порядка 10%, остальное php-fpm.

  97. adw0rd | 03.12.2010 в 13:20

    А можно top сюда привести? И опции с которыми вы запускали siege, посмотрю у себя

  98. Евгений | 03.12.2010 в 15:04

    Выдача TOP:

    last pid: 82299;  load averages:  0.98,  0.26,  0.09   up 28+22:38:38  14:09:21
    72 processes:  3 running, 69 sleeping
    CPU: 74.3% user,  0.0% nice, 20.5% system,  1.1% interrupt,  4.1% idle
    Mem: 72M Active, 183M Inact, 79M Wired, 6276K Cache, 46M Buf, 16M Free
    Swap: 768M Total, 28K Used, 768M Free

      PID USERNAME    THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
    77464 www           1  73    0  4576K  3100K RUN      2:03 10.79% nginx
    81825 www           1  49    0 22084K 11596K RUN      0:39  7.76% php-fpm
    81794 www           1   4    0 22596K 11128K accept   0:40  7.67% php-fpm
    81827 www           1   4    0 21828K 11416K accept   0:39  7.28% php-fpm
    81824 www           1   4    0 22468K 11088K accept   0:39  7.18% php-fpm
    81816 www           1   4    0 21444K 10924K accept   0:40  6.88% php-fpm
    82298 adminuser     1  44    0  3496K  1648K RUN      0:00  0.29% top
      755 root         29  44    0 13812K  4928K ucond   38:49  0.00% XMail
      728 root          1  44    0  5876K  2524K select   3:27  0.00% sendmail
    75737 root          1   4    0 20164K  8260K kqread   1:11  0.00% php-fpm
      738 root          1   8    0  3212K  1092K nanslp   0:34  0.00% cron
      523 root          1  44    0  3184K  1032K select   0:24  0.00% syslogd
    79853 root          1  44    0  9724K  3276K select   0:11  0.00% searchd
      732 smmsp         1  20    0  5876K  2360K pause    0:04  0.00% sendmail
      750 root          1   4    0  3256K   952K accept   0:02  0.00% bftpd
      864 root          1  44    0  8448K  3024K select   0:02  0.00% mc

    Конфигурация siege:

    verbose = true
    # csv = true
    # fullurl = true
    # display-id =
    show-logfile = true
    #logging = true
    # logfile =
    protocol = HTTP/1.1
    chunked = true
    # ex: cache = true
    cache = false
    connection = close
    concurrent = 5
    time = 3M
    # reps =
    # file =
    url = http://www.---.ru
    delay = 1
    # timeout =
    # expire-session =
    # failures =
    internet = false
    benchmark = true
    # user-agent =
    accept-encoding = gzip
    spinner = true
    # login =
    # username =
    # password =
    # ssl-cert =
    # ssl-key =
    # ssl-timeout =
    # ssl-ciphers =
    # login-url =
    # proxy-host =
    # proxy-port =
    # proxy-login =
    # follow-location =
    # zero-data-ok =
    # end of siegerc
    proxy#

  99. adw0rd | 03.12.2010 в 20:05

    top с виду нормальный, LA в том числе, даже простаивает

  100. Евгений | 04.12.2010 в 09:24

    это выдача топ во время работы siege, а так да, в основном сервер простаивает, сейчас средняя посещаемость 500 хостов в сутки...

  101. Евгений | 04.12.2010 в 13:02

    И еще один ламерский вопрос: если пересобрать ядро именно под Celeron, будет ли выигрыш в производительности? И придется ли пересобирать по новой уже установленный софт (nginx, php, mysql и т.д.)?

  102. adw0rd | 04.12.2010 в 14:06

    Думаю да, но опыта не было

  103. Евгений | 06.12.2010 в 09:57

    вчера попробовал потестить апач через siege... что интересно у апача из 2000 запросов вылетело всего три соединения по таймауту, в то время как у nginx при тех же параметрах тестирования на 1000 запросов порядка 10-15 соединений вылетает по тайм ауту, хотя среднее время отклика у него меньше...

    истина где то рядом как обычно... ))

  104. Юрчик | 03.01.2011 в 20:23

    при рестарте apache выдает

    Invalid command «RPAFenable» perhaps misspelled or defined by a module not included in the server configuration

    как быть?

  105. Nadya | 28.01.2011 в 16:05

    Спасибо, всё работает

  106. Сергей | 21.02.2011 в 10:03

    Люди помогите плиииииз.Не пускает на один сайт,пишет вот такое:Apache is functioning normally...Все остальные сайты работают отлично.Буду очень благодарен.

  107. Adik | 21.02.2011 в 15:24

    Спасибо за статью! На первый взгляд все работает. А какие есть средства для проверки что работает именно связка? И какие есть средства для отслеживания пути запроса? Чем вообще тестируете корректность работы веб сервера?

  108. adw0rd | 22.02.2011 в 10:58

    Сергей, найдите другой сайт :) Можете попробовать «cache:example.org» в Google

  109. adw0rd | 22.02.2011 в 11:05

    Adik, связку тестирую руками. Как и многое другое в жизни.

    Если вы о нагрузочном тестировании, то есть ab, pylot, siege, jmeter и т.д.

    Если вы о мониторинге, то nagios и munin использую...

  110. root_s | 07.03.2011 в 20:38

    Есть VDS сервер на CentOS 5.5 x32. Панель управления ISPManager Lite Настроена связка nginx+apache2 Работает нормально, но вот последнее время появилась проблема растет количество процессов apache которые жрут память сервера. Не подскажете кто сталкивался с проблемой и ее возможное решение.

  111. Nginx + Apache и настройка виртуальных хостов c поддержкой SSL (https) | bUbuntu | 20.06.2011 в 15:35

    [...] материалы: DebianWorld Habrahabr Adword.ru VN:F [1.9.9_1125]Rating: 9.7/10 (14 votes cast) Nginx + Apache и настройка [...]

  112. WTF0_o | 15.12.2011 в 01:26

    Есть небольшой но вредный трабл:

    На 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 клиента — индейцу. ОТсюда философский вопрос- что делать и как с этим бороться?

    ЗЫ:Валенками просьба не закидывать если где ступил.

Оставить комментарий