Saya berada di server bersama (Siteground), dan karena skrip WordPress WordPress saya membutuhkan waktu lebih dari 30 detik, ia mengembalikan batas waktu 504 Gateway.
Apakah kueri saya akan berjalan dan selesai jika tidak menemukan kesalahan lebih lanjut?
Sunting: Saya bertanya mengapa saya menerima kesalahan ini kepada tim hosting saya, di sini pakar Siteground Hosting menjelaskan masalah ini sebagai berikut:
Kami menggunakan kedua Apache + Nginx di semua server kami. Apache digunakan untuk layanan web utama, sedangkan Nginx digunakan sebagai proxy-terbalik dan mendistribusikan cache. Ketika respons tidak dapat dilayani dari cache (biasanya ini merujuk pada konten dinamis) permintaan dari Nginx dilakukan terhadap Apache. Ini ketika Apache sedang memproses permintaan, meneruskannya ke situs web Anda dan sesuai dengan logika PHP, permintaan MySQL dapat dilakukan atau data lain diambil. Ketika proses ini terlalu lama dan Apache tidak mengembalikan respons pada waktu yang tepat ke Nginx Anda akan melihat kesalahan ini. Singkatnya, Apache tidak dapat mem-server permintaan karena aplikasi menyelesaikan proses dalam waktu yang diizinkan. Ini juga berarti bahwa proses yang diprakarsai kemungkinan besar tidak selesai sepenuhnya dan beberapa data / tindakan mungkin telah disimpan / dieksekusi.
Pakar itu mengatakan "initiated process most probably not completed fully"
,
Lebih detail tentang skenario saya: Skrip saya menambahkan produk woocommerce dengan variasi menggunakan wp_insert_post
metode ke situs web wordpress saya. Setelah produk ditambahkan, ini akan menampilkan gambar produk yang baru ditambahkan.
Ketika saya menambahkan 1 produk (40 variasi), itu melengkapi dan menampilkan gambar produk. Ketika saya menambahkan 6 produk (240 variasi), saya menerima kesalahan langsung di browser saya.
Jadi untuk lebih lanjut menguji masalah ini, saya memodifikasi kode saya dan menulis ulang menggunakan ajax dan menambahkan bar proses seperti sistem. (Yang menambah angka untuk setiap variasi).
Setelah saya menjalankan kode untuk 1 produk (dengan 40 variasi), jumlah proses meningkat menjadi 40, dan itu menampilkan gambar produk.
Ketika saya menjalankan kode saya untuk 6 produk, jumlah proses meningkat menjadi 240, tetapi tidak menampilkan apa-apa, dan ketika saya periksa, ia menerima kesalahan 504. ( jQuery.Ajax
bagian kesalahan fungsi)
Jadi ini membuat saya berpikir bahwa kueri berjalan bahkan itu timeout, tetapi masih saya tidak bisa memastikan, dan mencari rincian behing 504 kesalahan batas waktu gateway karena tidak ada dokumentasi yang baik tentang ini.
Jawaban:
Script tidak akan berhenti mengeksekusi sampai mereka mencapai batas waktu php itu sendiri.
Kesalahan 504 dihasilkan pada gateway / proxy itu sendiri, itu bukan berasal dari proses php.
Itu karena ini, jika Anda memiliki Apache dengan Apache-mod-php Anda tidak akan pernah menerima kesalahan ini, karena tidak ada proxy.
Memperluas penjelasan, pikirkan sebagai berikut:
Anda memiliki proses PHP. Proses PHP dapat berupa PHP-FPM, PHP-CGI, atau Apache-MOD-PHP. Pada proses ini, Anda memiliki batas waktu (dikonfigurasi pada php.ini atau dengan ini_set).
Proxy PHP memberikan respons dalam waktu yang diizinkan (alias: jika Anda memiliki set_time_limit (600), proses PHP Anda dapat berjalan hingga 10 menit).
Tanpa kaitan dengan kalimat ini, Anda dapat memiliki proses lain menunggu respons ini: Itulah kasus apache (dikonfigurasi untuk menghubungi php dengan cgi atau fpm), nginx, a lighthttpd, dan lain-lain. Itu bukan kasus apache yang dikonfigurasi oleh apache-mod-php. Proses kedua ini, memiliki batas waktu baru (proxy_timeout), dikonfigurasi pada konfigurasi aplikasi server vhost / umum. Saat itulah program akan menunggu jawaban dari mesin pengolah PHP.
Kalimat terakhir, dapat diulang pada setiap proxy / gateway.
Pikirkan skenario ini:
haproxy (Timeout 1) -> Nginx (Frontend / cache) (Timeout 2) -> Apache (Timeout 3) -> PHP-FPM (Timeout PHP / set_time_limit).
Dan skenario yang sangat sederhana:
Apache (dengan apache-mod-php) (PHP Timeout / set_time_limit).
Setiap tampilan batas waktu (kecuali Batas Waktu PHP itu sendiri) adalah kemungkinan asal kesalahan 504 batas waktu gateway HTTP.
sumber
Pemahaman saya adalah bahwa skrip terus berjalan, tetapi berhenti melaporkan data ke klien. (Bukan berarti saya memiliki pengetahuan untuk menjelaskannya.) Berikut adalah artikel yang dapat membantu:
Cara Memperbaiki 504 Timeout Error Gateway di WordPress
sumber