#Симптом и границы применимости
Когда сайт работает за CDN или балансировщиком, веб-сервер видит TCP-соединение от прокси. Восстановление IP возможно только при корректных доверенных заголовках; без ограничения источников злоумышленник сможет подменять адрес.
Эта инструкция относится к конкретному сайту в панели управления хостингом, когда его обслуживают Nginx, Apache, PHP-FPM или их сочетание. Названия разделов и доступность SSH зависят от установленной панели и прав пользователя; шаги, которых нет в вашем интерфейсе, выполняет администратор сервера.
#Возможные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не настроен realip/remoteipВ журнале все посетители представлены одним IP промежуточного узла | Внешние адреса видны в доверенном заголовке прокси | Настроить доверенный список прокси |
| Заголовок не передаётсяНужное поле отсутствует на границе между Nginx и Apache | Внутренний Apache видит лишь адрес Nginx | Проверить proxy_set_header и последовательность прокси |
| Неверный порядок доверияВ списке доверены лишние сети или все клиенты | IP легко подменяется через X-Forwarded-For | Ограничить доверие только адресами своих прокси |
#Пошаговая диагностика и исправление
- Определите реальную цепочку соединенийНарисуйте путь: браузер → CDN/балансировщик → Nginx → Apache/PHP, если они присутствуют. В панели проверьте, кто принимает внешний 443. Не применяйте настройки CDN, если сайт доступен напрямую из интернета.
- Снимите безопасный контрольный журналС собственного устройства откройте тестовую страницу один раз и запишите внешний IP, время и запись access.log. Убедитесь, что наблюдаемый адрес действительно прокси; не публикуйте журналы с личными данными.
- Проверьте поддержку модулейВ Nginx ищите наличие realip_module и используемые real_ip_header / set_real_ip_from; в Apache проверьте mod_remoteip. Если панель генерирует конфигурацию, меняйте её только через поддерживаемые поля.Linux · Терминал (Bash)КомандаSSH, без привилегий в типовой установке. Если сборка динамическая, одного grep недостаточно: изучите загружаемые модули.
nginx -V 2>&1 | grep -o http_realip_module
- Ограничьте доверенные проксиУкажите точные IP/подсети реальных прокси в set_real_ip_from или RemoteIPTrustedProxy. Заголовки X-Forwarded-For / X-Real-IP должны поступать от контролируемого промежуточного узла. Никогда не задавайте доверие ко всем адресам Интернета.
- Сохраните корректную передачу полейЕсли есть внутренний Apache, проверьте, что Nginx передаёт правильный адрес дальше; для нескольких прокси потребуется учитывать их порядок. Не объединяйте proxy_protocol с обычным HTTP-заголовком без согласованной конфигурации обеих сторон.
- Проверьте синтаксис и выполните штатное применениеСохраните резервную копию конфигурации и используйте тест выбранного веб-сервера. После успешного теста примените настройки через панель или правильную службу, не меняя весь сайт одновременно.
- SSH с правами администратора; тест только для NginxLinux · Терминал (Bash)КомандаНужен sudoSSH с правами администратора; тест только для Nginx. Для Apache проверяйте apachectl -t.
sudo nginx -t
- Проверьте невозможность подделкиПроверьте, что журнал показывает ожидаемый IP реального клиента за прокси. Отдельно с разрешённой тестовой машины попробуйте запрос с произвольным X-Forwarded-For к прямому интерфейсу: такой заголовок не должен подменять IP. Если подмена возможна, откатите конфигурацию.
#Проверка результата
В журналах появляется корректный адрес клиента только от доверенного прокси, а прямой запрос с поддельным заголовком не изменяет идентификацию посетителя.
#Если проблема осталась
Если адрес остаётся адресом CDN, проверьте актуальный список IP CDN и название передаваемого им заголовка; не доверяйте пользовательскому заголовку без контроля источника.
#Безопасный откат
Если после изменения ошибка усилилась, верните сохранённое значение только изменённого параметра и повторно проверьте конфигурацию используемого веб-сервера до применения. Не возвращайте всю базу или весь сервер из резервной копии, если достаточно откатить одну настройку. При отсутствии доступа к нужному уровню обратитесь к администратору с точными временем, адресом, кодом ответа и обезличенными фрагментами журналов.