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, або швидким зв'язуванням між 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:

[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, тому я повинен змінити це в мої години налагодження, тому що я пам'ятайте, як читали про це значення, і вважали, що це встановлено правильно.

У будь-якому випадку, можливо, це допомагає будь-кому Гугла в цьому питанні.


5
Дякуємо, що поділилися рішенням. Рекомендується не довіряти навчальним посібникам, оскільки ці підручники можуть містити незахищені конфігурації. Ці конфігурації все ж можуть працювати коректно.
Pothi Kalimuthu

Дякую за посилання, я натрапив на це кілька разів і застосував ці інструкції. Помилка, ймовірно, була моєю власною в моїй гніті налагодження (через x години ви починаєте втрачати слідку про деякі речі, які ви змінили).
Пітер Круйтхоф

Шахта була chownпроблемою.
Юрген Пол

Дуже дякую. Проблема працювала над цією проблемою годинами та cgi.fix_pathinfoвстановлена ​​на 0 (конфігурація за замовчуванням).
Мавіс Ледфорд

2
cgi.fix_pathinfo = 0рекомендується великою кількістю навчальних посібників, оскільки це допомагає пом'якшити вразливості, зокрема вразливості, виконуючи php-код через довільні файли. Тож якщо ви встановите це значення 1, переконайтесь, що ви знаєте, що ви робите, або вкажіть інші пом'якшення, щоб компенсувати це. Я вважаю, що ця публікація має гарне пояснення щодо цього питання: nealpoole.com/blog/2011/04/…
MikeD
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.