http_sub_module / sub_filter nginx и обратный прокси не работают

Я пытаюсь отменить прокси-сервер своего веб-сайта и изменить его содержимое. Для этого я скомпилировал nginx с sub_filter. Теперь он принимает директиву sub_filter, но почему-то не работает.

server {
    listen       8080;
    server_name  www.xxx.com;

    access_log  /var/log/nginx/www.goparts.access.log  main;
    error_log  /var/log/nginx/www.goparts.error.log;
    root   /usr/share/nginx/html;
    index  index.html index.htm;

    ## send request back to apache1 ##
    location / {
       sub_filter <title> '<title>test</title>';
 sub_filter_once on;


     proxy_pass  http://www.google.fr;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

   }
}

Помогите, пожалуйста


person thms0    schedule 08.08.2015    source источник
comment
Почему вы собираетесь изменять содержимое в конфигурации Nginx? Хотите использовать Nginx в режиме прямого прокси?   -  person Anatoly    schedule 08.08.2015
comment
Потому что я намерен таким образом добавить на сайт верхний и нижний колонтитулы. Я хочу использовать его в режиме обратного прокси.   -  person thms0    schedule 09.08.2015
comment
Я даже пробовал Httpsubs и subs_filter, тоже не работает. У кого-нибудь есть идея?   -  person thms0    schedule 10.08.2015
comment
На основе proxy_pass google.fr кажется, что вы пытаетесь создать прямой прокси, но не обратный один?   -  person Anatoly    schedule 10.08.2015
comment
Да, погуглите, просто чтобы попробовать. Теперь я попытался отменить прокси-сервер для страницы по умолчанию со списком каталога apache, и он работает. Я где-то читал, что у httpsubs были проблемы со страницами, обслуживаемыми gzip, поэтому я добавил proxy_set_header Accept-Encoding; чтобы попытаться отключить gzip с сервера, но никак: /   -  person thms0    schedule 11.08.2015
comment
У sub_filter нет проблем с содержимым gzip, он просто не предназначен для работы с этим, пустой заголовок Accept-Encoding помогает бэкэнду отправлять содержимое, не сжатое gzip, в Nginx.   -  person Anatoly    schedule 12.08.2015


Ответы (1)


Проверьте, включен ли gzip в исходном коде, если он вам нужен

proxy_set_header Accept-Encoding "";

так что все это будет что-то вроде

location / {
    proxy_set_header Accept-Encoding "";
    proxy_pass http://upstream.site/;
    sub_filter_types text/css;
    sub_filter_once off;
    sub_filter .upstream.site special.our.domain;
}

Проверить эти ссылки

person Mike Lee    schedule 29.03.2016
comment
Я подумал, что это некрасивое исправление, поскольку оно отключит gzip между исходным сервером и общедоступным сервером (больше внутреннего трафика), но это официальное решение Nginx для этого: nginx.com/resources/wiki/modules/substitutions - person adrianTNT; 12.02.2020
comment
Я бы также добавил, что в моем случае это сработало только после того, как я установил директиву proxy_set_header Accept-Encoding ""; внутри location, она не будет работать под server. - person adrianTNT; 12.02.2020