Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > Настройка nginx на отдачу существующей статики.


Автор: Хоббит 24.11.2008, 18:31
Надо поставить nginx фронтэндом к апачу, чтобы он отдавал статику. Но файл статический может не существовать, тогда запроса надо передать пхп скрипту, который этот файл создаст и вернет.

Когда был 1 апач, это делалось с помошью rewrite_mod, проверялось, если файл есть, то его возращал апач сразу, если нет, то редирект на скрипт.
Есть ли такие возможности в nginx.

Автор: Хоббит 24.11.2008, 19:07
В nginx есть http_rewrite_module, но мне надо сделать следующее.

RewriteCond $1 !^cached
RewriteCond %{DOCUMENT_ROOT}/image/cached/$1 !-f
RewriteRule ^image/(.*)$ ./dynimage.php

RewriteCond $1 !^cached
RewriteRule ^image/(.*)$ ./image/cached/$1

Поясню. Если запрашивается картинка /image, и файла в папке /image/cached/остальной_путь нет и разумется после image идет не cached, то отправить на скрипт dynimage.php.

Автор: Хоббит 25.11.2008, 19:35
Справился так. В определении server {...}

root /var/www/path_to_root

// Если в uri есть image то вырезаем путь к картинке (все что после image)
if ($request_uri ~* "image/(.*)$") {
  set $image_path $1;
}

// Если картинка существует, то отдаем ее
if (-f $document_root/image/cached/$image_path) {
  rewrite ^(.+)$ /image/cached/$image_path break;
}

// Иначе запрос идет к апачу.
location / {
  proxy_pass http://apache_host:8080
}


Но что то мне этот способ корявым кажется.
Во первых правильно ли отдавать картинку с помощью rewrite
И можно ли это записать в 1 условие а не в 2.

Автор: Хоббит 26.11.2008, 19:23
Объединить 2 условия в одно нельзя. Необходимо делать, как я написал. Нашел ответ в рассылке по nginx.

Автор: rapaman 10.12.2008, 20:07
Это можно собрать и в один location.

Автор: Хоббит 11.12.2008, 13:25
Пример бы привел.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)