[[ Использование nginx как прокси в среде OpenVZ ]]

Использование 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
...

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
24​ +8 = 
 
howto/openvz/nginx_proxy.txt · Последнее изменение: 2022/08/31 14:53 — 127.0.0.1
Gentoo Linux Gentoo Linux Driven by DokuWiki