Главная » Настройка совместной работы Apache, nginx для обслуживания форума на движке Invision Power Board
# Сборка
Жизнь в стиле Debian уже почти отучила меня собирать что-либо самостоятельно. smile Но случай с 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

# Конфигурация

1. Настройка nginx
Отдельное спасибо, Mr. Alexey N. Kovyrin за его статью описывающую настройку nginx в режиме Reverse-Proxy сервера. http://blog.kovyrin.net/2006/05/18/nginx-as-reverse-proxy/lang/ru/

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

2. Настройка apache
Что касается настройки apache, поскольку nginx сконфигурирован таким образом, что все полученные на порт 80 запросы пересылает backend на ip-адрес: 127.0.0.1 и порт 8080, то достаточно в рабочем конфиге apache изменить следующие директивы:

...
Listen 8080
...
NameVirtualHost *: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

Следует отметить, что скриптами IPB активно используются ip-адреса посетителей, а в случае использования конфигурации приведенной выше, все посетители будут для apache приходить c одного ip-адреса: 127.0.0.1, что не правильно.
Разрешить ситуацию поможет сторонний модуль для apache с трудно произносимым названием mod_rpaf, ( http://stderr.net/apache/rpaf/ )что я вляется аббревиатурой от reverse proxy add forward.
Некоторые заметки о настройке совместной работы apache и mod_rpaf можно найти здесь. http://nginx.info/index.pl/ru/articles
Поскольку модуль 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;
...

3. Замечания по интеграции в дистрибутив
* 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 и поправил его под собственные нужды, возможно не везде идеологически правильно, но работоспособно!

http://vsftpd.beasts.org/

#!/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

# Заключение
Комплект из apache и nginx работает на моем сервере уже пару дней, без каких либо проблем.

http://sysoev.ru/
http://sysoev.ru/nginx/docs/
Ответ на любой из возникших у меня вопросов я смог найти на странице Игоря Сысоева в разделе документации nginx.

Категория: Интересные статьи | Просмотров: 3016