ผู้ใช้หลายคนตกอยู่ในเธรดนี้ซึ่งคาดว่าจะพบวิธีแก้ไขสำหรับหน้าเปล่าที่กำลังแสดงขณะใช้nginx + php-fpmฉันเป็นหนึ่งในนั้น นี่คือบทสรุปของสิ่งที่ฉันทำหลังจากอ่านคำตอบมากมายที่นี่รวมทั้งการสืบสวนของฉันเอง (อัปเดตเป็น php7.2):
1) เปิดและตรวจสอบค่าของพารามิเตอร์/etc/php/7.2/fpm/pool.d/www.conf
listen
listen = /var/run/php/php7.2-fpm.sock
2) พารามิเตอร์listen
ควรจะตรงกับfastcgi_pass
พารามิเตอร์ในการตั้งค่าเว็บไซต์ของคุณ (i, E: /etc/nginx/sites-enabled/default
)
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3) ตรวจสอบไฟล์ที่มีอยู่จริง:
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4) หากไม่มีอยู่นั่นหมายความว่าphp7.2-fpmไม่ทำงานดังนั้นคุณต้องเริ่มต้นใหม่:
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
เกี่ยวกับการที่มีlocation
ส่วนใน/etc/nginx/sites-enabled/default
:
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
ตรวจสอบไฟล์ที่snippets/fastcgi-php.conf
มีอยู่ในสถานที่/etc/nginx/
:
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
ไฟล์นี้มีรายการคำจำกัดความของตัวแปรที่ต้องการโดย php7.2-fpm ตัวแปรถูกกำหนดโดยตรงหรือผ่านการรวมของไฟล์ที่แยกจากกัน
include fastcgi.conf;
ไฟล์นี้อยู่ที่/etc/nginx/fastcgi.conf
และดูเหมือนว่า:
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 snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
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
เส้นทางไปยังรากเอกสาร
หากคุณยังเห็นไฟล์เปล่าตรวจสอบให้แน่ใจว่าphp.ini
ได้short_open_tag
เปิดใช้งานแล้ว (หากคุณกำลังทดสอบหน้า PHP ที่มีแท็กสั้น ๆ )