Nginx / PHP-FPM "Akses ditolak." Kesalahan

14

Saya mencoba menyiapkan server Ubuntu (12.04) yang baru diinstal, tetapi saya tidak bisa menjalankan file PHP melalui php-fpm. Apa pun yang saya lakukan, saya selalu mendapat "Akses ditolak." halaman (teks biasa, bukan html atau apa pun).

Paket yang diinstal:

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

Detail konfigurasi:

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

Default / domain uji:

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();

Yang lainnya default. Baik log Nginx dan php-fpm tidak menunjukkan kesalahan. Namun ketika saya memuat http://<server-ip>/index.phpsaya mendapatkan halaman "Akses ditolak".

Penyelesaian masalah:

  • File index.html berfungsi dengan baik. Oleh karena itu harus berupa php-fpm, atau ikatan fastcgi antara Nginx dan php-fpm.
  • Saya telah mengatur kepemilikan (baik pengguna dan grup) untuk seluruh /extradirektori www-data, dan kepemilikan ke 777, hanya untuk memastikan (saya akan nada itu setelah berfungsi tentu saja). Jadi tentu saja itu bukan masalah izin
  • Ini bukan masalah security.limit_extensions yang saya lihat banyak: secara default yang diatur ke .php, yang persis seperti yang saya minta. Saya sudah mengaturnya secara eksplisit .php .html, dengan hasil yang sama.

Saya benar-benar bosan dengan ini, saya sudah menginstal pengaturan ini dua kali (meskipun pada mesin OSX), dan semuanya bekerja dengan sempurna. Apakah ada sesuatu yang saya abaikan?

Isi log:

Log kesalahan Nginx kosong.

Log akses nginx (menghapus 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 "-" "-"

log 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
Peter Kruithof
sumber

Jawaban:

33

Akhirnya diperbaiki.

Pelakunya adalah baris ini di konfigurasi saya:

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

Jika saya mengomentari baris ini, semuanya bekerja dengan baik. Namun saya melihat ini di hampir setiap posting yang saya baca tentang konfigurasi Nginx, jadi itu mengganggu saya. Ketika melihat konfigurasi saya untuk yang kesekian kalinya, saya melihat bahwa cgi.fix_pathinfo(dalam php.ini) diatur ke 0, di mana seharusnya 1. Nilai default yang digunakan PHP juga 1, jadi saya harus mengubah ini dalam waktu debugging saya, karena saya ingat membaca tentang nilai ini, dan berpikir itu sudah benar.

Ngomong-ngomong, mungkin ini membantu siapa pun Googling untuk masalah ini.

Peter Kruithof
sumber
5
Terima kasih telah berbagi solusinya. Dianjurkan untuk tidak mempercayai tutorial karena tutorial tersebut mungkin berisi konfigurasi yang tidak aman. Konfigurasi tersebut mungkin masih berfungsi dengan benar.
Pothi Kalimuthu
Terima kasih atas tautannya, saya menemukan itu beberapa kali dan telah menerapkan instruksi tersebut. Kesalahan itu mungkin saya sendiri dalam kemarahan debugging saya (setelah x jam Anda mulai kehilangan jejak beberapa hal yang telah Anda ubah).
Peter Kruithof
Milik saya adalah chownmasalah.
Jürgen Paul
Terima kasih banyak. Telah mengerjakan masalah ini selama berjam-jam dan cgi.fix_pathinfodiatur ke 0 (konfigurasi default) adalah masalahnya.
Mauvis Ledford
2
cgi.fix_pathinfo = 0direkomendasikan oleh banyak tutorial karena membantu mengurangi kerentanan, khususnya kerentanan yang mengeksekusi kode php melalui file sewenang-wenang. Jadi, jika Anda menetapkan ini ke 1, pastikan Anda tahu apa yang Anda lakukan atau tentukan mitigasi lain untuk menebusnya. Saya menemukan posting ini memiliki penjelasan yang baik tentang masalah ini: nealpoole.com/blog/2011/04/...
MikeD