The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Настройка совместной работы Apache и nginx (web nginx http)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: web, nginx, http,  (найти похожие документы)
From: zsh <ssh2@bk.ru.> Date: Sun, 18 Sep 2007 17:02:14 +0000 (UTC) Subject: Настройка совместной работы Apache и nginx Оригинал: http://ssh3.livejournal.com/29252.html Настройка совместной работы Apache, nginx для обслуживания 1. Сборка Жизнь в стиле Debian уже почти отучила меня собирать что-либо самостоятельно. :) Но случай с nginx, стал исключением. Ни для Debian, ни для FC4, которую мне любезно поставил на сервер хостер пакета мне найти не удалось. Пришлось вспоминать. До сборки я использовал "configure" с опциями: ./configure --prefix=/usr/local \ --sbin-path=/usr/local/bin \ --conf-path=/usr/local/etc/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/spool/nginx/client_body_temp \ --http-proxy-temp-path=/var/spool/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/spool/nginx/fastcgi_temp \ --pid-path=/var/run/nginx/nginx.pid \ --user=www-data \ --group=www-data Далее традиционный: #make Правда пришлось в ручную создать каталоги, и сделать их владельцем www-data:www-data: /var/log/nginx/ /var/run/nginx/ /var/spool/nginx/proxy_temp /var/spool/nginx/fastcgi_temp /var/spool/nginx/client_body_temp #make install 2. Конфигурация a. Настройка nginx Отдельное спасибо, Mr. Alexey N. Kovyrin за его статью описывающую настройку nginx в режиме Reverse-Proxy сервера. user www-data; worker_processes 2; events { worker_connections 1024; } http { include /usr/local/etc/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 /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; server { listen 80; server_name mysite.ru www.mysite.ru; access_log /home/mysite/log/access.log main; # Main location location / { proxy_pass http://127.0.0.1:8080/; 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; } # Static files location location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js)$ { root /home/mysite/html; } } Процесс конфигурирования можно закончен, проверим синтаксис конфигурационного файла: #nginx -t b. Настройка apache Что касается настройки apache, поскольку nginx сконфигурирован таким образом, что все полученные на порт 80 запросы пересылает backend на ip-адрес: 127.0.0.1 и порт 8080, то достаточно в рабочем конфиге apache изменить следующие директивы: ... Listen 8080 ... NameVirtualHost *:8080 ... <VirtualHost *:8080> ServerName mysite.ru ServerAlias www.mysite.ru ServerAdmin admin@mysite.ru DocumentRoot /home/mysite/html ErrorLog /home/mysite/log/error_log CustomLog /home/mysite/log/access_log common </VirtualHost> Следует отметить, что скриптами IPB активно используются ip-адреса посетителей, а в случае использования конфигурации приведенной выше, все посетители будут для apache приходить c одного ip-адреса: 127.0.0.1, что не правильно. Разрешить ситуацию поможет сторонний модуль для apache с трудно произносимым названием mod_rpaf, что я вляется аббревиатурой от reverse proxy add forward. Некоторые заметки о настройке совместной работы apache и mod_rpaf можно найти здесь. Поскольку модуль mod_rpaf является сторонней разработкой, сборку его придется провести самостоятельно. В случае с FC4 мне потребовалось установить пакет httpd-devel.i386 командой: #yum install httpd-devel.i386. Сборка модуля выглядит так: в Makefile устанавливаем значение APXS=/usr/sbin/apxs, затем выполняем: #make rpaf-2.0 && make install-2.0. В конфигурационный файл apache добавляем: ... LoadModule rpaf_module modules/mod_rpaf-2.0.so ... ## Mod_rpaf settings RPAFenable On RPAFproxy_ips 127.0.0.1 realip [realip1] RPAFsethostname On В конфигурационный файл nginx в раздел server необходимо добавить: ... server { ... # Main location location / { ... proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... c. Замечания по интеграции в дистрибутив 1. logrotate /home/mysite/log/*log{ missingok daily rotate 7 compress delaycompress notifempty sharedscripts postrotate /bin/kill -10 `cat /var/run/nginx/nginx.pid 2>/dev/null` 2> /dev/null || true endscript } 2. init-скрипт Честно говоря я не очень глубоко знаком с устройством FC в этой части и знакомиться особого желания не испытываю, поэтому поступил проще, скопировав с новым именем init-cкрипт от vsftp и поправил его под собственные нужды, возможно не везде идеологически правильно, но работоспособно! #!/bin/bash # v.0.0.2 # nginx - This shell script takes care of starting and stopping nginx. # # chkconfig: - 60 50 # description: nginx [engine x] is light http web/proxy server # that answers incoming ftp service requests. # processname: nginx # config: /usr/local/etc/nginx.conf # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x /usr/local/bin/nginx ] || exit 0 RETVAL=0 prog="nginx" start() { # Start daemons. if [ -e /usr/local/etc/nginx.conf ] ; then echo -n $"Starting $prog: " /usr/local/bin/nginx -t -c /usr/local/etc/nginx.conf && /usr/local/bin/nginx & RETVAL=$? [ $RETVAL -eq 0 ] && { touch /var/lock/subsys/$prog success $"$prog" } echo else RETVAL=1 fi return $RETVAL } stop() { # Stop daemons. echo -n $"Shutting down $prog: " kill -3 `cat /var/run/nginx/nginx.pid 2>/dev/null` RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; reconfigure) if [ -f /var/lock/subsys/$prog ]; then kill -1 `cat /var/run/nginx/nginx.pid 2>/dev/null` RETVAL=$? fi ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|reconfigure|status}" exit 1 esac exit $RETVAL Для автоматического страрта при загрузке системы достаточно скопировать стартовый скрипт nginx в каталог /etc/init.d и выполнить следующие команды: #chkconfig --add nginx #chkconfig --level 345 nginx on Проверить статус можно командой: #chkconfig --list | grep nginx nginx 0:off 1:off 2:off 3:on 4:on 5:on 6:off 3. Заключение Комплект из apache и nginx работает на моем сервере уже пару дней, без каких либо проблем. Ответ на любой из возникших у меня вопросов я смог найти на странице Игоря Сысоева в разделе документации nginx. Буду рад откликам, особенно положительным :)

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1.1, Dmitry (??), 08:20, 23/11/2007 [ответить]  
  • +/
    Отличная статья, хорошо описал весь процесс.
     
  • 1.2, Илья (??), 03:03, 20/01/2008 [ответить]  
  • +/
    А что если у пользователей будет закрыт порт 8080?
    У нас апач обрабатывает скрипты и слушает порт 80, а nginx статику по 81. Некоторые пользователи стали жаловаться, что ен видят картинок - оказалось что достаточно таких, у кого 81 порт закрыт по тем или иным причинам. Как быть в подобной ситуации?
     
  • 1.3, maltsev (??), 14:31, 21/01/2008 [ответить]  
  • +/
    nginx, как фронтенд, висит на 80 порту и выдает всю статику.
    а бакенду передает запросы на 8080 локальный порт для динамики.
    т.е. для пользователя должен быть открыт только 80 порт
     
  • 1.4, gigli (?), 02:09, 21/08/2009 [ответить]  
  • +/
    Если бакенд на той же машине его лучше держать на 127.0.0.1:80
     
     
  • 2.5, Александр (??), 15:45, 22/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Эт как? один порт для nginx и apache? ;)))))))

    по поводу "пользователи не видят картинок" - это к конфигу nginx вопросы! порты тут лесом..

     
     
  • 3.6, W.Ed. (??), 21:38, 26/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    да, один порт, разные ip
    nginx вешается на внешний, апач на 127.0.0.1, все отлично работает
     
     
  • 4.7, azimut (?), 15:17, 09/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ничто не мешает повесить один на 127.0.0.1:80, а второй на 127.0.0.2:80 и пусть разговаривают. =)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру