2010-03-23 15 views
10

używam następującą konfigurację dla nginx: http://gist.github.com/340956

Jednakże ta konfiguracja powoduje błąd No input file specified z PHP. Jedynym sposobem udało mi się go rozwiązać to poprzez zmianę tej linii:

fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

Uwaga „/” pomiędzy $document_root i $fastcgi_script_name. Zostałem poinformowany, że jest to zła konfiguracja, ale nikt nie był w stanie dokładnie wyjaśnić, dlaczego moja konfiguracja wymaga tego dodatkowego ukośnika.

Jak mogę się pozbyć tego dodatkowego ukośnika?

Odpowiedz

4

Tylko w obliczu tego samego problemu (w remi instalacji nginx + php-fpm na serwerze RHEL6), można go rozwiązać poprzez dodanie następujący wiersz w pliku/etc/nginx/fastcgi_params

fastcgi_param SCRIPT_FILENAME $request_filename; 

znalazłem ten wiersz brakuje w RHEL, natomiast obecne w doskonale pracuje nginx Debiana.

0

Usuń try_files $uri index.php$uri; w linii 3.

+0

Potem przerabia się moje przepisywanie, ponieważ mam adresy URL, takie jak '/ foo/bar', które przekierowują do' index.php/foo/bar'. – shadowhand

0

kwestia preferencji. Dopóki jesteś konsekwentny, tak czy inaczej jest w porządku.

Dodaj slash w pliku konfiguracyjnym i upewnij się, że nie ma dodatkowych ukośników na końcu i początek odpowiednio nazwy katalogu głównego i skryptu lub na odwrót.

+0

Nie kupuję tego. Nie ma znaczenia, czy dodaję końcowy ukośnik do $ root, czy nie. – shadowhand

1

Czy param PATH_TRANSLATED otrzymuje prawidłowy identyfikator URI? Myślę, że jest to natychmiastowe łączenie zmiennych w pliku conf, które nie są obliczane. Kiedy dodajesz między nimi kreskę, być może są one interpretowane poprawnie.

Po wyświetleniu komunikatu o błędzie No input file specified sprawdź dziennik, aby wyświetlić żądany URI.

+0

Jaki log powinienem sprawdzić, gdy otrzymam komunikat "Brak pliku wejściowego"? Dzienniki nginx nie pokazują niczego, ponieważ błąd jest wywoływany przez PHP. – shadowhand

+0

Nie ma 'PATH_TRANSLATED' w moim dump' $ _SERVER'. – shadowhand

+0

Logi błędów PHP również nie zawierają błędów. – shadowhand

0

co się dzieje, kiedy jawnie dodać dyrektywę korzeniowy tak:

location ~ \.php$ { 
    # fastcgi_split_path_info ^(.+\.php)(.*)$; 
    include fastcgi.conf; 

    root /var/www/my_webroot; 

    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
} 
+0

Moje '$ root' jest zdefiniowane w' server {...} ' nie wystarczająco dobre? – shadowhand

Powiązane problemy