Вопрос или проблема
Nginx sub_filter не заменяет строку.
Конфигурация nginx:
location / {
proxy_pass https://internal.domain.tld:8081/phpmyadmin/;
rewrite ^/phpmyadmin/(.*) /$1;
proxy_set_header X-Forwarded-Path "https://serverfault.com/";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
# Перезапись внутренних перенаправлений
sub_filter_once off;
sub_filter '/phpmyadmin/' "https://serverfault.com/";
proxy_redirect /phpmyadmin/ /;
client_max_body_size 100M;
proxy_cookie_path /phpmyadmin/ /;
}
HTML, в котором это должно быть заменено:
<head>
...
<script data-cfasync="false" type="text/javascript">
// <![CDATA[
CommonParams.setAll({common_query:"lang=en",...is_https:true,rootPath:"/phpmyadmin/",...user:"root"});
var firstDayOfCalendar="0";
...
.
Ответ или решение
При возникновении проблемы с тем, что директива sub_filter
в Nginx не заменяет строку, важно обратить внимание на несколько ключевых аспектов конфигурации и окружения. Приведем их детальный обзор.
1. Проверка активизации модуля sub_filter
Прежде всего, необходимость убедиться в том, что модуль ngx_http_sub_module
, отвечающий за работу директивы sub_filter
, включен в вашу сборку Nginx. Это можно сделать, выполнив команду:
nginx -V
Ищите --with-http_sub_module
в выводе. Если модуль отсутствует, его необходимо скомпилировать и установить.
2. Настройка заголовков Content-Type
sub_filter
работает только с контентом, который включает в себя текстовые форматы, такие как HTML, текст и XML. Если приложение возвращает другой тип содержимого, например JSON или изображения, замена не будет выполняться. Убедитесь, что Content-Type
вашего ответа корректный (например, text/html
). Для этого можно добавить:
proxy_set_header Accept "text/html";
3. Правильность применения sub_filter
Ваша конфигурация требует некоторой коррекции. Убедитесь, что вы используете sub_filter
в контексте правильного пути и указываете охватываемую строку без ошибок. Ваш код имеет правильный синтаксис, но возможно не все строки, которые вы хотите изменить, охватываются. Попробуйте добавить дополнительные строки для проверки:
sub_filter 'rootPath:"/phpmyadmin/"' 'rootPath:"https://serverfault.com/"';
4. Настройки proxy_redirect
Важно убедиться, что у вас правильно настроены редиректы. Ваша директива proxy_redirect
изменяет URL-адреса, что может влиять на работу sub_filter
. Проверьте, соответствует ли она вашим требованиям.
5. Проверка кэширования и конфликты с другими модулями
Если вы используете кэширование или другие модули, они могут конфликтовать с работой sub_filter
. Попробуйте временно отключить кэширование или проверьте другие директивы, которые могут влиять на выдачу контента.
6. Логи и отладка
Для более детального анализа проблемы просмотрите логи Nginx, чтобы увидеть, происходит ли ошибка в процессе обработки запроса. Можно настроить логирование на более высоком уровне:
error_log /var/log/nginx/error.log debug;
Это поможет выявить любые ошибки или проблемы, возникающие в процессе обработки.
Заключение
Если указанные шаги не помогают решить проблему, рекомендуется провести тестирование конфигурации с минимальными изменениями, наблюдая за результатами на каждом этапе. Это поможет сузить круг проблем и выявить, в чем конкретно заключается ошибка. Успехов в работе с Nginx!