Skocz do zawartości
Zaloguj się, aby obserwować  
Desavil

Nginx rewrite - pliki statyczne

Polecane posty

Witam, nie chce mi działać żadne rewrite, które dotyczy plików statycznych, nie wiem gdzie popełniam błąd:

location /widg {
    rewrite ^/widg/embded_([0-9]+)-([0-9]+).js?$ /widg/index.php?go=js&sid=$1&w=$2;
    rewrite ^/widg/image/preview.jpg$ http://domena.pl/preview.jpg redirect;
}

Nginx traktuje prawdopodobnie te: .js oraz .jpg jako pliki statyczne, gdyż zwraca że taki plik nie istnieje. Jak tylko zmienię: .js na np. .js2 to otwiera bez problemu. W jaki sposób mogę na nim jakoś wymusić, aby brał pod uwagę te regułki?

Edytowano przez Desavil (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ogólnie spróbuj te regułki wyrzucić z lokacji. To oczywiście mała zmiana, ale czasami nginx jak się zapętla to nie lubi takich żądań, bo leci request -> location /widg -> rewrite z /widg do /widg.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zadziałało. :)

Czyli generalnie lepiej rewrite używać samo, bez location?

 

 

Jeszcze taka jedna rzecz, jak ma się hierarchia w nginx?

Wpisując w takiej kolejności i "wchodząc" do katalogu "jakiskatalog", plik PHP się pobiera.

 

location ~ /jakiskatalog {
allow x.x.x.x;
deny all;
}
 
location ~ \.php$ {
fastcgi_pass unix:/home/sites/domena.pl/tmp/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

 

Natomiast jak wpiszę w takiej kolejności, wykonuje się prawidłowo, ale "deny all" jest ignorowane:

 

location ~ \.php$ {
fastcgi_pass unix:/home/sites/domena.pl/tmp/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
 
location ~ /jakiskatalog {
allow x.x.x.x;
deny all;
}
Edytowano przez Desavil (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

http://nginx.org/en/docs/http/ngx_http_core_module.html#locationi http://nginx.org/en/docs/http/request_processing.html masz opis przetwarzania żądań. Ogólnie regex łapie zawsze wcześniej (są wyjątki jak zawsze), Tutaj masz 2 lokacje tego typu i w sumie można by było zachaczyć albo osobną lokację pod php'y w tym katalogu albo if'a, ale if'y w nginx'ie są dziwne (nie zawsze działają jak by się wydawać mogło).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Hmm, nie umiem sobie z tym poradzić. A całe:

location ~ \.php$ {
   ...
}

Lepiej umieszczać na końcu: server { }, czy na początku, jeszcze przed regułami rewrite/innymi location?

 

Jak mogę ustawić, aby to dotyczyło wszystkich plików ".php" dla danego: server { }, bo jak widać w moim przypadku dla location, np. nie wykonywało się. A nie chciałbym sytuacji, że jakiś pliki PHP nagle się pobierają, zamiast interpretować przez parser.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×