Intereting Posts
Кнопка возврата кодовой строки после выхода из системы Добавление элемента в ассоциативный массив Изменение API графиков Google: тип изображения (размер) больше не работает? Восклицательный знак в HTML-письме PHP: массив для самостоятельной привязки помощь соли и склепа SMTP: Не удалось подключить разъем: невозможно найти перенос сокета «ssl" Почему unserialize в PHP продолжает возвращать false? преобразовать mysql resultset в объект (имя, данные), который будет загружаться в HighCharts Разница между «->» и «::» в PHP MySQLi OOP отправка клиенту сообщений клиента без взаимодействия с сервером Яркая фатальная ошибка: аргумент прошел не в правильном экземпляре На странице редактирования выберите выбранную радиокнопку Как игнорировать дублирующее имя и делать первую букву должны быть кепки с помощью вложенного массива? Лучший способ найти различия между двумя большими массивами в PHP

nginx показывает пустые страницы PHP

Я установил сервер nginx с php5-fpm. Когда я пытаюсь загрузить сайт, я получаю пустую страницу без ошибок. Html-страницы подаются отлично, но не php. Я попытался включить display_errors в php.ini, но не повезло. php5-fpm.log не вызывает ошибок и не является nginx.

nginx.conf

server { listen 80; root /home/mike/www/606club; index index.php index.html; server_name mikeglaz.com www.mikeglaz.com; error_log /var/log/nginx/error.log; location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } } 

РЕДАКТИРОВАТЬ

вот мой журнал ошибок nginx:

 2013/03/15 03:52:55 [error] 1020#0: *55 open() "/home/mike/www/606club/robots.txt" failed (2: No such file or directory), client: 199.30.20.40, server: mikeglaz.com, request: "GET /robots.txt HTTP/1.1", host: "mikeglaz.com" 

Related of "nginx показывает пустые страницы PHP"

Для справки, я прикрепляю свой блок location для ловли файлов с расширением .php :

 location ~ \.php$ { include /path/to/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; } 

Дважды проверьте параметры /path/to/fastcgi-params и убедитесь, что они присутствуют и читаются пользователем nginx.

замещать

 include fastcgi_params; 

с

 include fastcgi.conf; 

и удалите fastcgi_param SCRIPT_FILENAME … в nginx.conf

Также была проблема и, наконец, нашли решение здесь . Короче говоря, вам нужно добавить следующую строку в конфигурационный файл nginx fastcgi (/ etc / nginx / fastcgi_params в Ubuntu 12.04)

 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name; 

Многие пользователи попадают в этот поток, ожидая найти решение для пустых страниц, отображаемых при использовании nginx + php5-fpm , и я являюсь одним из них. Это краткое изложение того, что я закончил делать после прочтения многих ответов здесь, а также моих собственных исследований:

1) Откройте /etc/php5/fpm/pool.d/www.conf и проверьте значение параметра.

 location = /var/run/php5-fpm.sock 

2) location параметров должно соответствовать параметру fastcgi_pass в вашем файле nginx.conf .

 fastcgi_pass unix:/var/run/php5-fpm.sock; 

3) Проверьте файл на самом деле:

 $ file /var/run/php5-fpm.sock /var/run/php5-fpm.sock: socket 

4) Если этого не существует, значит, php5-fpm не запущен, поэтому вам необходимо перезапустить его:

 $ sudo /etc/init.d/php5-fpm restart [ ok ] Restarting php5-fpm (via systemctl): php5-fpm.service. 

Что касается раздела location :

 location ~ \.php$ { include fastcgi_params; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; } 

Проверьте файл fastcgi_params в папке /etc/nginx/ :

 $ file /etc/nginx/fastcgi_params /etc/nginx/fastcgi_params: ASCII text 

Обычно этот файл содержит список определений переменных, требуемых php5-fpm:

 fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; ... fastcgi_param REDIRECT_STATUS 200; 

nginx включает в себя два возможных файла параметров: fastcgi_params и fastcgi.conf . Разница между ними заключается в определении переменной SCRIPT_FILENAME :

 $ diff fastcgi_params fastcgi.conf 1a2 > fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

Чтобы сделать длинный рассказ коротким, fastcgi.conf всегда должен работать. Если по какой-то причине вы используете fastcgi_params , вы должны определить SCRIPT_FILENAME :

 location ~ \.php$ { include fastcgi_params; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } 

Теперь перезагрузите конфигурацию nginx:

 $ sudo nginx -s reload 

И проверьте, правильно ли отображается файл php. Например:

/var/www/html/test.php

 <pre><?php var_export($_SERVER)?></pre> 

Где /var/www/html – путь к корню документа.

Убедитесь, что у вас есть это в / etc / nginx / fastcgi_params

fastcgi_param SCRIPT_FILENAME $ request_filename;

