Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nginx + fasctgi, Zend rewrite problem dla niektórych adresów
Forum PHP.pl > Forum > Serwery WWW
fotopano
oneeyedsmiley02.png Hey!
Zauważyłem że na forum nie ma subfora dlas Nginx, dlatego pisze tutaj.
Mam skonfigurowaneego Nginxa z php fastcgi, i problem polega na tym że dla określonego vhosta, czasem nie działa rewrite.
Aplikacja jest napisana w ZF. Zupełnie nie rozumiem dlaczego tylko dla niektórych URLi się tak dzieje, nie ma to związku z długością URLa, ani z nietypowymi znakami, czy błędnie zdefiniowanymy routerami. Po prostu dla pewnych URLi rewrite oparty o poniższą konfigurację nie działa (nawet nie wchodzi do index.php Zenda).

oto plik vhosta:

  1. listen 80;
  2. server_name domena.pl en.domena.pl;
  3. root /var/www/domena.pl/public_html;
  4. access_log off;
  5. error_log /var/log/nginx/domena.pl/error.log;
  6. index /index.php;
  7.  
  8. # remove trailing slash, that throws ZF router
  9. rewrite ^/(.*)/$ /$1 break;
  10.  
  11. location /
  12. {
  13. try_files $uri $uri/ /index.php?$args;
  14. }
  15.  
  16. location ~* \.php
  17. {
  18. include fastcgi_params;
  19. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  20. fastcgi_read_timeout 600;
  21. fastcgi_pass 127.0.0.1:9000;
  22. fastcgi_param APPLICATION_ENV production;
  23. }
  24.  
  25. # expires headers on known filetypes
  26. location ~* ^.+.(css|js|jpeg|jpg|gif|png|ico)
  27. {
  28. access_log off;
  29. expires max;
  30. }
  31.  
  32. }
  33.  


A może ktoś ma sprawdzony plik vhosta dla aplikacji Zendowej i mógłby go tutaj wkleić?
Jakieś pomysły?

Oto error log dla wadliwie działającego adresu:

  1. 011/09/05 09:31:07 [error] 8062#0: *5 open() "/var/www/domena.pl/public_html/galeria/wloclawek/miasto-w-obiektywie failed (2: No such file or directory)


Czyli serwer szuka danej lokalizacji na dysku, zamiast wykonać rewrite do index.php w Zendzie.
Kiedy zmienię dany url w backendzie na np. wloclawek/zadna-wies to routing działa. Nie wiem od czego to zależne.
erix
Hmm, nie spotkałem się nigdy z czymś takim...

W każdym razie, zacząłbym od:
Cytat
# remove trailing slash, that throws ZF router
rewrite ^/(.*)/$ /$1 break;

Nie pasuje mi tu break. Zastanów się, czy faktycznie jest tutaj potrzebny.

Cytat
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Po co to deklarujesz, gdy masz to w fastcgi_params?

I najważniejsza - która wersja nginx?
fotopano
Dzięx za response!
Wywaliłem co zasugerowałeś ~ERIX i nie działa jak wcześniej nie działało...wiem że problem bardzo dziwny i nielogiczny w dodatku.
Wersja serwera to:
nginx/0.7.67

Debian Squeeze z domyślnymi repo z DE czyli:

  1. deb http://ftp.de.debian.org/debian squeeze main contrib non-free
  2. deb http://ftp.de.debian.org/debian-security squeeze/updates main contrib non-free


oto przykładowy url z błędami:
http://fotopano.net/galeria/torun/rynek-nowomiejski
Jak usunąć kilka ostatnich znaków z URL-a i wysłać request to już taki adres:
http://fotopano.net/galeria/torun/rynek-nowomiej
przechodzi przez index.php Zenda. Dla porównania inne działające linki (także np. z dłuższych stringów) są tutaj: http://fotopano.net/galeria/torun/
Wszystkie linki zbudowane są w ten sposób, za pomocą tego samego routera, więc z Zendem raczej no problem...


Pozdrawiam

SOLVED!


  1.  
  2. server {
  3. listen 80;
  4. server_name fotopano.net en.fotopano.net;
  5. root /var/www/fotopano.net/public_html;
  6. access_log off;
  7. error_log /var/log/nginx/fotopano.net/error.log;
  8. location / {
  9. index index.php;
  10. }
  11.  
  12. # Deny access to sensitive files.
  13. location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ {
  14. deny all;
  15. }
  16. location ~ \.htaccess {
  17. deny all;
  18. }
  19.  
  20. # Rewrite rule adapted from zendapp/public/.htaccess
  21. if (!-e $request_filename) {
  22. rewrite ^.*$ /index.php last;
  23. }
  24.  
  25. # PHP scripts will be forwarded to fastcgi processess.
  26. # Remember that the `fastcgi_pass` directive must specify the same
  27. # port on which `spawn-fcgi` runs.
  28. location ~ \.php$ {
  29. include /etc/nginx/fastcgi_params;
  30. fastcgi_pass 127.0.0.1:9000;
  31. fastcgi_index index.php;
  32. fastcgi_param APPLICATION_ENV production;
  33. }
  34.  
  35. location = /50x.html {
  36. root /var/www/default;
  37. }
  38.  
  39. # expires headers on known filetypes
  40. location ~* ^.+.(css|js|jpeg|jpg|gif|png|ico)
  41. {
  42. access_log off;
  43. expires max;
  44. }
  45.  
  46.  
  47. }
  48.  
  49.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.