Nginx и Apache в FreeBSD
29.06.2009, рубрики: FreeBSD | Теги: apache, nginx, RPAF | 79 комментариев »Установка Apache и Nginx:
Ставим Apache:
1 2 3 | cd /usr/ports/www/apache2 make config make install clean |
Ставим Nginx:
1 2 3 | cd /usr/ports/www/nginx make config make install clean |
Настройка Nginx
Отредактируем файл /usr/local/etc/nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | # пользователь и группа от которого запускается процесс user www www; # 3 рабочих процесса worker_processes 3; # Лог для ошибок error_log logs/error.log; events { # максимум рабочих соединений worker_connections 1024; # Метод обработки соединений # kqueue — эффективный метод, используемый во FreeBSD # Подробнее http://sysoev.ru/nginx/docs/events.html use kqueue; } http { # Подключаем таблицу mime include mime.types; # mime-тип по умолчанию default_type application/octet-stream; # Формат лог файла #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; # Лог доступа всего веб-сервера #access_log logs/access.log main; # Директива задаёт таймаут при чтении заголовка запроса клиента client_header_timeout 3m; # Директива задаёт таймаут при чтении тела запроса клиента client_body_timeout 3m; # Директива задаёт таймаут при передаче ответа клиенту send_timeout 3m; # Директива задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера keepalive_timeout 2m; # Директива разрешает или запрещает использовать sendfile() sendfile on; # Директива разрешает или запрещает использовать опции TCP_NOPUSH во FreeBSD # Подробнее http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#keepalive_timeout #tcp_nopush on; # Директива задаёт размер буфера для чтения заголовка запроса клиента #client_header_buffer_size 1k; # Директива задаёт максимальное число и размер буферов для чтения большого заголовка запроса клиента #large_client_header_buffers 4 4k; # Модуль позволяет описывать группы серверов, которые могут использоваться # в директивах proxy_pass и fastcgi_pass. upstream backend { # Директива задаёт имя и параметры сервера. Обратите внимание, мы будем # использовать имя "backend" в директиве proxy_pass server 127.0.0.1:88; } server { # Слушать 80 порт listen 80; # Использовать следующие хосты server_name free-pc-help.ru www.free-pc-help.ru; # Кодировка #charset koi8-r; # Лог доступа для конкретного виртуального хоста #access_log logs/host.access.log main; # Максимальный размер тела запроса клиента client_max_body_size 101M; # Разруливаем статику и динамку location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ { root /home/free-pc-help/free-pc-help.ru; } location ~ /\.ht { deny all; } location / { proxy_pass http://backend/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_connect_timeout 120; proxy_send_timeout 120; proxy_read_timeout 180; } # Адрес страницы 404-ой ошибки, далее все ошибки по аналогии #error_page 404 /404.html; # Аналогично 404, только при этом назначается псевдоним 50x.html для всех # 50x-тых ошибок и далее перенаправляется все на "root" error_page 500 502 503 504 /50x.html; location = /50x.html { # корневая директория root /usr/local/www/nginx-dist; } } } |
После конфигурации необходимо перезагрузить Nginx
1 | /usr/local/etc/rc.d/nginx restart |
Настройка Apache
Редактируем файл /usr/local/etc/apache2/httpd.conf
1 2 | # Меняем порт с 80 на 88 Listen 88 |
Тоже самое делаем и в httpd-vhosts.conf для ваших хостов.
Если у вас появляется следующая ошибка:
1 2 | [warn] (2) No such file or directory: Failed to enable the ‘httpready’ Accept Filter |
то вам следует подгрузить модуль
1 | # kldload accf_http |
Чтобы этот модуль грузился автоматически, следует добавить в
/boot/loader.conf
строчку:
1 | accf_http_load=”YES” |
Установка и настройка RPAF или даешь верный REMOTE_ADDR!
Так как у нас появился в цепи дополнительный элемент в виде фронтенд-сервера, то теперь в REMOTE_ADDR у нас не пользовательский IP, а IP-адрес фронтенд-сервера (на котором расположен Nginx). Поэтому на помощь приходит RPAF, он берет тело заголовка X-Forwarded-For, присланного от фронтенда и формирует на бекенде из него REMOTE_ADDR.
Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP!
Устанавливаем модуль RPAF
1 2 | cd /usr/ports/www/mod_rpaf2 make install clean |
mod_rpaf2 — для apache2, а для первого нужно mod_rpaf
Настраиваем RPAF, редактируем /usr/local/etc/apache2/httpd.conf, добавляем в конец файла:
1 2 3 4 5 6 7 8 | # Включаем модуль RPAFenable On # Доводит до ума X-Host RPAFsethostname On # Адрес фронтенда (nginx) RPAFproxy_ips 127.0.0.1 # Имя отправляемого заголовка RPAFheader X-Forwarded-For |
После конфигурации необходимо перезагрузить Apache
1 | apachectl restart |
тра та та
Спасибо за трансфер REMOTE_ADDR.
Из-за того что не настроил у себя — похерилась статистика...