Nginx sub_filter не работает

Вопрос или проблема

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!

Оцените материал
Добавить комментарий

Капча загружается...