Использование nginx как прокси в среде OpenVZ
Архитектура: все http (https) запросы направляются в VE proxy на котором nginx распределяет запросы в соответствующие VE веб-сервера.
Настройка VE proxy
В VE прокси должны быть установлен nginx.
Главный конфигурационный файл nginx:
/etc/nginx/nginx.conf
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.
Шаблонный файл виртуального хоста:
/etc/nginx/sites-available/000_template_vhost.conf
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 то в его конфиге нужно добавить:
/etc/nginx/nginx.conf
http { ... # определение настоящего IP с которого пришёл запрос set_real_ip_from 10.0.0.0/8; real_ip_header X-Real-IP; ... }
Настройка фаерволла
На HN необходимо настроить переброс запросов из внешней сети на порты 80 и 443 в VE proxy.
Для этого можно использовать следующие правила для iptables:
firewall.rule
#!/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 ...
Обсуждение