{"id":538,"date":"2026-09-07T10:44:02","date_gmt":"2026-09-07T10:44:02","guid":{"rendered":"https:\/\/www.vps.tc\/blog\/?p=538"},"modified":"2026-09-07T09:21:25","modified_gmt":"2026-09-07T09:21:25","slug":"502-bad-gateway-hatasi-nedir-nasil-cozulur","status":"publish","type":"post","link":"https:\/\/www.vps.tc\/blog\/tr\/502-bad-gateway-hatasi-nedir-nasil-cozulur\/","title":{"rendered":"502 Bad Gateway Hatas\u0131 Nedir ve Nas\u0131l \u00c7\u00f6z\u00fcl\u00fcr?"},"content":{"rendered":"<div class=\"aiw-toc\" style=\"border:1px solid #dbe3ea;border-radius:8px;padding:16px 20px;margin:0 0 28px\"><strong>\u0130\u00e7indekiler<\/strong><\/p>\n<ol style=\"margin:10px 0 0;padding-left:22px\">\n<li><a href=\"#502-bad-gateway-hatasi-nedir\">502 Bad Gateway hatas\u0131 nedir?<\/a><\/li>\n<li><a href=\"#502-hatasinin-arkasinda-hangi-sorunlar-vardir\">502 hatas\u0131n\u0131n arkas\u0131nda hangi sorunlar vard\u0131r?<\/a><\/li>\n<li><a href=\"#502-bad-gateway-hatasi-nasil-cozulur\">502 Bad Gateway hatas\u0131 nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/a><\/li>\n<li><a href=\"#nginx-apache-ve-uygulama-loglarinda-ne-aranir\">Nginx, Apache ve uygulama loglar\u0131nda ne aran\u0131r?<\/a><\/li>\n<li><a href=\"#502-ile-500-504-ve-503-arasindaki-fark-nedir\">502 ile 500, 504 ve 503 aras\u0131ndaki fark nedir?<\/a><\/li>\n<li><a href=\"#docker-ve-reverse-proxy-arkasinda-502-nasil-cozulur\">Docker ve reverse proxy arkas\u0131nda 502 nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/a><\/li>\n<li><a href=\"#cdn-kullanirken-502-hatasi-neden-gorulur\">CDN kullan\u0131rken 502 hatas\u0131 neden g\u00f6r\u00fcl\u00fcr?<\/a><\/li>\n<li><a href=\"#yonetici-degil-ziyaretciyseniz-ne-yapabilirsiniz\">Y\u00f6netici de\u011fil, ziyaret\u00e7iyseniz ne yapabilirsiniz?<\/a><\/li>\n<li><a href=\"#502-hatasini-onlemek-icin-hangi-kontroller-yapilmali\">502 hatas\u0131n\u0131 \u00f6nlemek i\u00e7in hangi kontroller yap\u0131lmal\u0131?<\/a><\/li>\n<li><a href=\"#sik-sorulan-sorular\">S\u0131k Sorulan Sorular<\/a><\/li>\n<li><a href=\"#kaynaklar\">Kaynaklar<\/a><\/li>\n<\/ol>\n<\/div>\n<h2 id=\"502-bad-gateway-hatasi-nedir\">502 Bad Gateway hatas\u0131 nedir?<\/h2>\n<p>502 Bad Gateway, bir web sunucusunun veya reverse proxy&#8217;nin arka u\u00e7 sunucusundan kullan\u0131labilir bir HTTP yan\u0131t\u0131 alamad\u0131\u011f\u0131n\u0131 g\u00f6sterir. \u0130stemci iste\u011fi proxy&#8217;ye ula\u015f\u0131r; kopukluk \u00e7o\u011funlukla Nginx, Apache, CDN, PHP-FPM, uygulama sunucusu ya da bu bile\u015fenler aras\u0131ndaki ileti\u015fimde \u00e7\u0131kar.<\/p>\n<p>Taray\u0131c\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz 502 sayfas\u0131, sorunun bilgisayar\u0131n\u0131zda oldu\u011fu anlam\u0131na gelmez. \u0130stek Nginx gibi d\u0131\u015far\u0131dan g\u00f6r\u00fcnen sunucuya kadar gelmi\u015f olabilir; fakat Nginx&#8217;in ba\u011flanmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131 upstream yan\u0131t vermiyor, ba\u011flant\u0131y\u0131 kapat\u0131yor veya beklenen bi\u00e7imde cevap \u00fcretemiyordur.<\/p>\n<p>HTTP durum kodlar\u0131n\u0131n tan\u0131m\u0131 RFC 9110&#8217;da yer al\u0131r. 502, gateway ya da proxy g\u00f6revi yapan sunucunun upstream&#8217;den ge\u00e7ersiz bir yan\u0131t ald\u0131\u011f\u0131n\u0131 ifade eder. MDN de kodu istemci ile hedef uygulama aras\u0131ndaki ge\u00e7i\u015f katman\u0131nda olu\u015fan bir sunucu yan\u0131t\u0131 olarak a\u00e7\u0131klar.<\/p>\n<h2 id=\"502-hatasinin-arkasinda-hangi-sorunlar-vardir\">502 hatas\u0131n\u0131n arkas\u0131nda hangi sorunlar vard\u0131r?<\/h2>\n<p>Bir reverse proxy ile uygulama sunucusu aras\u0131nda birka\u00e7 ayr\u0131 s\u00fcre\u00e7 \u00e7al\u0131\u015f\u0131r. Kullan\u0131c\u0131 Nginx&#8217;e ba\u011flan\u0131r, Nginx PHP-FPM&#8217;e veya Node.js uygulamas\u0131na istek iletir, uygulama da veritaban\u0131ndan ya da ba\u015fka bir servisten veri al\u0131r. Zincirin tek bir halkas\u0131 koptu\u011funda d\u0131\u015far\u0131ya 502 g\u00f6r\u00fcnebilir.<\/p>\n<ul>\n<li><strong>Upstream servis \u00e7al\u0131\u015fm\u0131yordur:<\/strong> PHP-FPM, Gunicorn, uWSGI, Node.js veya Docker konteyneri durmu\u015f olabilir.<\/li>\n<li><strong>Yanl\u0131\u015f socket ya da port tan\u0131mlanm\u0131\u015ft\u0131r:<\/strong> Nginx <code>127.0.0.1:3000<\/code> adresine bakarken uygulama ba\u015fka bir portta dinliyor olabilir.<\/li>\n<li><strong>Unix socket eri\u015fimi yoktur:<\/strong> Socket dosyas\u0131n\u0131n sahibi, grubu veya izinleri Nginx kullan\u0131c\u0131s\u0131n\u0131n eri\u015fimine uygun de\u011fildir.<\/li>\n<li><strong>Upstream zaman a\u015f\u0131m\u0131na u\u011fram\u0131\u015ft\u0131r:<\/strong> Uygulama a\u011f\u0131r bir sorgu \u00e7al\u0131\u015ft\u0131r\u0131yor, kilitleniyor ya da iste\u011fi verilen s\u00fcrede tamamlayam\u0131yordur.<\/li>\n<li><strong>Uygulama ge\u00e7ersiz HTTP yan\u0131t\u0131 \u00fcretmi\u015ftir:<\/strong> Yan\u0131t ba\u015fl\u0131klar\u0131 bozuk olabilir veya uygulama ba\u011flant\u0131y\u0131 cevap vermeden kapatabilir.<\/li>\n<li><strong>Kaynak yetersizli\u011fi vard\u0131r:<\/strong> RAM t\u00fckenmesi, OOM killer, CPU bask\u0131s\u0131, disk dolulu\u011fu veya dosya tan\u0131t\u0131c\u0131s\u0131 s\u0131n\u0131r\u0131 s\u00fcre\u00e7leri etkileyebilir.<\/li>\n<li><strong>Proxy katmanlar\u0131 uyu\u015fmuyordur:<\/strong> CDN, load balancer, Nginx ve uygulama sunucusunun timeout ya da ba\u011flant\u0131 ayarlar\u0131 birbirini tutmayabilir.<\/li>\n<\/ul>\n<p>502 g\u00f6rd\u00fc\u011f\u00fcn\u00fczde do\u011frudan Nginx&#8217;i yeniden ba\u015flatmak iyi bir te\u015fhis y\u00f6ntemi de\u011fildir. Servis yeniden ba\u015flad\u0131ktan sonra sayfa a\u00e7\u0131labilir; fakat k\u00f6k neden h\u00e2l\u00e2 oradad\u0131r. Loglar konu\u015fmadan terminaldeki restart d\u00fc\u011fmesine basmak, benim pek sevdi\u011fim bir y\u00f6ntem de\u011fil.<\/p>\n<h2 id=\"502-bad-gateway-hatasi-nasil-cozulur\">502 Bad Gateway hatas\u0131 nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/h2>\n<p>\u0130lk i\u015f, hatay\u0131 hangi katman\u0131n \u00fcretti\u011fini ay\u0131rmakt\u0131r. Alan ad\u0131 CDN \u00fczerinden ge\u00e7iyorsa CDN panelindeki hata mesaj\u0131 ile origin sunucunun mesaj\u0131 ayn\u0131 olmayabilir. Ben \u00f6nce iste\u011fi yerel origin&#8217;e, sonra d\u0131\u015f proxy \u00fczerinden kontrol ederim.<\/p>\n<h3>1. Servislerin durumunu kontrol edin<\/h3>\n<p>\u00d6nce web sunucusunu ve arka u\u00e7 servisini listeleyin. Da\u011f\u0131t\u0131ma g\u00f6re servis ad\u0131 de\u011fi\u015febilir; Ubuntu ve Debian&#8217;da PHP s\u00fcr\u00fcm\u00fcn\u00fcn komut i\u00e7inde do\u011fru olmas\u0131 gerekir.<\/p>\n<pre><code>sudo systemctl status nginx --no-pager\nsudo systemctl status php8.2-fpm --no-pager\nsudo ss -ltnp | grep -E ':(80|443|3000|8000)'<\/code><\/pre>\n<p><code>systemctl status<\/code> \u00e7\u0131kt\u0131s\u0131nda yaln\u0131zca <em>active<\/em> sat\u0131r\u0131na bakmay\u0131n. Son ba\u015flatma zaman\u0131, ana s\u00fcre\u00e7 PID&#8217;si ve son log sat\u0131rlar\u0131 da de\u011ferlidir. <code>ss<\/code> \u00e7\u0131kt\u0131s\u0131 uygulaman\u0131n ger\u00e7ekten bekledi\u011finiz portu dinleyip dinlemedi\u011fini g\u00f6sterir.<\/p>\n<p>Servis durmu\u015fsa \u00f6nce loglar\u0131 inceleyin, ard\u0131ndan kontroll\u00fc bi\u00e7imde ba\u015flat\u0131n:<\/p>\n<pre><code>sudo journalctl -u php8.2-fpm --since '30 minutes ago' --no-pager\nsudo systemctl restart php8.2-fpm\nsudo systemctl status php8.2-fpm --no-pager<\/code><\/pre>\n<p>Buradaki <code>restart<\/code> te\u015fhisin yerine ge\u00e7mez. Yeniden ba\u015flad\u0131ktan sonra hata kaybolsa bile \u00f6nceki loglarda bellek, yap\u0131land\u0131rma veya uygulama \u00e7\u00f6kmesi izini aray\u0131n.<\/p>\n<h3>2. Nginx veya Apache hata loglar\u0131n\u0131 okuyun<\/h3>\n<p>Nginx i\u00e7in yayg\u0131n hata logu yolu <code>\/var\/log\/nginx\/error.log<\/code> dosyas\u0131d\u0131r. Sanal host \u00f6zelinde farkl\u0131 bir dosya tan\u0131mlanm\u0131\u015f olabilir. Apache&#8217;de \u00e7o\u011fu Debian kurulumunda <code>\/var\/log\/apache2\/error.log<\/code> kullan\u0131l\u0131r.<\/p>\n<pre><code>sudo tail -n 80 \/var\/log\/nginx\/error.log\nsudo journalctl -u nginx --since '15 minutes ago' --no-pager\nsudo nginx -t<\/code><\/pre>\n<p><code>connect() failed<\/code>, Nginx&#8217;in upstream&#8217;e ba\u011flanamad\u0131\u011f\u0131n\u0131; <code>upstream timed out<\/code>, ba\u011flant\u0131 veya yan\u0131t i\u00e7in bekleme s\u00fcresinin a\u015f\u0131ld\u0131\u011f\u0131n\u0131; <code>permission denied<\/code> ise \u00e7o\u011funlukla Unix socket ya da dosya izinlerini incelemeniz gerekti\u011fini g\u00f6sterir.<\/p>\n<p><code>nginx -t<\/code> yap\u0131land\u0131rma s\u00f6zdizimini kontrol eder. Komut ba\u015far\u0131l\u0131 olsa bile upstream uygulamas\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kan\u0131tlamaz; yaln\u0131zca Nginx dosyalar\u0131n\u0131n okunabilir ve s\u00f6zdiziminin ge\u00e7erli oldu\u011funu s\u00f6yler.<\/p>\n<h3>3. Upstream servisine proxy&#8217;yi atlayarak ba\u011flan\u0131n<\/h3>\n<p>Uygulama TCP portunda \u00e7al\u0131\u015f\u0131yorsa do\u011frudan istek g\u00f6nderin:<\/p>\n<pre><code>curl -i --max-time 10 http:\/\/127.0.0.1:3000\/health\ncurl -i --max-time 10 http:\/\/127.0.0.1:8000\/<\/code><\/pre>\n<p>Uygulama Unix socket kullan\u0131yorsa Nginx yap\u0131land\u0131rmas\u0131ndaki socket yolunu do\u011frulay\u0131n. PHP-FPM i\u00e7in bir\u00e7ok Debian kurulumunda yol, s\u00fcr\u00fcme g\u00f6re <code>\/run\/php\/php8.2-fpm.sock<\/code> bi\u00e7imindedir.<\/p>\n<pre><code>grep -R 'fastcgi_pass\na' \/etc\/nginx\/sites-enabled\/ \/etc\/nginx\/conf.d\/ 2&gt;\/dev\/null\nsudo ls -l \/run\/php\/<\/code><\/pre>\n<p>Yukar\u0131daki ilk komutta sat\u0131r sonu nedeniyle sorun ya\u015famamak i\u00e7in ger\u00e7ek kullan\u0131mda deseni tek sat\u0131r yaz\u0131n:<\/p>\n<pre><code>grep -R -E 'fastcgi_pass|proxy_pass' \/etc\/nginx\/sites-enabled\/ \/etc\/nginx\/conf.d\/ 2&gt;\/dev\/null<\/code><\/pre>\n<p>Porta do\u011frudan istek beklenen durum kodunu d\u00f6nd\u00fcr\u00fcrken alan ad\u0131nda 502 g\u00f6r\u00fcyorsan\u0131z sorun b\u00fcy\u00fck ihtimalle proxy yap\u0131land\u0131rmas\u0131, socket izinleri, TLS veya timeout taraf\u0131ndad\u0131r. Do\u011frudan istek de ba\u015far\u0131s\u0131zsa Nginx&#8217;i kurcalamadan uygulama servisine d\u00f6n\u00fcn.<\/p>\n<h3>4. Socket izinlerini ve kullan\u0131c\u0131lar\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131n<\/h3>\n<p>FastCGI socket&#8217;i genellikle PHP-FPM taraf\u0131ndan olu\u015fturulur. Nginx worker s\u00fcreci ise <code>www-data<\/code> gibi farkl\u0131 bir kullan\u0131c\u0131yla \u00e7al\u0131\u015fabilir. Socket&#8217;in grup sahibi ve grup eri\u015fimi uyu\u015fmuyorsa Nginx upstream&#8217;e ba\u011flanamaz.<\/p>\n<pre><code>ps -o user,group,cmd -C nginx\nsudo stat \/run\/php\/php8.2-fpm.sock\nsudo grep -E '^(listen|listen.owner|listen.group|listen.mode)' \/etc\/php\/8.2\/fpm\/pool.d\/www.conf<\/code><\/pre>\n<p>\u0130zin sorunu g\u00f6rd\u00fc\u011f\u00fcn\u00fczde ilk refleksiniz <code>chmod 777<\/code> olmas\u0131n. Bu komut eri\u015fim modelini d\u00fczeltmez, yaln\u0131zca gere\u011finden fazla yetki verir. PHP-FPM pool ayar\u0131ndaki <code>listen.group<\/code> ile Nginx kullan\u0131c\u0131s\u0131n\u0131n grubu uyumlu olmal\u0131; de\u011fi\u015fiklikten sonra yap\u0131land\u0131rma do\u011frulan\u0131p servis kontroll\u00fc \u015fekilde yeniden y\u00fcklenmelidir.<\/p>\n<h3>5. Timeout ve kaynak kullan\u0131m\u0131n\u0131 inceleyin<\/h3>\n<p>Bir sorgu 60 saniye s\u00fcr\u00fcyorsa proxy timeout de\u011ferini rastgele y\u00fckseltmek yerine sorgunun neden yava\u015f oldu\u011funu bulun. Disk dolulu\u011fu, swap kullan\u0131m\u0131 ve RAM bask\u0131s\u0131 da 502&#8217;nin dolayl\u0131 nedenleri olabilir.<\/p>\n<pre><code>free -h\ndf -h\nsudo dmesg -T | grep -iE 'oom|killed process|out of memory'\nhtop<\/code><\/pre>\n<p><code>df -h<\/code> toplam disk kullan\u0131m\u0131n\u0131 g\u00f6sterir; hangi dizinin alan\u0131 t\u00fcketti\u011fini g\u00f6rmek i\u00e7in <code>ncdu<\/code> daha kullan\u0131\u015fl\u0131d\u0131r. Benim bir deploy s\u0131ras\u0131nda ya\u015fad\u0131\u011f\u0131m 502 vakas\u0131nda sorun uygulama kodu de\u011fil, staging san\u0131lan production sunucusuna yaz\u0131lan hatal\u0131 Nginx yap\u0131land\u0131rmas\u0131yd\u0131. K\u0131rm\u0131z\u0131 production prompt&#8217;u o g\u00fcnden sonra pazarl\u0131k konusu olmaktan \u00e7\u0131kt\u0131. \u00d6nce <code>nginx -t<\/code>, sonra reload.<\/p>\n<p>Kernel loglar\u0131nda OOM kayd\u0131 varsa uygulama i\u015flemi Linux taraf\u0131ndan \u00f6ld\u00fcr\u00fclm\u00fc\u015f olabilir. B\u00f6yle bir durumda Nginx timeout de\u011ferini art\u0131rmak i\u015fe yaramaz; PHP-FPM worker say\u0131s\u0131, uygulama belle\u011fi, swap ve VPS kaynaklar\u0131 birlikte de\u011ferlendirilmelidir.<\/p>\n<h2 id=\"nginx-apache-ve-uygulama-loglarinda-ne-aranir\">Nginx, Apache ve uygulama loglar\u0131nda ne aran\u0131r?<\/h2>\n<p>Her katman\u0131n farkl\u0131 bir soruya cevab\u0131 vard\u0131r: Nginx iste\u011fi ald\u0131 m\u0131, upstream&#8217;e ba\u011fland\u0131 m\u0131, uygulama iste\u011fi i\u015fledi mi, veritaban\u0131 cevap verdi mi? Ayn\u0131 zaman aral\u0131\u011f\u0131n\u0131 kullanarak loglar\u0131 yan yana incelemek te\u015fhisi h\u0131zland\u0131r\u0131r.<\/p>\n<table>\n<thead>\n<tr>\n<th>Log veya kontrol<\/th>\n<th>Bak\u0131lan soru<\/th>\n<th>Yayg\u0131n i\u015faret<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Nginx error.log<\/td>\n<td>Upstream&#8217;e ba\u011flant\u0131 kuruldu mu?<\/td>\n<td><code>connect() failed<\/code>, <code>upstream timed out<\/code><\/td>\n<\/tr>\n<tr>\n<td>PHP-FPM journal&#8217;i<\/td>\n<td>Worker \u00e7al\u0131\u015f\u0131yor ve istek al\u0131yor mu?<\/td>\n<td>\u00c7\u00f6kme, max children, pool veya socket hatas\u0131<\/td>\n<\/tr>\n<tr>\n<td>Uygulama logu<\/td>\n<td>\u0130stek uygulama i\u00e7inde hata veriyor mu?<\/td>\n<td>Exception, ba\u011flant\u0131 reddi, bellek hatas\u0131<\/td>\n<\/tr>\n<tr>\n<td>Kernel journal&#8217;i<\/td>\n<td>S\u00fcre\u00e7 sistem taraf\u0131ndan \u00f6ld\u00fcr\u00fcld\u00fc m\u00fc?<\/td>\n<td>OOM, I\/O hatas\u0131, dosya sistemi uyar\u0131s\u0131<\/td>\n<\/tr>\n<tr>\n<td>CDN veya load balancer logu<\/td>\n<td>Origin&#8217;e eri\u015filebildi mi?<\/td>\n<td>Origin timeout, TLS handshake hatas\u0131<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bir log sat\u0131r\u0131n\u0131 tek ba\u015f\u0131na yorumlamay\u0131n. Uygulamada g\u00f6r\u00fclen 500 ile Nginx&#8217;in kullan\u0131c\u0131ya g\u00f6sterdi\u011fi 502 farkl\u0131 katmanlar\u0131 i\u015faret eder. Uygulama HTTP 500 \u00fcretmi\u015f olabilir; Nginx ise uygulamaya hi\u00e7 ba\u011flanamad\u0131\u011f\u0131nda 502 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h2 id=\"502-ile-500-504-ve-503-arasindaki-fark-nedir\">502 ile 500, 504 ve 503 aras\u0131ndaki fark nedir?<\/h2>\n<p>Bu kodlar birbirine benzese de m\u00fcdahale noktas\u0131 de\u011fi\u015fir. Hata sayfas\u0131na bak\u0131p yanl\u0131\u015f servisi yeniden ba\u015flatmamak i\u00e7in ayr\u0131m\u0131 net tutmak gerekir.<\/p>\n<table>\n<thead>\n<tr>\n<th>Durum kodu<\/th>\n<th>Anlam\u0131<\/th>\n<th>\u0130lk kontrol<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>500 Internal Server Error<\/td>\n<td>Uygulama veya sunucu iste\u011fi i\u015flerken beklenmeyen hata verdi.<\/td>\n<td>Uygulama logu ve framework hatalar\u0131<\/td>\n<\/tr>\n<tr>\n<td>502 Bad Gateway<\/td>\n<td>Proxy, upstream&#8217;den ge\u00e7erli yan\u0131t alamad\u0131.<\/td>\n<td>Upstream portu, socket&#8217;i ve proxy error.log&#8217;u<\/td>\n<\/tr>\n<tr>\n<td>503 Service Unavailable<\/td>\n<td>Servis ge\u00e7ici olarak kullan\u0131lam\u0131yor veya iste\u011fi kabul edecek durumda de\u011fil.<\/td>\n<td>Servis durumu, bak\u0131m modu ve kaynaklar<\/td>\n<\/tr>\n<tr>\n<td>504 Gateway Timeout<\/td>\n<td>Proxy, upstream&#8217;den zaman\u0131nda yan\u0131t alamad\u0131.<\/td>\n<td>Yava\u015f sorgu, uygulama kilitlenmesi ve timeout&#8217;lar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ger\u00e7ek sistemlerde bu kodlar tamamen birbirinden kopuk de\u011fildir. PHP-FPM havuzu kaynak s\u0131n\u0131r\u0131na ula\u015ft\u0131\u011f\u0131nda 502, uzun s\u00fcren bir backend i\u015flemi i\u00e7in ise 504 g\u00f6rebilirsiniz. Nginx&#8217;teki <code>proxy_connect_timeout<\/code>, <code>proxy_read_timeout<\/code> ve FastCGI timeout ayarlar\u0131n\u0131n neyi bekledi\u011fini ay\u0131rmadan de\u011ferleri b\u00fcy\u00fctmek, sorunu yaln\u0131zca daha ge\u00e7 g\u00f6r\u00fcn\u00fcr h\u00e2le getirir.<\/p>\n<h2 id=\"docker-ve-reverse-proxy-arkasinda-502-nasil-cozulur\">Docker ve reverse proxy arkas\u0131nda 502 nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/h2>\n<p>Docker kullanan sunucularda s\u0131k kar\u015f\u0131la\u015ft\u0131\u011f\u0131m hata, konteyner portu ile host portunun kar\u0131\u015ft\u0131r\u0131lmas\u0131d\u0131r. Ayn\u0131 Docker a\u011f\u0131na ba\u011fl\u0131 Nginx \u00e7o\u011fu durumda host&#8217;un yay\u0131nlad\u0131\u011f\u0131 portu de\u011fil, servis ad\u0131n\u0131 ve konteynerin dinledi\u011fi portu kullanmal\u0131d\u0131r.<\/p>\n<pre><code>docker compose ps\ndocker compose logs --tail=100 app\ndocker inspect app --format '{{json .NetworkSettings.Networks}}'<\/code><\/pre>\n<p>Uygulama konteyner i\u00e7inde <code>3000<\/code> portunda dinliyorsa Nginx&#8217;in <code>proxy_pass http:\/\/app:3000;<\/code> kullanmas\u0131 gerekebilir. Uygulama yaln\u0131zca <code>127.0.0.1<\/code> \u00fczerinde dinliyorsa konteyner a\u011f\u0131ndan gelen ba\u011flant\u0131lar\u0131 kabul etmeyebilir; bind adresini de kontrol edin.<\/p>\n<p>Docker ile yeni \u00e7al\u0131\u015f\u0131yorsan\u0131z <strong><a href=\"https:\/\/www.vps.tc\/blog\/tr\/vps-docker-kurulumu-ilk-konteyner\/\">VPS&#8217;te Docker Kurulumu ve \u0130lk Konteyneri \u00c7al\u0131\u015ft\u0131rma<\/a><\/strong> yaz\u0131s\u0131ndaki a\u011f ve servis kontrolleri i\u015finize yarar. Konteynerin \u00e7al\u0131\u015f\u0131yor g\u00f6r\u00fcnmesi, uygulaman\u0131n sa\u011fl\u0131kl\u0131 oldu\u011fu anlam\u0131na gelmez; healthcheck, uygulama logu ve ayn\u0131 a\u011fdan yap\u0131lan <code>curl<\/code> testi birlikte de\u011ferlendirilmelidir.<\/p>\n<pre><code>docker compose exec nginx getent hosts app\ndocker compose exec nginx curl -i --max-time 5 http:\/\/app:3000\/health<\/code><\/pre>\n<p>\u0130lk komut servis ad\u0131n\u0131n \u00e7\u00f6z\u00fcmlendi\u011fini, ikinci komut ise Nginx konteynerinin uygulamaya ger\u00e7ekten eri\u015febildi\u011fini test eder. DNS \u00e7\u00f6z\u00fcl\u00fcyor fakat ba\u011flant\u0131 kurulam\u0131yorsa port veya bind adresi yanl\u0131\u015f olabilir.<\/p>\n<h2 id=\"cdn-kullanirken-502-hatasi-neden-gorulur\">CDN kullan\u0131rken 502 hatas\u0131 neden g\u00f6r\u00fcl\u00fcr?<\/h2>\n<p>CDN, taray\u0131c\u0131 ile origin sunucu aras\u0131na bir katman daha ekler. Taray\u0131c\u0131 CDN&#8217;e, CDN de sizin sunucunuza ba\u011flan\u0131r. Origin kapal\u0131ysa, yaln\u0131zca belirli IP&#8217;lerden eri\u015filebiliyorsa, TLS ayar\u0131 uyu\u015fmuyorsa veya firewall CDN adreslerini engelliyorsa CDN kendi 502 sayfas\u0131n\u0131 g\u00f6sterebilir.<\/p>\n<p>Kontrol s\u0131ras\u0131 \u015f\u00f6yle olabilir:<\/p>\n<ol>\n<li>Origin sunucunun IP adresine, uygun <code>Host<\/code> ba\u015fl\u0131\u011f\u0131yla yerelden istek g\u00f6nderin.<\/li>\n<li>CDN panelinde origin health check ve hata zaman\u0131n\u0131 kontrol edin.<\/li>\n<li>Web sunucusunun eri\u015fim logunda CDN iste\u011finin g\u00f6r\u00fcn\u00fcp g\u00f6r\u00fcnmedi\u011fine bak\u0131n.<\/li>\n<li>Origin firewall&#8217;\u0131n\u0131n CDN IP aral\u0131klar\u0131n\u0131 engellemedi\u011fini do\u011frulay\u0131n.<\/li>\n<li>Origin sertifikas\u0131n\u0131n CDN&#8217;in se\u00e7ti\u011fi TLS moduyla uyumlu oldu\u011funu kontrol edin.<\/li>\n<\/ol>\n<p>Alan ad\u0131n\u0131n DNS ve proxy davran\u0131\u015f\u0131n\u0131 anlamak i\u00e7in <strong><a href=\"https:\/\/www.vps.tc\/blog\/tr\/proxy-nedir-proxy-sunucu-ne-ise-yarar\/\">Proxy Nedir? Proxy Sunucu Ne \u0130\u015fe Yarar?<\/a><\/strong> ba\u015fl\u0131kl\u0131 yaz\u0131 yard\u0131mc\u0131 olacakt\u0131r. Taray\u0131c\u0131n\u0131z\u0131n DNS \u00e7\u00f6z\u00fcmlemesi ba\u015far\u0131l\u0131 olabilir; CDN&#8217;in origin&#8217;e yapt\u0131\u011f\u0131 ba\u011flant\u0131 yine de ba\u015far\u0131s\u0131z kalabilir.<\/p>\n<h2 id=\"yonetici-degil-ziyaretciyseniz-ne-yapabilirsiniz\">Y\u00f6netici de\u011fil, ziyaret\u00e7iyseniz ne yapabilirsiniz?<\/h2>\n<p>Bir web sitesinde 502 g\u00f6r\u00fcyorsan\u0131z sayfay\u0131 birka\u00e7 dakika sonra yenileyin ve m\u00fcmk\u00fcnse farkl\u0131 bir a\u011fdan deneyin. S\u00fcrekli yenilemek sunucunun \u00fczerindeki y\u00fck\u00fc art\u0131rabilir. Hata yaln\u0131zca tek sitede g\u00f6r\u00fcl\u00fcyor, ba\u015fka siteler a\u00e7\u0131l\u0131yorsa sorun b\u00fcy\u00fck ihtimalle site taraf\u0131ndad\u0131r.<\/p>\n<p>Site sahibiyseniz destek talebine \u015fu bilgileri ekleyin:<\/p>\n<ul>\n<li>Hatan\u0131n g\u00f6r\u00fcld\u00fc\u011f\u00fc tam URL ve saat bilgisi<\/li>\n<li>Hatan\u0131n t\u00fcm sayfalarda m\u0131, yaln\u0131zca tek endpoint&#8217;te mi olu\u015ftu\u011fu<\/li>\n<li>Taray\u0131c\u0131, mobil uygulama veya API istemcisi bilgisi<\/li>\n<li>Varsa request ID, CDN Ray ID veya sunucu logundaki zaman damgas\u0131<\/li>\n<li>Yak\u0131n zamanda yap\u0131lan deploy, DNS, SSL, firewall veya PHP s\u00fcr\u00fcm\u00fc de\u011fi\u015fiklikleri<\/li>\n<\/ul>\n<p>\u0130stemci taraf\u0131nda DNS temizlemek veya taray\u0131c\u0131 \u00f6nbelle\u011fini silmek, durmu\u015f bir upstream&#8217;i d\u00fczeltmez. Bu ad\u0131mlar eski bir proxy yan\u0131t\u0131ndan ya da yerel \u00e7\u00f6z\u00fcmleme probleminden \u015f\u00fcpheleniyorsan\u0131z anlaml\u0131d\u0131r.<\/p>\n<h2 id=\"502-hatasini-onlemek-icin-hangi-kontroller-yapilmali\">502 hatas\u0131n\u0131 \u00f6nlemek i\u00e7in hangi kontroller yap\u0131lmal\u0131?<\/h2>\n<p>Hata \u00e7\u0131kt\u0131ktan sonra m\u00fcdahale etmek kadar, olu\u015fmadan \u00f6nce sinyal \u00fcretmek de de\u011ferlidir. Benim kurdu\u011fum temel izleme d\u00fczeninde web iste\u011fi, uygulama servisi, kaynak kullan\u0131m\u0131 ve loglar ayr\u0131 ayr\u0131 g\u00f6zlenir.<\/p>\n<ul>\n<li><strong>Health endpoint:<\/strong> Uygulaman\u0131n yaln\u0131zca portu dinledi\u011fini de\u011fil, temel ba\u011f\u0131ml\u0131l\u0131klar\u0131yla cevap verebildi\u011fini test edin.<\/li>\n<li><strong>Servis izleme:<\/strong> PHP-FPM, Node.js, Docker ve Nginx durumlar\u0131n\u0131 monitoring&#8217;e ekleyin.<\/li>\n<li><strong>Log rotasyonu:<\/strong> <code>\/var<\/code> alan\u0131n\u0131n dolmas\u0131n\u0131 beklemeden disk kullan\u0131m alarm\u0131 koyun.<\/li>\n<li><strong>Kaynak takibi:<\/strong> RAM, swap, CPU, disk I\/O ve dosya sistemi dolulu\u011funu birlikte izleyin.<\/li>\n<li><strong>Timeout tasar\u0131m\u0131:<\/strong> CDN, load balancer, Nginx ve uygulama timeout de\u011ferlerini bilin\u00e7li bir s\u0131raya koyun.<\/li>\n<li><strong>Da\u011f\u0131t\u0131m kontrol\u00fc:<\/strong> Yeni s\u00fcr\u00fcm\u00fc do\u011frudan production&#8217;a g\u00f6ndermek yerine healthcheck ve geri d\u00f6n\u00fc\u015f plan\u0131 kullan\u0131n.<\/li>\n<li><strong>Yap\u0131land\u0131rma testi:<\/strong> Nginx i\u00e7in <code>nginx -t<\/code>, Docker Compose i\u00e7in yap\u0131land\u0131rma do\u011frulamas\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<\/ul>\n<p>Bir sunucuda yaln\u0131zca uptime grafi\u011fine bakmak yetmez. Uptime y\u00fcksekken PHP-FPM havuzu dolabilir; Nginx ayakta oldu\u011fu i\u00e7in genel monitoring ye\u015fil kal\u0131rken ziyaret\u00e7iler 502 g\u00f6rebilir. Sentetik HTTP kontrolleri bu ayr\u0131m\u0131 yakalar.<\/p>\n<p>Benim s\u0131k yapt\u0131\u011f\u0131m k\u00fc\u00e7\u00fck hata, deploy sonras\u0131nda yaln\u0131zca ana sayfay\u0131 kontrol etmekti. Sa\u011fl\u0131k endpoint&#8217;i 200 d\u00f6nerken veritaban\u0131 kullanan ger\u00e7ek sayfada upstream timeout olu\u015fmu\u015ftu. \u015eimdi hem basit healthcheck hem de veritaban\u0131na dokunan d\u00fc\u015f\u00fck maliyetli bir sentetik istek izliyorum.<\/p>\n<h2 id=\"sik-sorulan-sorular\">S\u0131k Sorulan Sorular<\/h2>\n<h3>502 Bad Gateway hatas\u0131 genellikle kimden kaynaklan\u0131r?<\/h3>\n<p>\u00c7o\u011funlukla reverse proxy ile arka u\u00e7 uygulamas\u0131 aras\u0131ndaki ileti\u015fimden kaynaklan\u0131r. Uygulaman\u0131n \u00e7\u00f6kmesi, yanl\u0131\u015f port, socket izni, kaynak yetersizli\u011fi veya CDN-origin ba\u011flant\u0131s\u0131 da ayn\u0131 kodu \u00fcretebilir.<\/p>\n<h3>502 hatas\u0131 hosting firmas\u0131 taraf\u0131ndan m\u0131 \u00e7\u00f6z\u00fcl\u00fcr?<\/h3>\n<p>Payla\u015f\u0131ml\u0131 hosting kullan\u0131yorsan\u0131z PHP-FPM veya web sunucusu katman\u0131na eri\u015fiminiz olmayabilir; hosting deste\u011fi servis ve sunucu loglar\u0131n\u0131 incelemelidir. Kendi VPS&#8217;inizde ise Nginx, uygulama servisi, firewall ve kaynak kullan\u0131m\u0131n\u0131 sizin kontrol etmeniz gerekir.<\/p>\n<h3>502 hatas\u0131n\u0131 d\u00fczeltmek i\u00e7in Nginx yeniden ba\u015flat\u0131l\u0131r m\u0131?<\/h3>\n<p>Yap\u0131land\u0131rma de\u011fi\u015fikli\u011finden sonra kontroll\u00fc reload veya restart gerekebilir; fakat \u00f6nce error.log ve upstream servis durumu incelenmelidir. Log okumadan yeniden ba\u015flatmak ge\u00e7ici bir d\u00fczelme sa\u011flasa bile ger\u00e7ek nedeni saklayabilir.<\/p>\n<h3>502 ile 504 aras\u0131ndaki temel fark nedir?<\/h3>\n<p>502, proxy&#8217;nin upstream&#8217;den ge\u00e7ersiz veya kullan\u0131lamayan bir yan\u0131t ald\u0131\u011f\u0131n\u0131; 504 ise upstream&#8217;den zaman\u0131nda yan\u0131t alamad\u0131\u011f\u0131n\u0131 anlat\u0131r. \u0130ki durumda da uygulama, a\u011f ba\u011flant\u0131s\u0131 ve proxy loglar\u0131 kontrol edilir. 504&#8217;te yava\u015f sorgu ve timeout incelemesi daha \u00f6ne \u00e7\u0131kar.<\/p>\n<p>Ben 502 g\u00f6rd\u00fc\u011f\u00fcmde ilk olarak servisi de\u011fil yolu izliyorum: istemci, proxy, socket veya port, uygulama ve en son ba\u011f\u0131ml\u0131l\u0131klar. Hangi halkada cevap kesiliyorsa m\u00fcdahale de orada ba\u015fl\u0131yor.<\/p>\n<h2 id=\"kaynaklar\">Kaynaklar<\/h2>\n<ul class=\"aiw-sources\">\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9110.html#name-502-bad-gateway\" target=\"_blank\" rel=\"noopener nofollow\">RFC 9110 &#8211; 502 Bad Gateway<\/a> \u2014 rfc-editor.org<\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status\/502\" target=\"_blank\" rel=\"noopener nofollow\">MDN &#8211; 502 Bad Gateway<\/a> \u2014 developer.mozilla.org<\/li>\n<li><a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_proxy_module.html\" target=\"_blank\" rel=\"noopener nofollow\">NGINX &#8211; HTTP Proxy Module<\/a> \u2014 nginx.org<\/li>\n<li><a href=\"https:\/\/docs.docker.com\/compose\/how-tos\/networking\/\" target=\"_blank\" rel=\"noopener nofollow\">Docker Docs &#8211; Networking in Compose<\/a> \u2014 docs.docker.com<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>502 Bad Gateway hatas\u0131n\u0131n ne anlama geldi\u011fini, Nginx ve PHP-FPM loglar\u0131n\u0131n nas\u0131l incelenece\u011fini, Docker ve CDN kaynakl\u0131 sorunlar\u0131n nas\u0131l \u00e7\u00f6z\u00fclece\u011fini anlat\u0131yorum.<\/p>\n","protected":false},"author":2,"featured_media":536,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[723],"tags":[1751,1245,41,1108,1679,166,114],"class_list":["post-538","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nasil-yapilir","tag-502-bad-gateway","tag-docker","tag-nginx","tag-php-fpm","tag-reverse-proxy","tag-sunucu-yonetimi","tag-vps"],"lang":"tr","translations":{"tr":538,"en":539},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/comments?post=538"}],"version-history":[{"count":1,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/538\/revisions"}],"predecessor-version":[{"id":540,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/538\/revisions\/540"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media\/536"}],"wp:attachment":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media?parent=538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/categories?post=538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/tags?post=538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}