Wielu użytkowników wpada w ten wątek, spodziewając się znaleźć rozwiązanie dla pustych stron wyświetlanych podczas korzystania z nginx + php-fpm , a ja jestem jednym z nich. To jest podsumowanie tego, co zrobiłem po przeczytaniu wielu odpowiedzi tutaj oraz moich własnych dochodzeń (zaktualizowano do php7.2):
1) Otwórz /etc/php/7.2/fpm/pool.d/www.conf
i sprawdź wartość parametru listen
.
listen = /var/run/php/php7.2-fpm.sock
2) Parametr listen
powinien być zgodny z fastcgi_pass
parametrem w pliku konfiguracyjnym witryny (tj /etc/nginx/sites-enabled/default
.).
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3) Sprawdź, czy plik faktycznie istnieje:
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4) Jeśli nie istnieje, oznacza to, że php7.2-fpm nie działa, więc musisz go zrestartować:
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
W odniesieniu do location
sekcji w /etc/nginx/sites-enabled/default
:
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
Sprawdź, czy plik snippets/fastcgi-php.conf
istnieje w lokalizacji /etc/nginx/
:
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
Ten plik zawiera listę definicji zmiennych wymaganych przez php7.2-fpm. Zmienne są definiowane bezpośrednio lub poprzez dołączenie oddzielnego pliku.
include fastcgi.conf;
Ten plik znajduje się pod adresem /etc/nginx/fastcgi.conf
i wygląda następująco:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
...
fastcgi_param REDIRECT_STATUS 200;
nginx zawiera dwa możliwe pliki parametrów: fastcgi_params i fastcgi.conf . Różnica między nimi to definicja zmiennej SCRIPT_FILENAME
:
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Krótko mówiąc, fastcgi.conf powinien zawsze działać. Jeśli z jakiegoś powodu używasz fastcgi_params , powinieneś zdefiniować SCRIPT_FILENAME
:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Teraz przeładuj konfigurację nginx:
$ sudo nginx -s reload
I sprawdź, czy plik php jest wyświetlany poprawnie. Na przykład:
/var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
Gdzie /var/www/html
jest ścieżka do katalogu głównego dokumentu.
Jeśli mimo wszystko nadal widzisz pusty plik, upewnij się, że php.ini
jest short_open_tag
włączony (jeśli testujesz stronę PHP z krótkimi tagami).