Nginx и Apache в FreeBSD

29.06.2009, рубрики: FreeBSD | Теги: , , | 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

79 комментариев на запись “Nginx и Apache в FreeBSD”

  1. 1 Имя сказала в 12:56, 03.09.2010:

    тра та та

  2. 2 storm сказала в 22:02, 30.12.2011:

    Спасибо за трансфер REMOTE_ADDR.

    Из-за того что не настроил у себя — похерилась статистика...


Оставить комментарий