Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
setup_proxy [13.02.2017 17:40] phantom [Настройка nginx] |
setup_proxy [13.07.2017 17:26] (текущий) phantom [Настройка proxy сервера] |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
**Настройка proxy сервера необходима только если используется вариант "proxy у оператора".** | **Настройка proxy сервера необходима только если используется вариант "proxy у оператора".** | ||
+ | |||
+ | **Начальную настройку и тестирование работы proxy сервера, как правило, осуществляют наши специалисты.** | ||
+ | |||
+ | **Примеры конфигурации, приведенные ниже, являются лишь примерами. Конфигурация proxy сервера может отличаться в ту или иную сторону в зависимости от специфики клиента.** | ||
+ | |||
+ | **Обновления и рекомендации для конфигурации proxy сервера публикуются в нашей рассылке, которую получают технические специалисты (контакты) указанные в Личном Кабинете.** | ||
+ | |||
===== Подготовка ===== | ===== Подготовка ===== | ||
Строка 28: | Строка 35: | ||
<code> | <code> | ||
# Перенаправлять HTTP трафик для сетей из списка полной блокировки на отдельный виртуальный сервер | # Перенаправлять HTTP трафик для сетей из списка полной блокировки на отдельный виртуальный сервер | ||
- | iptables -t nat -A PREROUTING -i eth0 -m set --match-set BLOCK-IP dst -p tcp --dport 80 -j REDIRECT --to-port 8000 | + | iptables -t nat -A PREROUTING -i eth0 -m set --match-set BLOCK-IP dst -p tcp --dport 80 -j REDIRECT --to-port 9000 |
# Перенаправлять HTTP трафик для пар IP:PORT подлежащих блокировке на отдельный виртуальный сервер | # Перенаправлять HTTP трафик для пар IP:PORT подлежащих блокировке на отдельный виртуальный сервер | ||
- | iptables -t nat -A PREROUTING -i eth0 -p tcp -m set --match-set CUSTOM-IP-PORT dst,dst -j REDIRECT --to-port 8000 | + | iptables -t nat -A PREROUTING -i eth0 -p tcp -m set --match-set CUSTOM-IP-PORT dst,dst -j REDIRECT --to-port 9000 |
# Перенаправлять весь HTTP/HTTPS трафик на локальный порт | # Перенаправлять весь HTTP/HTTPS трафик на локальный порт | ||
Строка 52: | Строка 59: | ||
Мы рекомендуем использовать nginx с поддержкой lua и headers_more. Ссылки на готовые пакеты находятся в конце текущего раздела. | Мы рекомендуем использовать nginx с поддержкой lua и headers_more. Ссылки на готовые пакеты находятся в конце текущего раздела. | ||
- | Настройки DNS резолвера (необходимо использовать DNS сервера без RPZ) | + | DNS резолвер должен использовать DNS сервера без RPZ. |
- | + | ||
- | <code> | + | |
- | resolver 8.8.8.8 8.8.4.4; | + | |
- | resolver_timeout 5s; | + | |
- | </code> | + | |
- | + | ||
- | Конфигурация основного виртуального сервера: | + | |
- | + | ||
- | <code> | + | |
- | server { | + | |
- | listen 0.0.0.0; | + | |
- | server_name ~^.*$; | + | |
- | + | ||
- | access_log /var/log/nginx/proxy_access_log main; | + | |
- | error_log /var/log/nginx/proxy_error_log debug; | + | |
- | + | ||
- | root /var/www/cyberfilter; | + | |
- | + | ||
- | error_page 404 = @check; | + | |
- | + | ||
- | location / { | + | |
- | internal; | + | |
- | recursive_error_pages on; | + | |
- | } | + | |
- | + | ||
- | location /redirects/block/ { | + | |
- | internal; | + | |
- | set $action "block"; | + | |
- | set $check_type $upstream_http_x_check_type; | + | |
- | set $unique_id $upstream_http_x_unique_id; | + | |
- | set $target_ip $upstream_http_x_target_ip; | + | |
- | recursive_error_pages on; | + | |
- | error_page 503 =503 /pages/block.html; | + | |
- | return 503; | + | |
- | } | + | |
- | + | ||
- | location /redirects/unknown/ { | + | |
- | internal; | + | |
- | set $action "unknown"; | + | |
- | set $check_type $upstream_http_x_check_type; | + | |
- | set $unique_id $upstream_http_x_unique_id; | + | |
- | set $target_ip $upstream_http_x_target_ip; | + | |
- | recursive_error_pages on; | + | |
- | error_page 503 =503 /pages/block.html; | + | |
- | return 503; | + | |
- | } | + | |
- | + | ||
- | location /redirects/denied/ { | + | |
- | internal; | + | |
- | set $action "denied"; | + | |
- | set $check_type $upstream_http_x_check_type; | + | |
- | set $unique_id $upstream_http_x_unique_id; | + | |
- | set $target_ip $upstream_http_x_target_ip; | + | |
- | recursive_error_pages on; | + | |
- | error_page 403 =403 /pages/denied.html; | + | |
- | return 403; | + | |
- | } | + | |
- | + | ||
- | location /redirects/error/ { | + | |
- | internal; | + | |
- | set $action "error"; | + | |
- | set $check_type $upstream_http_x_check_type; | + | |
- | set $unique_id $upstream_http_x_unique_id; | + | |
- | set $target_ip $upstream_http_x_target_ip; | + | |
- | recursive_error_pages on; | + | |
- | error_page 500 =500 /pages/error.html; | + | |
- | return 500; | + | |
- | } | + | |
- | + | ||
- | location /redirects/notfound/ { | + | |
- | internal; | + | |
- | set $action "notfound"; | + | |
- | set $check_type $upstream_http_x_check_type; | + | |
- | set $unique_id $upstream_http_x_unique_id; | + | |
- | set $target_ip $upstream_http_x_target_ip; | + | |
- | recursive_error_pages on; | + | |
- | error_page 404 =404 /pages/notfound.html; | + | |
- | return 404; | + | |
- | } | + | |
- | + | ||
- | location /redirects/config/ { | + | |
- | internal; | + | |
- | set $action "config"; | + | |
- | set $check_type $upstream_http_x_check_type; | + | |
- | set $unique_id $upstream_http_x_unique_id; | + | |
- | set $target_ip $upstream_http_x_target_ip; | + | |
- | recursive_error_pages on; | + | |
- | error_page 500 =500 /pages/config.html; | + | |
- | return 500; | + | |
- | } | + | |
- | + | ||
- | location /redirects/proxy/ { | + | |
- | internal; | + | |
- | set $action "proxy"; | + | |
- | set $check_type $upstream_http_x_check_type; | + | |
- | set $unique_id $upstream_http_x_unique_id; | + | |
- | set $target_ip $upstream_http_x_target_ip; | + | |
- | proxy_pass http://$host$request_uri; | + | |
- | proxy_buffering off; | + | |
- | proxy_cache off; | + | |
- | proxy_set_header Host $host; | + | |
- | proxy_http_version 1.1; | + | |
- | } | + | |
- | + | ||
- | location @check { | + | |
- | set $action "error"; | + | |
- | set $check_type "api"; | + | |
- | set $unique_id "${pid}-${connection}-${msec}"; | + | |
- | set $target_ip ""; | + | |
- | proxy_pass http://api-proxy.cyberfilter.ru$request_uri; | + | |
- | proxy_buffering off; | + | |
- | proxy_cache off; | + | |
- | proxy_set_header Host $host; | + | |
- | proxy_set_header X-Real-IP $remote_addr; | + | |
- | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | + | |
- | proxy_set_header X-Request-Id $unique_id; | + | |
- | + | ||
- | proxy_set_header Content-Length ""; | + | |
- | proxy_pass_request_body off; | + | |
- | } | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | Конфигурация дополнительного (для запросов на сети с полной блокировкой и порты отличные от HTTP/HTTPS) виртуального сервера: | + | |
- | + | ||
- | <code> | + | |
- | server { | + | |
- | listen 0.0.0.0:8000; | + | |
- | server_name ~^.*$; | + | |
- | + | ||
- | access_log /var/log/nginx/block_access_log main; | + | |
- | error_log /var/log/nginx/block_error_log debug; | + | |
- | + | ||
- | root /var/www/cyberfilter; | + | |
- | + | ||
- | error_page 404 = @block; | + | |
- | + | ||
- | location / { | + | |
- | internal; | + | |
- | recursive_error_pages on; | + | |
- | } | + | |
- | + | ||
- | location @block { | + | |
- | set $action "block"; | + | |
- | set $check_type "network"; | + | |
- | set $unique_id "${pid}-${connection}-${msec}"; | + | |
- | set $target_ip ""; | + | |
- | + | ||
- | error_page 503 =503 /pages/block.html; | + | |
- | return 503; | + | |
- | } | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | Дополнительное логирование: | + | |
- | + | ||
- | <code> | + | |
- | log_format main | + | |
- | '$remote_addr - $remote_user [$time_local] ' | + | |
- | '"$unique_id" "$check_type" "$action" "$target_ip" ' | + | |
- | '"$host" "$request" $status $bytes_sent ' | + | |
- | '"$http_referer" "$http_user_agent" ' | + | |
- | '"$gzip_ratio"'; | + | |
- | </code> | + | |
- | Далее необходимо в каталоге /var/www/cyberfilter/pages/ разместить страницы с сообщениями для пользователей: | + | В каталоге /var/www/cyberfilter/pages/ необходимо разместить страницы с сообщениями для пользователей: |
* block.html - водится при попытке доступа на запрещенный ресурс | * block.html - водится при попытке доступа на запрещенный ресурс | ||
Строка 226: | Строка 69: | ||
* notfound.html - выводится, если запрашиваемый ресурс не найден в DNS | * notfound.html - выводится, если запрашиваемый ресурс не найден в DNS | ||
- | Архив с настройками и со страницами сообщений: {{:proxy_config.tgz1|}}\\ | + | Архив с настройками и со страницами сообщений: {{:proxy_config.tgz|}}\\ |
Готовый RPM nginx 1.10.3 для CentOS7 с поддержкой lua и headers_more: {{:nginx-1.10.3-1.el7.centos.ngx.x86_64.rpm|}} | Готовый RPM nginx 1.10.3 для CentOS7 с поддержкой lua и headers_more: {{:nginx-1.10.3-1.el7.centos.ngx.x86_64.rpm|}} | ||