Использование nginx как прокси в среде OpenVZ
Архитектура: все http (https) запросы направляются в VE proxy на котором nginx распределяет запросы в соответствующие VE веб-сервера.
Настройка VE proxy
В VE прокси должны быть установлен nginx.
Главный конфигурационный файл nginx:
user nginx nginx;
# количество рабочих процессов, можно увеличить при большом количестве сайтов
worker_processes 2;
error_log /var/log/nginx/error_log error;
events {
worker_connections 8192;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
client_header_timeout 10m;
client_body_timeout 10m;
send_timeout 10m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 75 20;
ignore_invalid_headers on;
# При большом траффике стоит уменьшеть логирование
access_log off;
log_not_found off;
# Ограничение загрузки данных на сервер в 1G
client_max_body_size 1000m;
# Ожидание ответа от прокси 5 минут
proxy_read_timeout 300;
# отдавать ответ клиенту сразу без буферезации
# на прокси (фроненде) нет смысла в буферезации
proxy_buffering off;
# расположение конфиг файлов хостов
include /etc/nginx/sites-enabled/*;
}
Все файлы конфигурации виртуальных хостов размещаются в /etc/nginx/sites-available.
Шаблонный файл виртуального хоста:
server {
listen *:80;
# обрабатывать все запросы на имя домена mysite.com www.mysite.com any.mysite.com и т.п.
server_name .mysite.com;
location / {
# проксировать запрос в VE по адресу 10.0.1.22
proxy_pass http://10.0.1.22;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Добавление доступных хостов в активные:
ln -s /etc/nginx/sites-available/mysite.com_vhost.conf /etc/nginx/sites-enabled/120_mysite.com_vhost.conf
В примере цифра 120 означает номер VE, это не обязательно, но может быть полезно
После всех изменений в конфигах необходимо перезагрузить nginx:
/etc/init.d/nginx reload
Настройка веб-серверов VE
Если в VE в качестве веб сервера используется nginx то в его конфиге нужно добавить:
http {
...
# определение настоящего IP с которого пришёл запрос
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Real-IP;
...
}
Настройка фаерволла
На HN необходимо настроить переброс запросов из внешней сети на порты 80 и 443 в VE proxy.
Для этого можно использовать следующие правила для iptables:
#!/bin/bash
IPT="/sbin/iptables"
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t mangle -F
VPS_LAN="10.0.0.0/8" # сеть VPS
WAN1_IF="eth0" # интерфейс на реальной машине (HN) для внешнего выхода
WAN1_IP="1.1.1.1" # основной IP на HN
VPS_PROXY="10.0.1.10" # ip VE proxy
...
$IPT -t nat -A PREROUTING -p tcp -d ${WAN1_IP} --dport 80 -i ${WAN1_IF} -j DNAT --to-destination ${VPS_PROXY}:80
$IPT -t nat -A PREROUTING -p tcp -d ${WAN1_IP} --dport 443 -i ${WAN1_IF} -j DNAT --to-destination ${VPS_PROXY}:443
...
Обсуждение