Saya memperbarui nginx ke 1.4.7 dan php ke 5.5.12 , Setelah itu saya mendapatkan kesalahan 502 . Sebelum saya perbarui semuanya berfungsi dengan baik.
nginx-error.log
2014/05/03 13:27:41 [crit] 4202#0: *1 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: xx.xxx.xx.xx, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "xx.xx.xx.xx"
nginx.conf
user www www;
worker_processes 1;
location / {
root /usr/home/user/public_html;
index index.php index.html index.htm;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/home/user/public_html$fastcgi_script_name;
include fastcgi_params;
}
Jawaban:
Saya memiliki kesalahan serupa setelah pembaruan php. PHP memperbaiki bug keamanan di mana
o
adarw
izin untuk file socket./etc/php5/fpm/pool.d/www.conf
atau/etc/php/7.0/fpm/pool.d/www.conf
, tergantung versi Anda.Batalkan komentar pada semua jalur izin, seperti:
Mulai ulang fpm -
sudo service php5-fpm restart
atausudo service php7.0-fpm restart
Catatan : jika server web Anda berjalan sebagai pengguna selain www-data, Anda harus memperbarui
www.conf
file yang sesuaisumber
sudo usermod -aG www-data nginx
memungkinkan nginx untuk mengakses fileSemua perbaikan yang saat ini disebutkan di sini pada dasarnya memungkinkan lubang keamanan lagi.
Apa yang akhirnya saya lakukan adalah menambahkan baris berikut ke file konfigurasi PHP-FPM saya.
Pastikan bahwa www-data sebenarnya adalah pengguna yang dijalankan oleh pekerja nginx. Untuk debian, ini adalah www-data secara default.
Melakukannya dengan cara ini tidak mengaktifkan masalah keamanan yang seharusnya diperbaiki oleh perubahan ini .
sumber
ps aux|grep nginx
/var/run/php5-fpm.sock
, karena sudah dibuat olehwww-data
. Hanya kepala ...Solusi @ Xander berfungsi, tetapi tidak bertahan setelah reboot.
Saya menemukan bahwa saya harus mengubah
listen.mode
ke0660
dalam/etc/php5/fpm/pool.d/www.conf
.Contoh dari www.conf:
Edit: Per @Chris Burgess, saya telah mengubah ini menjadi metode yang lebih aman.
Saya menghapus komentar untuk listen.mode, .group dan .owner:
/ var / run Hanya menyimpan informasi tentang sistem yang berjalan sejak boot terakhir, misalnya, pengguna yang sedang masuk dan menjalankan daemon. ( http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard#Directory_structure ).
Catatan:
Saya
php5-fpm -v
Laporan:PHP 5.4.28-1+deb.sury.org~precise+1
. Masalahnya memang terjadi setelah pembaruan terbaru juga.sumber
listen.acl_groups
diatur,listen.owner
danlisten.group
diabaikan. Saya mengaturlisten.acl_groups =
, maka masalah 502 / izin hilang. Menemukannya setelah menghapus komentarlisten.
baris seperti di atas, masalah 502 bertahan dansystemctl status php-fpm
menunjukkan peringatanWARNING: [pool www] ACL set, listen.owner = 'nobody' is ignored
.Jika Anda telah mencoba segalanya dalam posting ini tetapi tidak berhasil membuat PHP berfungsi, inilah yang memperbaikinya untuk kasus saya:
Pastikan Anda memiliki baris-baris ini uncommented di /etc/php5/fpm/pool.d/www.conf:
Pastikan /etc/nginx / fastcgi_params terlihat seperti ini:
Dua baris ini hilang dari / etc / nginx / fastcgi_params saya, pastikan semuanya ada di sana!
Kemudian, restart php5-fpm dan nginx. Sebaiknya lakukan triknya.
sumber
Faktanya, "listen.mode" seharusnya: "0660" dan bukan "0666" seperti Other Writable atau Other Readable tidak pernah merupakan pilihan yang baik di sini.
Jadi cobalah untuk mencari tahu pengguna / grup mana yang dijalankan oleh server web Anda. Saya menggunakan CentOs dan dijalankan sebagai pengguna "nginx" Jadi, tambahkan ke php-fpm.conf Anda:
akhirnya restart php-fpm
sumber
www-data
.Periksa pengguna mana yang menjalankan nginx. Pada Ubuntu 12,04 nginx dijalankan oleh pengguna nginx yang bukan anggota grup data-www.
dan me-restart dagin nginx dan php5-fpm memecahkan masalah.
sumber
Alternatif untuk memperluas izin dalam konfigurasi php Anda, Anda bisa mengubah pengguna yang ditentukan dalam konfigurasi nginx Anda.
Pada baris pertama kutipan nginx.conf Anda di atas, pengguna dan grup masing-masing ditentukan sebagai www dan www.
Sementara itu, konfigurasi php Anda mungkin menentukan pengguna dan grup data-www:
Anda dapat mengubah baris di nginx.conf Anda, ke salah satu dari yang berikut, kemudian:
sumber
Pertimbangan juga harus diberikan pada kumpulan FPM individual Anda, jika ada.
Saya tidak tahu mengapa tidak ada jawaban yang bekerja untuk saya hari ini. Ini adalah skenario set-and-forget bagi saya, di mana saya lupa bahwa listen.user dan listen.group digandakan berdasarkan basis per-pool.
Jika Anda menggunakan kumpulan untuk akun pengguna yang berbeda seperti yang saya lakukan, di mana setiap akun pengguna memiliki proses dan soket FPM, hanya menetapkan opsi default listen.owner dan listen.group untuk 'nginx' tidak akan berfungsi. Dan jelas, membiarkan 'nginx' memiliki semuanya juga tidak dapat diterima.
Untuk setiap kolam , pastikan itu
Jika tidak, Anda dapat meninggalkan kepemilikan kolam dan semacamnya sendirian.
sumber
Saya baru saja mendapatkan kesalahan ini hari ini karena saya memperbarui mesin saya (dengan pembaruan untuk PHP) yang menjalankan Ubuntu 14.04 . File konfigurasi distribusi
/etc/php5/fpm/pool.d/www.conf
baik-baik saja dan tidak memerlukan perubahan apa pun saat ini.Saya menemukan kesalahan berikut:
Yang aneh adalah bahwa saya memiliki 2 situs yang berjalan yang menggunakan PHP-FPM pada mesin ini satu berjalan dengan baik dan yang lainnya (instalasi Tiny Tiny RSS) memberi saya 502, di mana keduanya telah berjalan dengan baik sebelumnya .
Saya membandingkan kedua file konfigurasi dan menemukan yang
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
hilang untuk situs yang terpengaruh.Kedua file konfigurasi sekarang berisi blok berikut dan berjalan dengan baik lagi:
Memperbarui
Perlu dicatat bahwa Ubuntu mengirimkan dua file parameter terkait fastcgi dan juga potongan konfigurasi yang tersedia sejak Vivid dan juga dalam versi PPA . Solusinya telah diperbarui sesuai.
Perbedaan dari file parameter fastcgi:
Cuplikan konfigurasi dalam
/etc/nginx/snippets/fastcgi-php.conf
sumber
Perbaikan sederhana berikut ini berfungsi untuk saya, memintas kemungkinan masalah izin dengan soket.
Di nginx config Anda, set fastcgi_pass ke:
Dari pada
Ini harus cocok dengan parameter listen = di /etc/php5/fpm/pool.d/www.conf, jadi setel ini ke:
Kemudian restart php5-fpm dan nginx
Dan
Untuk info lebih lanjut, lihat: https://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm/
sumber
Masalah dalam kasus saya adalah bahwa server web Nginx berjalan sebagai pengguna nginx dan kolam berjalan sebagai data pengguna www.
Saya memecahkan masalah dengan mengubah Nginx berjalan di pengguna di
/etc/nginx/nginx.conf
file (bisa berbeda pada sistem Anda, milik saya adalah Ubuntu 16.04.1)Perubahan:
user nginx;
untuk:
user www-data;
kemudian mulai kembali Nginx:
service nginx restart
sumber
Sederhana tapi berhasil ..
sumber
Saya telah memperbaiki masalah yang sama di Amazon Linux AMI 2016.09 (Centos 7) dengan mengambil langkah-langkah berikut.
Buka file www.conf Anda (Contoh: sudo nano /etc/php-fpm.d/www.conf) Terakhir, temukan baris yang mengatur listen.owner dan listen.group dan ubah nilainya dari "tidak ada" menjadi "nginx ":
Terakhir, cari baris yang mengatur pengguna dan grup dan ubah nilainya dari "apache" ke "nginx":
Restart php-fpm (sudo service php-fpm restart)
sumber
Yang paling penting di sini adalah pengguna yang menggunakan nginx maka Anda perlu menentukannya juga
di nginx.conf Anda
di www.conf Anda
dalam kasus Anda, pengguna dan grup adalah "www" jadi ganti saja.
sumber
Jika Anda memiliki kumpulan berbeda per pengguna, pastikan pengguna dan grup diatur dengan benar dalam file konfigurasi. Anda dapat menemukan pengguna nginx di file /etc/nginx/nginx.conf. Grup nginx sama dengan pengguna nginx.
sumber
Periksa juga SELINUX (/ etc / selinux):
matikan:
sumber
Dalam kasus saya php-fpm tidak berjalan sama sekali, jadi saya baru saja memulai layanan 😂
sumber
Lihat saja
/etc/php5/php-fpm.conf pid = /var/run/php5-fpm.pid
file IS PIDDalam file
/etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
IS file SOCKETjika Anda pid sama mendengarkan (
pid = /var/run/php5-fpm.sock and listen = /var/run/php5-fpm.sock
) -> pengaturan yang salah dan menyelesaikan sett/etc/php5/fpm/pool.d/www.conf
sumber
Untuk menambahkan, pada CentOS (dan mungkin Red Hat dan Fedora) file untuk mengubah izin ada di:
sumber
Setelah meningkatkan dari Ubuntu 14,04 lts ke Ubuntu 16,04 lts saya menemukan alasan lain untuk kesalahan ini yang belum pernah saya lihat sebelumnya.
Selama proses peningkatan, entah bagaimana saya kehilangan eksekusi php5-fpm saya sama sekali. Semua file konfigurasi masih utuh dan butuh beberapa saat untuk menyadari hal itu
service php5-fpm start
itu tidak benar-benar memulai proses, karena tidak menunjukkan kesalahan.Saat kebangkitan saya adalah ketika saya menyadari bahwa tidak ada file socket di
/var/run/php5-fpm.sock
dalamnya, sebagaimana seharusnya, juga tidaknetstat -an
menunjukkan proses mendengarkan pada port yang saya coba sebagai alternatif ketika mencoba untuk memecahkan masalah ini. Karena file / usr / sbin / php5-fpm juga tidak ada, saya akhirnya berada di jalur yang benar.Untuk mengatasi masalah ini, saya meningkatkan versi php dari versi 5.5 ke 7.0.
apt-get install php-fpm
melakukan trik sebagai efek samping. Setelah itu dan menginstal paket lain yang diperlukan semuanya kembali normal.Solusi peningkatan ini mungkin memiliki masalah sendiri . Karena php telah berevolusi sedikit, mungkin saja perangkat lunak akan pecah dengan cara yang tak terbayangkan. Jadi, meskipun saya telah menempuh jalan itu, Anda mungkin ingin mempertahankan versi yang Anda sukai hanya untuk sementara waktu.
Untungnya, tampaknya ada cara yang rapi untuk itu , seperti yang dijelaskan di situs Customize Windows:
Solusi yang lebih rapi, mungkin, saya tidak mencobanya. Saya berharap beberapa hari ke depan akan memberi tahu saya apakah saya harus melakukannya.
sumber
Saya memiliki kesalahan serupa.
Semua rekomendasi tidak membantu.
Satu-satunya pengganti www-data dengan nginx telah membantu:
/var/www/php/fpm/pool.d/www.conf
sumber
Saya mengubah OS di server saya beberapa kali mencoba untuk mendapatkan sistem yang paling nyaman.
Dulu bekerja dengan sangat baik sebagian besar waktu tetapi terakhir saya mendapat kesalahan Gateway 502 ini.
Saya menggunakan soket php fpm untuk setiap akun alih-alih menyimpan yang sama untuk semua. Jadi jika salah satu crash, setidaknya aplikasi lain tetap berjalan.
Saya dulu punya pengguna dan grup www-data. Tapi ini berubah pada Debian 8 saya dengan Nginx 1.8 dan php5-fpm terbaru.
Pengguna default adalah nginx dan begitu juga grup. Untuk memastikan hal ini, cara terbaik adalah memeriksa file / etc / group dan / etc / passwd. Ini tidak bisa bohong.
Di sanalah saya menemukan bahwa sekarang saya memiliki nginx di keduanya dan tidak ada lagi www-data.
Mungkin ini dapat membantu sebagian orang masih mencari tahu mengapa pesan kesalahan terus muncul.
Ini berhasil untuk saya.
sumber
Bagi mereka yang mencoba semua yang ada di utas ini dan masih macet: Ini menyelesaikan masalah saya. Saya memperbarui /usr/local/nginx/conf/nginx.conf
Batalkan komentar baris
user
membuatnya
www-data
jadi:user www-data;
Simpan itu (diperlukan akses root)
Mulai ulang nginx
sumber
Jika Anda memiliki deklarasi
dan
dalam file konfigurasi yang berbeda, maka root akan menjadi pemilik file ini.
sumber