ข้อผิดพลาด“ การเข้าถึงถูกปฏิเสธ” 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:

[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 configs ดังนั้นมันจึงรบกวนฉัน เมื่อดูการกำหนดค่าของฉันเป็นล้านครั้งฉันเห็นว่าcgi.fix_pathinfo(ในphp.ini) ถูกตั้งค่าเป็น 0 โดยที่ควรจะเป็น 1 ค่าเริ่มต้นที่ PHP ใช้คือ 1 ดังนั้นฉันต้องเปลี่ยนสิ่งนี้ในชั่วโมงการดีบักเพราะฉัน จำการอ่านเกี่ยวกับค่านี้และคิดว่าถูกต้องแล้ว

อย่างไรก็ตามอาจช่วยใครก็ได้สำหรับ Google ในเรื่องนี้


5
ขอขอบคุณที่แบ่งปันโซลูชัน ขอแนะนำไม่ให้เชื่อถือบทเรียนเหล่านี้เนื่องจากบทช่วยสอนเหล่านั้นอาจมีการกำหนดค่าที่ไม่ปลอดภัย แม้ว่าการกำหนดค่าเหล่านั้นอาจยังคงทำงานได้อย่างถูกต้อง
Pothi Kalimuthu

ขอบคุณสำหรับลิงค์ฉันเจอมาสองสามครั้งแล้วใช้คำแนะนำเหล่านั้น ความผิดพลาดอาจเป็นของฉันเองในความโกรธการดีบักของฉัน (หลังจาก x ชั่วโมงคุณเริ่มที่จะสูญเสียบางสิ่งที่คุณเปลี่ยนแปลง)
Peter Kruithof

ฉันเป็นchownปัญหา
Jürgen Paul

ขอบคุณมาก. เคยทำงานกับปัญหานี้มาหลายชั่วโมงแล้วและcgi.fix_pathinfoตั้งค่าเป็น 0 (การกำหนดค่าเริ่มต้น) เป็นปัญหา
Mauvis Ledford

2
cgi.fix_pathinfo = 0ถูกแนะนำโดยบทเรียนจำนวนมากเนื่องจากช่วยลดความเสี่ยงโดยเฉพาะช่องโหว่ที่เรียกใช้งานโค้ด php ผ่านไฟล์โดยพลการ ดังนั้นหากคุณตั้งค่านี้เป็น 1 ให้แน่ใจว่าคุณรู้ว่าคุณกำลังทำอะไรหรือระบุการบรรเทาอื่น ๆ เพื่อชดเชย ฉันพบว่าโพสต์นี้มีคำอธิบายที่ดีเกี่ยวกับปัญหา: nealpoole.com/blog/2011/04/…
MikeD
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.