| ssh ( @ 2006-07-22 17:51:00 |
| Current music: | Радио Монте-Карло |
| Entry tags: | linux |
Заметки о ipb, apache, nginx
Настройка совместной работы Apache, nginx для обслуживания форума на движке Invision Power Board.
- Сборка
Жизнь в стиле 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
- Конфигурация
- Настройка 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 - Настройка 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; ... - Замечания по интеграции в дистрибутив
- 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 } - 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
- logrotate
- Настройка nginx
- Заключение
Комплект из apache и nginx работает на моем сервере уже пару дней, без каких либо проблем.
Ответ на любой из возникших у меня вопросов я смог найти на странице Игоря Сысоева в разделе документации nginx.
Буду рад откликам, особенно положительным :)