Ещё задачка по nginx

LM
На сайте с 18.10.2009
Offline
117
1813

Есть движок, шаблоны html лежат в /var/www/system/data/www/system.com/templates/

и их несколько и с разными именами, типа

/templates/odin/

/templates/dva/

и так далее.

И у всех этих шаблонов есть шапка - header.jpg, которая отдаётся из папок /var/www/system/data/www/system.com/templates/имяшаблона/header.jpg

Движок позволяет редактировать шапку сайта, но загружает в каталог /var/www/cache/data/www/имясайта/templates/имяшаблона/

Где имя сайта - любой домен (мультисайтовый движок).

Таким образом, нужно организовать отдачу nginx так, чтобы если шапка существует в /var/www/cache/data/www/имясайта/templates/имяшаблона/, то берётся оттуда. Если нет, то ищется в /var/www/system/data/www/system.com/templates/.

Вопрос: как реализовать?

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#1

location /templates/

{

root /var/www/;

try_files /cache/data/www/$host/templates$uri /system/data/www/$host/templates$uri @dummy;

}

location @dummy { return 444; }

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
LM
На сайте с 18.10.2009
Offline
117
#2

Удивительно, но не работает. Может я чего неправильно делаю... :(

Вставляю код в основной конфиг, выглядит вот так:

server {
listen 127.0.0.1:80;
server_name system.com www.system.com;
rewrite ^(/manager/.*)$ https://$host$1 permanent;
error_page 404 = @fallback;

#files cache
location / {
root /var/www/cache/data/www/$host_without_www;
try_files $uri @backend;
}
#end for cache folder
location /templates/
{
root /var/www/;
try_files /cache/data/www/$host/templates$uri /system/data/www/$host/templates$uri @dummy;
}
location @dummy { return 444; }


location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://system.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
set $host_without_www $host;
if ($host ~* www\.(.*)) {
set $host_without_www $1;
}
location ~ ^/$ {
rewrite .* /index.html;
}

location @backend {
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://system.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}


location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
root /var/www/system/data/www/system.com;
access_log /var/www/httpd-logs/system.com.access.log;

location ~ /files {
root /var/www/cache/data/www/$host_without_www;
}

}

location @fallback {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}

Перезапускаю nginx и никакого эффекта...

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#3

Может быть location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ { перекрывает?

попробуйте прописать location ^~ /templates/

LM
На сайте с 18.10.2009
Offline
117
#4
Boris A Dolgov:
попробуйте прописать location ^~ /templates/

Прописал... Изображение выдаёт это:

Изображение «http://26.system.com/templates/rus2/header.jpg» не может быть показано, так как содержит ошибки.

А на самом сайте все картинки из стилей не грузятся вообще.

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#5

А что в error-лог? И ещё вместо location @dummy { return 444; } можно написать location @dummy { return 402; }, но это ничего не изменит а просто упростит отладку.

Boris A Dolgov добавил 07.07.2011 в 21:12

А, понял

вместо

try_files /cache/data/www/$host/templates$uri /system/data/www/$host/templates$uri @dummy;

нужно писать

try_files /cache/data/www/$host_without_www$uri /system/data/www/$host_without_www$uri @dummy;

LM
На сайте с 18.10.2009
Offline
117
#6
Boris A Dolgov:
вместо
try_files /cache/data/www/$host/templates$uri /system/data/www/$host/templates$uri @dummy;
нужно писать
try_files /cache/data/www/$host_without_www$uri /system/data/www/$host_without_www$uri @dummy;

Да я уже пробовал, но не работает...

Вот кусок лога

2011/07/07 23:16:48 [error] 23802#0: *66 open() "/var/www/system/data/www/system.com/templates/rus2/header.jpg" failed (2: No such file or directory), client: 46.146.10.116, server: system.com, request: "GET /templates/rus2/header.jpg HTTP/1.1", host: "26.system.com"

Boris A Dolgov:
И ещё вместо location @dummy { return 444; } можно написать location @dummy { return 402; }, но это ничего не изменит а просто упростит отладку.

Это сделано.

LinuxMan добавил 08.07.2011 в 13:28

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий