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

Я установил сервер nginx с php5-fpm. Когда я пытаюсь загрузить сайт, я получаю пустую страницу без ошибок. Html-страницы обслуживаются нормально, но не php. Я попытался включить display_errors в php.Ини но не повезло. рнр5-тефлон.журнал не создает никаких ошибок, и 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"

14 ответов


для справки, я прикрепляю мой location блок для ловли файлов с


заменить

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 с-ФПМ, я один из них. Это резюме того, что я закончил делать после прочтения многих ответов здесь плюс мои собственные исследования:

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

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

2 параметр)location должны соответствовать в своем 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-ФПМ не работает, поэтому вам нужно перезапустить его:

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


Что касается :

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

проверить файл на месте /etc/nginx/:

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

обычно этот файл содержит список определений переменных, требуемых рнр5-ФПМ:

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 работали нормально, и не было никаких ошибок, поступающих через журналы ошибок.

глупая ошибка, но я никогда не проверял короткую переменную открытого тега в моем 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;
    }
    

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


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

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

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

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


ни один из вышеперечисленных ответов не работал для меня-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


это решена моя проблема

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;
}