Как с помощью nginx запустить SSI на странице, возвращенной с другого сервера?

Я пробую nginx. Я хотел бы использовать его для выполнения следующих действий:

  1. Получить страницу с сервера1, которая включает некоторые команды SSI
  2. Обработка команд SSI, включая содержимое с server2.
  3. Вернуть результирующую страницу

У меня работает SSI при использовании локального файла, но не при использовании страницы с server1 с помощью proxy_pass.

Вот моя конфигурация, которую я использую, чтобы попытаться достичь вышеуказанного.

events {
    worker_connections  1024;
}
http {
    server {
        listen       80;
        server_name  localhost;

        location /hello-world.html {
            ssi on;
            proxy_pass http://tom.office.bla.co.uk:8080/hello-world/;
        }
    }
}

В целях тестирования я использую простую команду SSI, как показано в выводе моего браузера, который фактически заканчивается, и он идентичен содержимому на server1:

<html>

<!--# set var="test" value="Hello nginx!" -->
<!--# echo var="test" -->

</html>

Нужно ли использовать что-то кроме proxy_pass, или это просто невозможно? Спасибо!


person Tom Crowder    schedule 10.07.2014    source источник


Ответы (1)


Убедитесь, что server1 не возвращает сжатый контент. если он возвращается в сжатом виде, nginx не будет распаковывать его, чтобы применить к нему правила ssi.

вы можете убедиться, что ответ возвращается в виде простого текста, очистив заголовок Accept-Encoding:

location /hello-world.html {
    ssi on;
    proxy_set_header Accept-Encoding ""; 
    proxy_pass http://tom.office.bla.co.uk:8080/hello-world/;
}
person mjones753    schedule 17.07.2014
comment
Спасибо, это очень полезно. Не очевидно, если вы застряли с этим в первый раз. - person aholbreich; 18.02.2016
comment
FWIW — nginx поддерживает распаковку сжатого содержимого, но вам необходимо включить модуль gunzip: github.com/Homebrew /homebrew-nginx - person linusthe3rd; 13.03.2017