Моя текущая установка включает брандмауэр pfSense, порт которого перенаправляет общедоступный трафик глобальной сети на внутренний IP-адрес NAT.
Пример:
Это работает должным образом, трафик перенаправляется правильно. Проблема, с которой я столкнулся, заключается в том, что я вижу локальный IP-адрес (т.е. IP-адрес маршрутизатора pfSense, в данном случае 192.168.1.1) в журналах Nginx.
Я провел поиск, и множество статей предлагают использовать модуль real_ip и установить заголовок X-Forwarded-For, но это не работает.
Примечания:
Как мне написать RewriteRule
, которое сначала проверяет, существует ли запрошенный файл, а если нет, перенаправляет на корневую страницу:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/(.*)" "/" [L]
Например
http://example.com/not_existing_file
следует перенаправить на http://example.com
.
Однако это не работает. Что здесь не так?
RewriteCond% {REQUEST_FILENAME}! -F RewriteRule "^ / (. *)" "/" [L]
Ваше условие , проверяющее, что запрос не отображается в существующий файл, кажется правильным. Однако ваше RewriteRule
не перенаправляет , вместо этого внутренне перезаписывает запрос. Также может возникнуть цикл перезаписи (ошибка 500)?
Попробуйте вместо этого следующее:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/. / [R=302,L]
Здесь требуется флаг R
для запуска внешнего перенаправления . Это приведет к перенаправлению только /
, а не /
, как в исходном коде.
Измените 302
(временное) перенаправление на 301
(постоянно), если вы уверены, что все работает нормально - если это то, что требуется. Облегчает тестирование, поскольку в противном случае файлы 301 кэшируются жестко браузером.
Это также предполагает, что это находится в конфигурации основного сервера, а не в .htaccess
или
раздел.