Порой бывает необходимо сделать цепочку nginx->nginx->apache. При такой структуре маршрутизации теряется реальный IP клиента(пользователя). Предлагаемое решение избавит от этой проблемы. Используйте дополнительную переменную для передачи реального IP.
Основной nginx (первичный):
location / {
proxy_pass http://IP:80; #адрес где стоит второй nginx
proxy_read_timeout 60;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header realip $remote_addr; # сохраним IP посетителя в переменную
}
Второй nginx:
location / {
proxy_pass http://IP:81; #IP:порт с apache
proxy_read_timeout 60;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $http_realip;
proxy_set_header X-Forwarded-For $http_realip;
proxy_set_header realip «»; # удалим переменную
}
|
|
Многие для защиты и ускорения работы своего ресурса пользуются системой CloudFlare, однако при её использовании в логи веб-сервера пишутся IP адреса сети CloudFlare, а не настоящие IP пользователей. В данном HOWTO мы рассмотрим как это исправить.
Интро
CloudFlare — это распределённая по всему миру CDN (content delivery network), предоставляющая функции ускорения загрузки пользовательских сайтов за счёт кэширования и обеспечивающая фильтрацию трафика (на платных тарифных планах ещё и полноценную защиту от DDoS атак).
Для своей работы CloudFlare использует прокси-серверы, расположенные по всему миру, что скрывает настоящий IP, на котором располагается сервер.
Схема работы выглядит так: Клиент -> CloudFlare -> Сервер -> CloudFlare -> Клиент. Таким образом, в логах сервера вы увидите не реальный IP клиента, а IP одного из прокси-серверов CloudFlare. При этом CloudFlare передаёт настоящий IP-адрес клиента в отдельном HTTP-заголовке CF_CONNECTING_IP. Далее мы рассмотрим как настроить его обработку.
Настраиваем nginx (рекомендуемый способ) Если у вас VPS/VDS или выделенный сервер и есть права root, то самый лучший способ — настроить веб-сервер nginx на забор реального IP из специального заголовка, отправляемого CloudFlare.
Для начала создайте в каталоге /etc/nginx/ (по умолчанию) файл cloudflare (нужно установить владельца и группу root) и пропишите в него следующие строки:
set_real_ip_from 204.93.240.0/24;
set_real_ip_from 204.93.177.0/24;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
real_ip_header CF-Connecting-IP;
Свежие пулы IP-адресов CloudFlare можно найти на официальном сайте: IPv4 и IPv6.
Теперь откройте главный конфиг nginx — файл nginx.conf и в секции http {} укажите:
include cloudflare;
Всё, настройка завершена. Для вступления изменений в силу перезапустите веб-сервер nginx.
Теперь в случае если IP-адрес клиента совпадает с IP адресами CloudFlare, nginx будет брать настоящий IP из заголовка CF_CONNECTING_IP.
|
|
Возможно при
service httpd restart
Stopping httpd: [FAILED]
[FAILED]
В логах апача
Unable to open logs
Unable to open logs
Unable to open logs
Unable to open logs
Unable to open logs
Решение:
ulimit -n 400000 && service httpd start
Так же добавить увеличение лимитов в атозагрузку
|
|
server {
server_name domen1.ru;
listen 111.111.111;
location / {
proxy_pass http://222.222.222.222:80;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
111.111.111.111 IP который слушаем 222.222.222.222 IP с которого проксируем
|
|
iptables -t filter -A OUTUT -p tcp -d 173.194.70.17 -j DROP
iptables -t filter -A OUTUT -p tcp -d 173.194.70.18 -j DROP
iptables -t filter -A OUTUT -p tcp -d 173.194.70.19 -j DROP
iptables -t filter -A OUTUT -p tcp -d 173.194.70.83 -j DROP
Для снятия блокировки ( снимает все правила в iptables )
iptables -F
|
|
Смотрим лог mail.log в котором логируются письма
tail -n 1000 /var/log/php.mail.log | grep X-PHP
Видим в логе, что-то похожее на такое
X-PHP-Originating-Script: 750:accountSXu.php
X-PHP-Originating-Script: 750:accountSXu.php
X-PHP-Originating-Script: 750:accountSXu.php
X-PHP-Originating-Script: 750:accountSXu.php
X-PHP-Originating-Script: 750:accountSXu.php
X-PHP-Originating-Script: 750:accountSXu.php
X-PHP-Originating-Script: 750:accountSXu.php
X-PHP-Originating-Script: 750:accountSXu.php
Это означает, что пользователь 750 отправляет письма с помощью скрипта accountSXu.php
1. Ищем кто такой пользователь 750
cat /etc/passwd| grep 750
2. Ищем в его директории файл который спамит
find /var/www/user/data -name accountSXu.php (параметр может меняться, так как пользовательские данные могут быть в /home )
PROFIT! Удаляем скрипт и чистим почтовую очередь
|
|
Первым делом останавливаем Postfix, чтобы приостановить рассылку:
service postfix stop
Разбираемся с проблемой, ищем источник СПАМ-рассылки. После того, как источник проблемы будет обнаружен и устранен, очистим почтовую очередь (все равно полезного там ничего не будет):
postsuper -d ALL
Проверяем, действительно ли очередь сообщений очищена:
mailq
Самое время запустить Postfix:
service postfix start
|
|
Собственные страницы для реселлера.
Страница созданного домена:
Скопируем из /usr/local/ispmgr/etc/ папку www.skel в /var/РЕСЕЛЛЕР
Чтобы при создании аккаунта автоматически создавались нужные файлы:
Скопируем из /usr/local/ispmgr/etc/ папки home.skel в /var/РЕСЕЛЛЕР
|
|
При блокировке аккаунта появляется страница не о том, что аккаунт заблокирован, а стандартная страница Apache 2 Test Page powered by CentOS.
Удалить:
/etc/httpd/conf.d/welcome.conf
|
|
иногда бывает так, что надо не просто выхлопнуть какую-то убогую страницу, вроде как: "Ваш аккаунт заблокирован, дайте денег", а еще и выполнить при её генерации разные правильные вещи, говоря просто, сделать её более масштабируемой и при необходимости функциональной. С этой задачей вполне может справится язык программирования PHP. Для того чтобы научить страницу блокировки обрабатывать PHP в конфиг апача нужно добавить всего лишь эти несколько строк:
<Directory /usr/local/ispmgr/www/disabled>
AddType application/x-httpd-php .html
</Directory>
Которые и указывают на то, что к данной странице применим обработчик PHP.
|
|