FreeBSD: настройка и конфигурирование NGINX + Apache

Настройка выполняется на:

# uname -v
FreeBSD 9.1-PRERELEASE

Apache:

# httpd -v
Server version: Apache/2.2.24 (FreeBSD)
Server built: Apr 8 2013 10:01:39

Предполагается, что Apache уже установлен и настроен по статье FreeBSD: Apache + mpm_worker + PHP + mod_fcgid или FreeBSD: Apache+MySQL+PHP (LAMP) + phpMyAdmin.

Установим NGINX:

# cd /usr/ports/www/nginx && make config-recursive

Описание опций:
[ ] DEBUG Режим отладки. Полезно на стадии тестирования и отладки конфигурации
[ ] IPV6 Поддержка протокола IP 6-й версии
[ ] GOOGLE_PERFTOOLS Включить поддержку google-perftools
[X] HTTP_MODULE Включение функций HTTP сервера
[ ] HTTP_ACCESSKEY_MODULE Модуль для генерации защищенных ссылок
[ ] HTTP_ADDITION_MODULE Фильтр, добавляющий текст до и после ответа
[ ] HTTP_DAV_MODULE Модуль для поддержки WebDAV методов PUT, DELETE, MKCOL, COPY и MOVE
[ ] HTTP_EVAL_MODULE Разбирает ответ проксируемого сервера или memcached сервера на переменные
[ ] HTTP_FANCYINDEX_MODULE Модуль позволяющий строить листинг файлов с добавлением стилей
[ ] HTTP_FLV_MODULE Модуль для стриминга флэш-видео в формате flv
[ ] HTTP_GZIP_STATIC_MODULE Модуль для отдачи клиенту предварительно сжатого файла с тем-же именем но с расширением «.gz».
[ ] HTTP_MOGILEFS_MODULE Поддержка файловой системы mogilefs.
[ ] HTTP_PERL_MODULE Встроенный Perl.
[ ] HTTP_RANDOM_INDEX_MODULE Модуль, выдает в качестве индексного файла, случайный файл из каталога.
[ ] HTTP_REALIP_MODULE Модуль для замены адреса клиента в заголовке.
[ ] HTTP_RESPONSE_MODULE Модуль для отдачи произвольного текста, прописанного в директивы модуля.
[X] HTTP_REWRITE_MODULE Модуль для изменения URI с помощью регулярных выражений, выдачи редиректов и выбора конфигурации в зависимости от переменных.
[ ] HTTP_SECURE_LINK_MODULE Модуль для проверки правильности запрошенной ссылки.
[ ] HTTP_SSL_MODULE Модуль поддержки SSL.
[X] HTTP_STATUS_MODULE Модуль, показывающий информационную страницу о текущем статусе Nginx.
[ ] HTTP_SUB_MODULE Модуль для замены в ответе, одной строки, на другую.
[ ] HTTP_UPLOAD_MODULE Модуль для аплоадов multipart/form-data.
[ ] HTTP_UPLOAD_PROGRESS В силу особенностей реализации nginx, без данного модуля не получится организовать показ статуса загрузки файлов.
[ ] HTTP_UPSTREAM_FAIR Модуль для балансировки нагрузки. Отправляет входящие запросы на наименее загруженный бакэнд.
[ ] HTTP_UPSTREAM_KEEPALIVE Поддержка keepalive- соединений с бакэндами, в том числе memcached.
[ ] HTTP_XSLT_MODULE XSLT фильтр.
[ ] HTTP_ZIP_MODULE Модуль для создания zip архивов «на лету».
[ ] MAIL_MODULE Модуль для работы nGinx в качестве почтового прокси сервера.
[ ] MAIL_IMAP_MODULE Модуль IMAP4 прокси.
[ ] MAIL_POP3_MODULE Модуль POP3 прокси.
[ ] MAIL_SMTP_MODULE Модуль SMTP прокси.
[ ] MAIL_SSL_MODULE Модуль для поддержки SSL/TLS для POP3/IMAP/SMTP.
[ ] PASSENGER_MODULE Аналог апачевского mod_rails ( Phusion Passenge ).
[X] WWW Стандартный набор HTML файлов для проверки.

Оставляем всё по-умолчанию, жмём Enter.

Устанавливаем:

# make BATCH=yes install clean

Редактируем файл конфигурации сервера Apache — /usr/local/etc/apache22/httpd.conf. В нём меняем такие параметры:

Listen 127.0.0.1:8080

и

NameVirtualHost 127.0.0.1:8080

Т.е. теперь Apache будет слушать только локальный адрес 127.0.0.1 и только порт 8080.

Теоретически (точнее — раньше, на другом сервере, так и было) можно назначить и тот же порт 80, на котором будет работать сам NGINX. Но на практике — это может привести к сложностям во время настройки. Кроме того, удобнее отслеживать источник проблем, в случае их возникновения, когда оба сервера работают на разных портах.

В случае ошибки такого вида:

[Mon Apr 08 12:55:17 2013] [warn] NameVirtualHost 127.0.0.1:80 has no VirtualHosts

