Apache + PHP-FPM = acak "Error header parsing script" + Seg Faults

8

Saya memiliki pengaturan PHP-FPM dengan Apache 2.4 menggunakan proxy_fcgi, semua berfungsi dengan baik, tetapi setiap permintaan 4-6, Apache mengembalikan halaman kosong. Ini terjadi di situs utama saya http://danielhe.com/ , tetapi bukan subdomain vhosts.

Ini menunjukkan log kesalahan Apache, [klien x] AH01070: Kesalahan parsing header skrip

Dan akhirnya, kadang-kadang Apache segfaults AH00052: child pid 9740 sinyal keluar Kesalahan segmentasi (11)

Saya dapat mereproduksi "Header skrip penguraian kesalahan" dengan sangat mudah dengan menyegarkan halaman beberapa kali, tetapi kesalahan seg terjadi secara acak setelah beberapa "Header skrip penguraian kesalahan"

Pembaruan Saya telah menemukan perbaikan untuk kesalahan seg, dan WSOD tampaknya telah memperbaiki sendiri. mod_deflate memiliki beberapa masalah, tetapi konfigurasi dari dokumentasi Apache ini memperbaikinya

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpeg|jpg|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
user9517
sumber
2
Anda harus menjawab pertanyaan Anda sendiri dan menandainya sebagai jawaban yang diterima untuk membuat pertanyaan ini terlihat seperti dipecahkan
regilero

Jawaban:

2

Solusinya adalah menggunakan konfigurasi ini

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpeg|jpg|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
user9517
sumber
Apakah Anda yakin ada masalah di mod_deflate? Ada referensi? Terlihat sangat aneh ...
GioMac
@ GioMac: Saya tidak tahu - OP mengatakan itu yang memecahkan masalah dalam pertanyaan. Saya hanya memasukkannya ke dalam jawaban. Perhatikan bahwa SO mengirimkannya kepada kami dan pada awalnya dijawab pada 9 Maret 2012.
user9517
0

Saya dapat mengkonfirmasi solusi di atas bekerja untuk saya, tetapi saya harus memperbaiki pengaturan ProxyPassmatch saya juga.

Konfigurasi lama

<IfModule proxy_module>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/YOURDOMAIN/public_html/$1
</IfModule>

Konfigurasi baru - filter penulisan ulang yang berbeda, ditambah kode dari atas

<IfModule proxy_module>
ProxyPassMatch ^(.*\.php)$ fcgi://127.0.0.1:9000/home/YOURDOMAIN/public_html/$1
</IfModule>

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
...code from above
</IfModule>
Alauddin
sumber
0

Masalahnya di sini adalah bahwa respons dari phpList tidak mengisi paket lengkap. php-fpm memutus koneksi dengan Apache sebelum waktunya jika responsnya tidak mengisi setidaknya satu buffer. Sebagai solusi, Anda dapat beralih ke mod_php sementara atau memberi respons dengan beberapa teks yang dibuat secara acak.

Aeyoun
sumber