Artikel ini dapat membantu Anda memecahkan masalah terkait kesalahan 504/502/gateway. Saat memecahkan masalah, sebaiknya pahami cara kerja pemrosesan antara nginx dan PHP, yang sering digunakan untuk hosting aplikasi web berperforma tinggi, seperti WordPress.
Kesalahan umum yang terjadi yang terhubung ke konfigurasi ini:
- Waktu Habis Gateway 504
- Waktu Habis Gateway (504)
- Kesalahan HTTP 504 – Waktu Gerbang Habis
- Kesalahan Waktu Habis Gateway
- 502 gerbang buruk
- Gerbang Buruk
Mengapa ada gateway?
Saat permintaan datang melalui browser web, permintaan tersebut pertama kali mengenai nginx, server web front-end kami yang ringan dan nginx kemudian memutuskan ke mana permintaan harus diarahkan dari sana, seperti kondektur kereta. Nginx biasanya akan menangani sendiri permintaan sumber daya yang lebih sederhana (seperti gambar dan halaman cache), sambil mengirim permintaan untuk halaman dinamis (seperti halaman admin WordPress atau keranjang belanja) hingga apache (untuk modsecurity dan pemrosesan .htaccess) dan kemudian PHP. Tampilannya seperti ini:
nginx -> apache -> php -fpm
nginx bertindak sebagai gateway yang mengirimkan jenis permintaan yang tepat melalui apache dan PHP. Jika ada masalah 'downstream' — seperti dengan apache atau php — Anda akan mendapatkan gateway kesalahan, seperti 502 Bad Gateway atau Waktu Habis Gateway 504 .
Masalah ini bisa berupa kode yang berjalan sangat lambat, atau masalah sebenarnya dengan layanan apache atau PHP, meskipun dengan hosting kami, masalah tersebut paling sering adalah masalah kode.
Gunakan log server untuk mendapatkan info selengkapnya
Untuk membantu menentukan penyebab galat gateway, periksa log untuk melihat apa yang dilaporkan. terkadang log hanya akan melaporkan kesalahan 502 atau 504 — seperti yang Anda lihat di browser — yang tidak akan membantu. Namun terkadang Anda mungkin melihat kesalahan atau peringatan yang dicatat tepat sebelum kesalahan Gateway yang akan menunjukkan dengan tepat plugin atau tema apa yang menyebabkan kesalahan tersebut.
Anda dapat mempelajari cara menggunakan Plesk untuk melihat log di sini. Jika Anda dapat menggunakan kesalahan tersebut untuk menyelesaikan masalah, lakukanlah! Kalau tidak, baca terus untuk cara tambahan mempersempit segalanya.
Membantu! Saya bahkan tidak bisa mengakses area admin situs web saya! (Seperti wp-admin untuk WordPress)
Kadang-kadang ketika Anda menerima kesalahan Gateway konstan, Anda tidak dapat mengakses area admin situs web Anda (seperti wp-admin WordPress), namun Anda merasa perlu melakukannya untuk membantu memecahkan masalah ini. Satu-satunya cara untuk mendapatkan kembali akses adalah dengan memblokir akses hingga Anda dapat menyelesaikan masalah.
Untuk memblokir akses, Anda dapat melanjutkan dengan salah satu dari dua cara:1) memblokir akses ke bagian tertentu dari situs yang menghabiskan sumber daya, atau 2) Anda dapat memblokir akses ke semua IP kecuali milik Anda untuk sementara guna mendapatkan kembali akses.
Untuk memblokir akses ke semua IP kecuali milik Anda (lebih mudah)
Masuk ke Plesk dan kunjungi pengaturan apache &nginx halaman. Di bagian “Tolak akses ke situs ” masukkan nilai khusus dan jadikan "*
“ (tanpa tanda kutip). Lalu di bawah “Mengecualikan ” masukkan alamat IP Anda sendiri dan simpan perubahannya. Anda mungkin perlu menunggu hingga 3 menit setelah menyimpan perubahan agar server dimulai ulang (~1m) dan agar proses PHP apa pun yang berjalan mencapai waktu tunggunya (~2m).
Pastikan untuk menghapus pemblokiran ini setelah Anda selesai memecahkan masalah.
Untuk memblokir akses ke permintaan intensif sumber daya (lebih kompleks)
Jika hanya ada satu halaman atau sumber daya di situs yang menyebabkan masalah ini (seperti satu halaman yang memuat dengan lambat), gunakan log untuk mengidentifikasi URI permintaan tertentu tersebut. Kemudian tambahkan cuplikan kode berikut ke bagian atas file .htaccess Anda untuk memblokir sumber daya yang bermasalah (walaupun hanya sementara) sehingga Anda dapat mengakses panel admin. Ganti filename\.php
dengan URI permintaan aktual yang ditampilkan di log (ini adalah bagian yang muncul setelah domain). Jika ada titik di jalur file, pastikan untuk menambahkannya dengan garis miring terbalik seperti yang terlihat pada contoh.
<FilesMatch filename\.php> Order Allow,Deny Deny from all </FilesMatch>
Alasan umum error gateway
Kemungkinan perbaikan cepat:
Jika masalah hanya terjadi satu kali (seperti Anda menjalankan skrip dan tidak berhenti berjalan), solusinya adalah langsung memulai ulang layanan yang mendasarinya , yang memaksa skrip itu berakhir.
Jika Anda tidak memiliki akses root ke server atau akses admin ke Plesk, Anda sering dapat memicu restart seperti itu dengan membuat perubahan pada konfigurasi situs web Anda di Plesk. Misalnya, coba buka tombol "Pengaturan PHP" untuk domain Anda, lalu buat perubahan kecil di sana (seperti menambah memori dari 32MB menjadi 48MB) lalu simpan perubahan Anda. Pembaruan ini memicu restart pemrosesan apache dan PHP dan dapat menyelesaikan kesalahan Anda!
Mungkin diperlukan waktu hingga 3 menit (atau lebih lama bergantung pada penyedia Anda) agar perubahan diterapkan.
Jika itu tidak berhasil atau masalah kembali muncul, Anda harus melalui kemungkinan penyebab/gejala berikut untuk menentukan mana yang paling sesuai dengan kasus Anda.
Saya mencoba menjalankan ekspor, impor, atau laporan besar yang memakan waktu cukup lama
Jika situs Anda berjalan normal, tetapi setiap kali Anda mencoba menjalankan ekspor, impor, atau laporan besar untuk data situs Anda, Anda mendapatkan galat gateway, ini karena Anda mencapai waktu tunggu sebelum laporan dapat diproses. Meskipun tidak ada cara super sederhana untuk memperbaiki jangka panjang ini, ada cara untuk memperbaikinya dalam jangka pendek:tingkatkan waktu tunggu untuk sementara.
Anda dapat melakukannya di panel kontrol Plesk dengan mengikuti langkah-langkah di panduan kami tentang cara mengubah pengaturan PHP. Anda perlu mengubah nilai (dalam hitungan detik) untuk max_execution_time
dan max_input_time
hingga sekitar 300 untuk memungkinkan proses berjalan selama 5 menit. Jangan lupa untuk mengubah kembali nilai tersebut setelah Anda menyelesaikan tindakan jangka panjang Anda.
Mengapa Anda tidak bisa menambah waktu tunggu secara permanen?
Secara teknis Anda bisa, namun meningkatkan waktu tunggu secara permanen kemungkinan besar akan berdampak buruk pada kinerja situs Anda . Batas waktu default ke nilai seperti 30 atau 60 detik dengan tujuan:jika proses memakan waktu selama itu untuk diselesaikan, dan Anda memicu terlalu banyak proses yang berjalan lama, mereka dapat menghabiskan semua slot pemrosesan yang tersedia dan menurunkan seluruh situs Anda untuk semua pengunjung. Oleh karena itu, pertahankan nilai waktu tunggu sekitar 30-60 detik untuk memastikan hal ini hanya dapat terjadi paling lama selama waktu tersebut.
Hampir setiap permintaan ke situs atau beranda saya membutuhkan waktu lama untuk diproses
Anda akan mengetahui apakah ini masalahnya jika satu atau beberapa laman di situs memerlukan waktu lebih dari ~10 detik untuk mulai memuat, dengan browser Anda tidak menampilkan apa pun hingga periode 10+ detik tersebut telah berlalu.
Ada dua alasan umum hal ini dapat terjadi:
1) Masalah Kinerja Kode :Anda memiliki beberapa kode yang berjalan di situs yang tidak dioptimalkan untuk kinerja atau mengalami masalah. Contohnya adalah loop tak terbatas dalam kode, atau sesuatu yang mencoba menarik jutaan catatan basis data dalam satu kueri (alih-alih mengambilnya secara berkelompok). Hal pertama yang harus diperiksa adalah kode apa pun yang baru saja ditambahkan ke situs, seperti plugin, tema baru, kode khusus, dll. Anda mungkin ingin melibatkan pengembang untuk membantu mempersempitnya. Kami memiliki artikel KB dengan beberapa versi yang umum dikenal, namun jika Anda tidak dapat menentukan penyebabnya dengan saran tersebut, maka pilihan Anda yang tersisa adalah pemecahan masalah yang lengkap. Kami memiliki panduan lengkap untuk pemecahan masalah dengan WordPress di sini.
2) Permintaan Sumber Daya Eksternal Lambat atau Tidak Menanggapi: Beberapa kode PHP sedang mencoba berkomunikasi dengan sumber daya eksternal (dihosting di tempat lain) yang membutuhkan waktu terlalu lama untuk merespons atau tidak merespons sama sekali. Untuk mengatasi masalah Sumber Daya Eksternal, Anda perlu melihat bagian mana dari kode PHP situs web Anda (kode khusus atau kode plugin/tema) yang mencoba mengambil sumber daya eksternal. Ini adalah kode paling umum yang terhubung ke layanan pihak ketiga seperti pemroses pembayaran atau pengambilan data cuaca melalui API atau scraping. Berikut beberapa contohnya:
- Beberapa gateway pembayaran, atau layanan XML API menggunakan porta non-standar (walaupun saat ini sangat jarang karena porta standar lebih sering digunakan sekarang). Jika tidak menggunakan port 80 atau 443, kemungkinan mencoba berkomunikasi di port yang diblokir dan gagal.
- Widget twitter lama telah diketahui mengambil tweet menggunakan kode back-end dan kemudian kegagalan untuk terhubung ke server Twitter menyebabkan hang-up seperti ini. Ini tidak berlaku untuk sematan umpan Twitter sendiri yang beroperasi melalui Javascript secara asinkron.
Jika Anda menggunakan WordPress atau CMS lain dengan plugin, pastikan untuk mencoba menonaktifkan plugin apa pun yang mungkin berkomunikasi secara eksternal untuk melihat apakah plugin tersebut menyelesaikan masalah.
Jika Anda tidak dapat menentukan plugin mana yang salah secara intuitif, maka opsi Anda yang tersisa adalah pemecahan masalah yang lengkap. Kami memiliki panduan lengkap untuk pemecahan masalah dengan WordPress di sini.
Penyebab:Terlalu banyak proses PHP yang diperlukan untuk melayani permintaan
Jika Anda situs memerlukan banyak proses PHP karena sejumlah besar lalu lintas membuat permintaan pemrosesan dinamis, maka tujuan utama Anda harus mengurangi jumlah pemrosesan dinamis yang perlu terjadi pada setiap pemuatan halaman. Begini caranya:
- Jika Anda menggunakan WordPress, lihat di sini untuk mempelajari cara menginstal dan mengoptimalkan cache Anda.
- Jika Anda telah mengaktifkan caching, langkah selanjutnya adalah mendeteksi dan mengurangi kasus saat pemrosesan dinamis terjadi.
Penyebab:Buffer Terbatas
Proses Apache atau PHP mungkin menghasilkan ukuran data yang lebih besar daripada yang diizinkan untuk diproses oleh nginx. Karena apache dan PHP sama-sama harus meneruskan data ini melalui nginx untuk menjangkau pengunjung situs web, ini menghasilkan kesalahan 502 yang menunjukkan “Upstream sent too big header”. Kami telah melihat kesalahan ini pada pelanggan yang menggunakan plugin WordPress OptInMonster, namun perangkat lunak apa pun dapat melakukannya.
Hosting bersama kami seharusnya sudah dioptimalkan dengan buffer yang lebih besar untuk nginx, namun jika Anda memiliki VPS sendiri, atau tidak dihosting bersama kami, Anda harus menerapkan nilai ini sendiri ke konfigurasi nginx:
fastcgi_buffers 128 4096k; fastcgi_buffer_size 4096k;
Ini memberi tahu nginx bahwa tidak apa-apa untuk menerima header besar (4MB). Anda dapat memasukkan ini ke dalam file seperti:/etc/nginx/conf.d/increase_buffers.conf
kemudian restart nginx untuk menerapkan perubahan. Contoh:
echo 'fastcgi_buffers 128 4096k; fastcgi_buffer_size 4096k;' > /etc/nginx/conf.d/increase_buffers.conf
Penyebab:PHP-FPM Salah Konfigurasi atau Memerlukan Penyetelan (Hanya VPS/Server Khusus)
Terkadang jika Anda mendapatkan kesalahan Gateway Timeout konstan, dan satu-satunya hal yang menghapusnya adalah memulai ulang PHP (seperti yang dijelaskan di atas), atau jika Anda menggunakan VPS dan Anda melihat proses PHP Anda tetap berjalan pada CPU tinggi dan bertahan lama lebih lama dari yang seharusnya (atau Anda telah diberi tahu bahwa itulah yang terjadi oleh teknisi server), Anda perlu mengambil beberapa langkah untuk mengendalikannya.
Catatan:jika Anda menggunakan hosting bersama kami, konfigurasi PHP-FPM kami telah dioptimalkan untuk lingkungan hosting bersama sehingga jika Anda mengalami kesalahan gateway, solusi ini tidak akan berlaku.
Berikut ini adalah beberapa opsi yang berhasil bagi kami, namun sangat penting untuk dicatat bahwa ini adalah solusi untuk masalah sebenarnya. Mengidentifikasi kode yang tidak merespons dengan cukup cepat, dan mengoptimalkan performanya adalah solusi yang tepat.
- PHP-FPM memungkinkan Anda menyetel Manajer Proses PHP (Manajer Proses FastCGI =FPM) dengan membuat beberapa perubahan di Plesk. Jika Anda menggunakan proses PHP-FPM gaya "ondemand", Anda mungkin ingin mengurangi jumlah permintaan yang ditangani setiap proses sebelum keluar/memulai ulang proses baru dengan lancar. Ini diberi label sebagai pm.max_requests. Coba 100 atau 150 jika Anda mengalami masalah performa
- Jika proses PHP Anda belum mati, Anda mungkin perlu *membuat* proses tersebut mati. Ada beberapa cara bagus untuk melakukan ini. Pertama adalah menyetel batas waktu idle untuk proses PHP-FPM dengan menyetel pm.process_idle_timeout – coba setel ke 10 detik (Anda dapat melakukannya di kolom di bawah setelan FPM.
- Jika PHP Anda masih memproses tidak sekarat, Anda mungkin perlu lebih agresif dengan mereka. Coba setel request_terminate_timeout hingga beberapa detik lebih tinggi dari pengaturan max_execution_time Anda. Jika max_execution_time tidak menghentikan proses, request_terminate_timeout pasti akan melakukannya.
Jika menurut Anda panduan ini bermanfaat, lihat panduan dan pos lain yang tersedia. Jika Anda membutuhkan host web Kanada berperforma tinggi atau partner hosting VPS, lihat layanan kami!