Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wptelegram domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/u632055791/domains/itg.az/public_html/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wp-pagenavi domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/u632055791/domains/itg.az/public_html/wp-includes/functions.php on line 6114

Notice: Функция _load_textdomain_just_in_time вызвана неправильно. Загрузка перевода для домена kirki была запущена слишком рано. Обычно это индикатор того, что какой-то код в плагине или теме запускается слишком рано. Переводы должны загружаться при выполнении действия init или позже. Дополнительную информацию можно найти на странице «Отладка в WordPress». (Это сообщение было добавлено в версии 6.7.0.) in /home/u632055791/domains/itg.az/public_html/wp-includes/functions.php on line 6114
FreeBSD: настройка и конфигурирование NGINX + Apache

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+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)

 

Значит не подгружен модуль ядра accf_http.

Проверить можно командой (FreeBSD):

# kldstat | grep accf_http

Если модуль отсутствует — загрузим его командой:

# kldload accf_http

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

# kldload accf_http
kldload: can’t load accf_http: Operation not permitted

Обратитесь к провайдеру, у которого вы брали ваш VPS.

И проверим ещё раз:

# kldstat | grep accf_http
5    1 0xc3d8f000 2000     accf_http.ko

Добавим его в загрузку вместе с системой. Для этого в файл /boot/loader.conf добавляем:

accf_http_load=»YES»

 

Итак — перестартуем 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»

На этом настройку можно считать завершённой.