Кто знает, почему этого уже нет? Количество времени, которое это должно коллективно растрачивать!

Я написал короткую программу на C, которая возвращает переменные среды, переданные из nginx, в приложение fastCGI.

 #include <stdlib.h> #include <fcgi_stdio.h> extern char **environ; int main(int argc, char **argv) { char *envvar; int i; int count = 0; while(FCGI_Accept() >= 0) { printf("Content-type: text/html\n\n" "<html><head><title>FastCGI Call Debug Tool</title></head>\n" "<body><h1>FastCGI Call Debugging Tool</h1>\n" "<p>Request number %d running on host <i>%s</i></p>\n" "<h2>Environment Variables</h2><p>\n", ++count, getenv("SERVER_NAME")); i = 0; envvar = environ[i]; while (envvar != NULL) { printf("%s<br/>",envvar); envvar = environ[++i]; } printf("</p></body></html>\n"); } return 0; } 

Сохраните это в файл, например fcgi_debug.c

Чтобы скомпилировать его, сначала установите gcc и libfcgi-dev , а затем запустите:

 gcc -o fcgi_debug fcgi_debug.c -lfcgi 

Чтобы запустить его, установите spawn-fcgi , а затем запустите:

 spawn-fcgi -p 3000 -f /path/to/fcgi_debug 

Затем измените конфигурацию nginx fcgi, чтобы указать на программу отладки:

 fastcgi_pass 127.0.0.1:3000; 

Перезагрузите nginx, обновите страницу, и вы увидите все параметры, отображаемые в вашем браузере для отладки! 🙂

Эти подсказки помогли мне с моей установкой Ubuntu 14.04 LTS,

Кроме того, мне нужно было включить short_open_tag в /etc/php5/fpm/php.ini

 $ sudo kate /etc/php5/fpm/php.ini short_open_tag = On $ sudo service php5-fpm restart $ sudo service nginx reload 

Добавьте это в /etc/nginx/conf.d/default.conf :

 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name; 

В случае, если у кого-то возникла эта проблема, но ни один из вышеперечисленных ответов не разрешил их проблемы, у меня была такая же проблема, и мне было сложно отслеживать ее, поскольку мои файлы конфигурации были правильными, мои задания ngnix и php-fpm работали нормально, и ошибок в журналах ошибок не было.

Неверная ошибка, но я никогда не проверял переменную Short Open Tag в файле php.ini, который был установлен на short_open_tag = Off . Поскольку мои php-файлы использовали <? вместо <?php , страницы отображались пустым. Для короткого открытого тега в моем случае должно быть установлено значение On .

Надеюсь, это поможет кому-то.

Причина, по которой эта проблема возникает, состоит в том, что конфигурации fastcgi в nginx не работают по мере необходимости, а также на месте или в обработке, они отвечают как html-данные. Существует два возможных способа настройки nginx, чтобы избежать этой проблемы.

  1. Способ 1:

      location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # With php5-fpm: fastcgi_pass unix:/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi.conf; } 
  2. Способ 2:

     location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include snippets/fastcgi-php.conf; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; } 

Оба метода будут работать правильно, вы можете пойти и взять любой из них. Они почти выполняют те же операции с очень небольшим различием.

Ни один из вышеперечисленных ответов не работал для меня – PHP правильно отображал все, кроме страниц, которые полагались на mysqli, для которых он отправлял пустую страницу с кодом ответа 200 и не выдавал никаких ошибок. Поскольку я на OS X, исправление было просто

sudo port install php56-mysql

а затем перезапуск PHP-FPM и nginx.

Я перешел от старой установки Apache / PHP к nginx и не заметил замещения версии в драйвере для php-mysql и php-fpm .

У меня была аналогичная проблема, nginx обрабатывал страницу наполовину, а затем останавливался. Ни одно из предлагаемых нами решений не подходит для меня. Я исправил это, изменив буферизацию nginx fastcgi:

 fastcgi_max_temp_file_size 0; fastcgi_buffer_size 4K; fastcgi_buffers 64 4k; 

После изменений мой блок location выглядел так:

 location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_max_temp_file_size 0; fastcgi_buffer_size 4K; fastcgi_buffers 64 4k; include fastcgi_params; } 

Подробнее см. https://www.namhuy.net/3120/fix-nginx-upstream-response-buffered-temporary-file-error.html.

Если вы получаете пустой экран, это может быть вызвано двумя причинами:

  1. Браузер блокирует отображение фреймов. В некоторых браузерах фреймы считаются небезопасными. Чтобы преодолеть это, вы можете запустить бескаркасную версию phpPgAdmin на

    http://-your-domain-name-/intro.php

  2. Вы включили функцию безопасности в Nginx для X-Frame-Options, попробуйте отключить ее.

Это решение моей проблемы

 location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include snippets/fastcgi-php.conf; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; }