Проверьте конфигурацию VirtualHost-ов, например — в файле /usr/local/etc/apache22/extra/httpd-vhosts.conf — для виртуалхостов так же необходимо установить адрес 127.0.0.1:8080.

Проверяем верность конфиграционных файлов Apache:

# apachectl configtest
Syntax OK

Если всё ОК — то перезагружаем его:

# apachectl restart

Переходим к настройке NGINX.

Главный конфигурационный файл находится в каталоге /usr/local/etc/nginx/ — nginx.conf.

Приводим его к такому виду:

user www www;
worker_processes 1;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
use kqueue;
}
http {
include mime.types;
default_type application/octet-stream;

client_header_timeout 300;
client_header_buffer_size 16k;
client_max_body_size 8m;
client_body_buffer_size 256k;
client_body_timeout 300;

proxy_read_timeout 360;

sendfile on;
tcp_nopush on;
tcp_nodelay on;

client_body_temp_path /var/nginx/client_body_temp;
proxy_temp_path /var/nginx/proxy_temp;

limit_conn_zone $binary_remote_addr zone=http:2m;

#————————————-

server {

listen 178.***.***.114:80 default accept_filter=httpready;
server_name akira;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;

client_body_temp_path /var/nginx/client_body_temp;
proxy_temp_path /var/nginx/proxy_temp;
}
}
#————————————-

server {
listen 178.***.***.114:8080;
server_name www.domain.co.ua domain.co.ua;
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|js|swf|avi|mp3|flv|mpeg)$ {
root /usr/local/www/users/domain/domain.co.ua;
try_files $uri @apache;
}
location ~ /\.ht {
deny all;
}
location / {
limit_conn http 5;
proxy_pass http://127.0.0.1/;
proxy_redirect off;
proxy_set_header Connection close;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
proxy_set_header X-Forwarded-Protocol $scheme;
}
location @apache {
limit_conn http 100;
proxy_pass http://127.0.0.1;
proxy_redirect off;
proxy_set_header Connection close;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
proxy_set_header X-Forwarded-Protocol $scheme;
}
}
#————————————-
}

В данном примере описан только один виртуалхост — domain.co.ua. Остальные параметры можно посмотреть на оф. странице NGINX. Для каждого обслуживаемого NGINX-ом виртуалхоста необходимо добавлять свой аналогичный блок директив.

Проверяем на ошибки:

# nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

И перезапускаем NGINX:

# service nginx onerestart

В случае ошибки такого вида:

nginx: [alert] setsockopt(SO_ACCEPTFILTER, «httpready») for 178.***.***.114:80 failed, ignored (2: No such file or directory)

Ответ можно найти в статье NGINX: «httpready» failed, ignored: No such file or directory.

Итак — перестартуем NGINX:

# service nginx onerestart
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Stopping nginx.
Waiting for PIDS: 14539.
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Starting nginx.

Проверяем:

# ps aux | grep nginx
root 34423 0.0 0.0 27068 4476 ?? IsJ 1:18PM 0:00.00 nginx: master process /usr/local/sbin/nginx
www 34424 0.0 0.0 27068 5904 ?? IJ 1:18PM 0:00.00 nginx: worker process (nginx)
root 38826 0.0 0.0 10180 768 11 LL+J 1:20PM 0:00.00 grep nginx

И проверим какие порты прослушиваются:

# netstat -Lan | grep 80
tcp4 0/0/128 178.***.***.114.80

Последний штрих — установка модуля RPAF для Apache, который позволит ему правильно определять IP пользователей.

Устанавливаем:

# cd /usr/ports/www/mod_rpaf2 && make install clean

После установки редактируем файл /usr/local/etc/apache22/httpd.conf и в него добавляем строки:

LoadModule rpaf_module libexec/apache22/mod_rpaf2.so

И ниже:

Timeout 128
KeepAlive Off
UseCanonicalName Off
HostnameLookups Off
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 178.***.***.114
RPAFheader X-Real-IP

В строке RPAFproxy_ips указываем внешний IP сервера, на котором сейчас работает NGINX.

Проверяем:

# apachectl configtest
Syntax OK

Перезагружаем:

# apachectl restart

Проверим как работает модуль. В файле лога старые записи выглядят как:

178.***.***.114 — — [08/Apr/2013:13:47:03 +0000] «GET /index.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.0″ 200 2524 «http://domain.org.ua/» «Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0″

Т.е. вместо IP клиента — Apache получает адрес самого сервера. После добавления модуля:

194.***.***.214 — — [08/Apr/2013:14:06:24 +0000] «GET /index.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 HTTP/1.0″ 200 2146 «http://domain.org.ua/» «Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0″

Добавляем NGINX в автозапуск — редактируем файл /etc/rc.conf:

nginx_enable=»YES»

На этом настройку можно считать завершённой.
По материалам: rtfm.co.ua/freebsd-nastrojka-i-konfigurirovanie-nginx-apache/

Запись опубликована в рубрике *CentOS, *Web, FreeBSD. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91