Nginx / PHP-FPM Ошибка доступа запрещена.

14

Я пытаюсь настроить только что установленный сервер Ubuntu (12.04), но не могу запустить PHP-файлы через php-fpm. Независимо от того, что я делаю, я всегда получаю «Доступ запрещен». страница (обычный текст, не HTML или что-нибудь).

Установленные пакеты:

nginx
nginx-common
nginx-full
php5
php5-cli
php5-common
php5-fpm

Детали конфигурации:

PHP-FPM:

user = www-data
group = www-data
listen = /var/run/php5-fpm.sock

Nginx:

user www-data;
worker_processes 3;
events { worker_connections 1024; }

Стандартный / тестовый домен:

server {
    listen       80;
    server_name  localhost;
    root         /extra/htdocs/default;
    index        index.html index.php

    access_log   /extra/logs/default/access.log;
    error_log    /extra/logs/default/error.log;

    location / {
        try_files  $uri $uri/ /index.html;
    }

    location ~ \.php
    {
        fastcgi_split_path_info  ^(.+\.php)(/.+)$;

        include fastcgi_params;

        fastcgi_index   index.php;
        fastcgi_pass    unix:/var/run/php5-fpm.sock;
        fastcgi_param   PATH_INFO         $fastcgi_path_info;
        fastcgi_param   PATH_TRANSLATED   $document_root$fastcgi_path_info;
        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    }
}

/extra/htdocs/default/index.php:

<?php
phpinfo();

Все остальное по умолчанию. Журналы Nginx и php-fpm не показывают ошибок. Тем не менее, когда я загружаюсь, http://<server-ip>/index.phpя получаю страницу «Доступ запрещен».

Исправление проблем:

  • Файл index.html работает просто отлично. Следовательно, это должно быть либо php-fpm, либо fastcgi-связывание между Nginx и php-fpm.
  • Я установил для владельца (как пользователя, так и для группы) весь /extraкаталог www-data, а для владельца - 777, чтобы быть уверенным (разумеется, я уменьшу его, как только он заработает). Так что это, конечно, не проблема с разрешениями
  • Я часто вижу не проблему security.limit_extensions : по умолчанию она установлена ​​в .php, и это именно то, что я запрашиваю. Я явно установил его .php .htmlс тем же результатом.

Я действительно устаю от этого, я уже дважды установил эту настройку (хотя и на машины с OSX), и все работало безупречно. Есть что-нибудь, что я пропускаю?

Содержание журнала:

Журнал ошибок Nginx пуст.

Журнал доступа Nginx (удаленный ip):

<ip> - - [17/Jul/2012:11:21:25 +0200] "GET /favicon.ico HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:28 +0200] "GET /index.php HTTP/1.1" 403 46 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:34 +0200] "-" 400 0 "-" "-"

php-fpm log:

[17-Jul-2012 10:44:14] NOTICE: fpm is running, pid 4969
[17-Jul-2012 10:44:14] NOTICE: ready to handle connections
Питер Крайтоф
источник

Ответы:

33

Наконец-то исправили.

Виновником была эта строка в моем конфиге:

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

Если я прокомментировал эту строку, все работало нормально. Однако я видел это почти в каждом посте о конфигах Nginx, поэтому меня это беспокоило. Просматривая мои конфиги в миллионный раз, я увидел, что cgi.fix_pathinfo(in php.ini) было установлено в 0, где оно должно было быть 1. Значение по умолчанию, которое использует PHP, также равно 1, поэтому я, должно быть, изменил это в часы отладки, потому что я Помните, что читали об этом значении и думали, что оно установлено правильно.

Во всяком случае, может быть, это помогает любому Googling для этой проблемы.

Питер Крайтоф
источник
5
Спасибо, что поделились решением. Рекомендуется не доверять учебникам, поскольку эти учебники могут содержать незащищенные конфигурации. Тем не менее, эти конфигурации могут работать правильно.
Поти Калимуту
Спасибо за ссылку, я сталкивался с этим пару раз и применил эти инструкции. Ошибка была, вероятно, моей собственной в моей ярости отладки (через x часов вы начинаете терять некоторые вещи, которые вы изменили).
Питер Крайтоф
Моя была chownпроблема.
Юрген Павел
Огромное спасибо. Работал над этой проблемой в течение нескольких часов и cgi.fix_pathinfoустановил 0 (конфигурация по умолчанию).
Мовис Ледфорд
2
cgi.fix_pathinfo = 0рекомендуется многими учебниками, потому что это помогает смягчить уязвимости, особенно уязвимости, выполняющие код php через произвольные файлы. Поэтому, если вы установите значение 1, убедитесь, что вы знаете, что делаете, или укажите другие меры по снижению риска, чтобы компенсировать это. Я нашел это сообщение с хорошим объяснением по этому вопросу: nealpoole.com/blog/2011/04/…
MikeD