Помогите с переносом mod_rewrite на nginx

M
На сайте с 02.01.2013
Offline
38
503

Есть апачевские правила для отдачи картинок из php скрипта, типа

RewriteRule ^(.*)/(.*)$ scr.php?uid=$1&photo=$2 [L]

При этом по ссылкам http://site.ru/201dadf3b91e242er3da076002ac1425c/65ba9fdb4e8b84cewe4de8221a6c5f304.jpg картинки нет - это всё преобразуется в параметры и идёт в скрипт, он уже даёт картинку

на сервере ISP, nginx правило как понял для всей статики одно

location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$

В итоге ЛОГИ nginx заваливаются записями, о том что таких картинок нет(и понятно..)

нашёл конвертер, он дал этот код


if ($http_host ~ "(www.)?images.xxxxxxxxxxx.net"){
set $rule_0 1;
}
if ($http_host ~ "(www.)?xx.xx.xx.xxx"){
set $rule_0 1;
}
if ($rule_0 = "1"){
rewrite ^/(.*)/(.*)$ /src.php?uid=$1&photo=$2 last;
}

Куда его вторкнуть? в каком месте конфига.. Помогите пожалуйста

FFFFx029A
На сайте с 01.09.2007
Offline
142
#1
musitann:

Куда его вторкнуть? в каком месте конфига.. Помогите пожалуйста

ищешь ngnix.conf, там внутри все твои домены, находишь нужный домен и там буквально на пару строк ниже будут конструкции типа location{...}, ты делаешь рядом свой location{} и внутри нужный те код вписываешь.

P.S после конвертера не факт что будет пахать, лучше живой пример найти и сделать по аналогии, ну и не забудь перезапустить сервис ngnix после изменений т.е service ngnix restart (как-то так, а то если тольк апач перезагрузить, не факт что поможет)

http://www.youtube.com/watch?v=Gyl4E4EcPdc (http://www.youtube.com/watch?v=Gyl4E4EcPdc) - партнёрка от Мавроди и МММ))) http://miniwm.ru/soft.php?read=917 (http://miniwm.ru/soft.php?read=917) CMS MiniWM v2.8 - 49.99$
M
На сайте с 02.01.2013
Offline
38
#2
FFFFx029A:
свой location{}

я пробовал в самый верх в стопке локэйшенов поставить свой


location / {
if ($http_host ~ "(www.)?images.xxxxxxxxxxx.net"){
set $rule_0 1;
}
if ($http_host ~ "(www.)?xx.xx.xx.xxx"){
set $rule_0 1;
}
if ($rule_0 = "1"){
rewrite ^/(.*)/(.*)$ /src.php?uid=$1&photo=$2 last;
}
}

но после него получается шли дефолтные от ISPmanager секции:


location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
root $root_path;
access_log /var/www/nginx-logs/xxxxxxx isp;
access_log /var/www/httpd-logs/xxxxxxx.net.access.log ;
error_page 404 = @fallback;
}
location / {
proxy_pass http://xx.xx.xx.xxx:81;
proxy_redirect http://xx.xx.xx.xxx:81/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}

и после перезапуска nginx говорил "fatal" и ничё не работало, видимо из-за того что получалось две одинаковые секции location / {}

методом тыка впихнул код в первую дефолтную секцию и получилось:


location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {

if ($http_host ~ "(www.)?images.xxxxxxxxxxx.net"){
set $rule_0 1;
}
if ($http_host ~ "(www.)?xx.xx.xx.xxx"){
set $rule_0 1;
}
if ($rule_0 = "1"){
rewrite ^/(.*)/(.*)$ /src.php?uid=$1&photo=$2 last;
}

root $root_path;
access_log /var/www/nginx-logs/xxxxxxx isp;
access_log /var/www/httpd-logs/xxxxxxx.net.access.log ;
error_page 404 = @fallback;
}

правильно ли это я е знаю, но нужный эффект дало. А что именно получизлась за конструкция и как она работает правильно или не правильно я не знаю :( помогите

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