nginx + ssi + удаленный доступ к uri не работает

У меня есть настройка, в которой мой nginx находится впереди, а apache + PHP позади.

Мое PHP-приложение кэширует некоторую страницу в memcache, к которой напрямую обращается nginx, за исключением некоторой динамической части, которая создается с использованием SSI в Nginx.

Первая проблема, с которой я столкнулся, заключалась в том, что nginx не пытался использовать memcache для ssi URI.

<!--# include virtual="/myuser" -->

Поэтому я подумал, что если я заставлю его использовать полный URL-адрес, он это сделает.

<!--# include virtual="http://www.example.com/myuser" -->

Но в файле журналов (как nginx, так и apache) я вижу, что в начале URL-адреса добавлена ​​косая черта.

http ssi filter "/http://www.example.com/myuser"

В исходном коде модуля SSI я вижу ПРЕФИКС, который кажется добавленным, но я действительно могу сказать, могу ли я его отключить.

У кого-нибудь есть эта проблема? Версия Nginx: 0.7.62 на Ubuntu Karmic 64bits

Большое спасибо


person stunti    schedule 14.04.2010    source источник


Ответы (2)


Это не имеет ничего общего с nginx, вы просто не можете этого сделать. SSI не принимает удаленные uri. вы можете указать только локальный путь к файлу.

См. http://en.wikipedia.org/wiki/Server_Side_Includes.

person Lipingtababa    schedule 26.07.2010

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

server {
....
  location /remote {
    proxy_pass @long_haul; # or use "try_files" to provide fallback
  }

  location @long_haul {
    proxy_pass http://porno.com;
  }
....
}

а в обслуживаемом html используйте директиву include, которая ссылается на /удаленный путь:

  <!--# include virtual="/remote/rest-of-url&and=parameters" -->

Обратите внимание, что вы можете настроить URL-адрес, который передается дальше с помощью переменных и регулярных выражений. Например:

  location ~/remote(.+) {
    proxy_pass @long_haul$1?$args;
  }
person Petr Gladkikh    schedule 08.04.2011
comment
Это довольно круто. Вы можете использовать это в сочетании со специализированным журналом, чтобы сделать действительно простой сервис исходящих ссылок с аналитикой. - person Anatoly G; 18.06.2012
comment
Но вы должны помнить, что весь путь к удаленной странице будет проходить через ваш nginx. То есть nginx должен удерживать некоторое состояние ожидания, пока удаленный URL-адрес не будет получен. Поэтому я бы не рекомендовал такой метод для сильно загруженных сайтов (просто представьте, что произойдет, если удаленный URL будет долго загружаться). - person Petr Gladkikh; 21.06.2012