{"id":1055,"date":"2026-10-05T11:15:32","date_gmt":"2026-10-05T11:15:32","guid":{"rendered":"https:\/\/www.vps.tc\/blog\/?p=1055"},"modified":"2026-10-05T09:50:51","modified_gmt":"2026-10-05T09:50:51","slug":"nginx-reverse-proxy-kurulumu","status":"publish","type":"post","link":"https:\/\/www.vps.tc\/blog\/tr\/nginx-reverse-proxy-kurulumu\/","title":{"rendered":"Nginx Reverse Proxy Kurulumu: Ad\u0131m Ad\u0131m Rehber"},"content":{"rendered":"<div class=\"aiw-summary\" id=\"aiw-ozet\">\n<p class=\"aiw-summary-title\">H\u0131zl\u0131 \u00d6zet &#8211; Nginx Reverse Proxy Kurulumu<\/p>\n<p>Nginx, d\u0131\u015far\u0131dan gelen HTTP veya HTTPS isteklerini localhost&#039;ta \u00e7al\u0131\u015fan uygulamaya aktar\u0131r. G\u00fcvenilir bir kurulum i\u00e7in DNS, arka u\u00e7 servisi, proxy ba\u015fl\u0131klar\u0131, TLS ve hata loglar\u0131 birlikte kontrol edilmelidir.<\/p>\n<ul>\n<li><strong>Arka ucu haz\u0131rlay\u0131n<\/strong> \u2014 Uygulamay\u0131 m\u00fcmk\u00fcnse 127.0.0.1 \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131n ve yerel curl iste\u011fiyle do\u011frulay\u0131n.<\/li>\n<li><strong>Site blo\u011fu olu\u015fturun<\/strong> \u2014 server_name, proxy_pass ve istemci IP ba\u015fl\u0131klar\u0131n\u0131 ilgili site dosyas\u0131na ekleyin.<\/li>\n<li><strong>Portlar\u0131 s\u0131n\u0131rlay\u0131n<\/strong> \u2014 D\u0131\u015far\u0131ya genellikle yaln\u0131zca TCP 80 ve 443 portlar\u0131n\u0131 a\u00e7\u0131n; uygulama portunu yay\u0131nlamay\u0131n.<\/li>\n<li><strong>Yap\u0131land\u0131rmay\u0131 test edin<\/strong> \u2014 Her de\u011fi\u015fiklikten sonra nginx -t \u00e7al\u0131\u015ft\u0131r\u0131p ba\u015far\u0131l\u0131 kontrolden sonra reload uygulay\u0131n.<\/li>\n<li><strong>HTTPS ekleyin<\/strong> \u2014 Sertifikay\u0131 kurup HTTP isteklerini 301 ile HTTPS&#039;e y\u00f6nlendirin ve yenilemeyi test edin.<\/li>\n<li><strong>Loglar\u0131 izleyin<\/strong> \u2014 502, 504 ve 413 gibi hatalar\u0131 Nginx ile uygulama loglar\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131rarak inceleyin.<\/li>\n<\/ul>\n<\/div>\n<p class=\"aiw-lead\">Nginx reverse proxy, d\u0131\u015f istekleri 80 veya 443 numaral\u0131 portta kar\u015f\u0131lay\u0131p localhost&#039;ta \u00e7al\u0131\u015fan uygulamaya aktar\u0131r. Ubuntu&#039;da Nginx&#039;i y\u00fckleyin, ayr\u0131 bir server blo\u011fu olu\u015fturun, proxy_pass ve istemci ba\u015fl\u0131klar\u0131n\u0131 tan\u0131mlay\u0131n, nginx -t ile do\u011frulay\u0131n ve yaln\u0131zca ba\u015far\u0131l\u0131 testten sonra reload uygulay\u0131n.<\/p>\n<div class=\"aiw-toc\" style=\"border:1px solid #dbe3ea;border-radius:8px;padding:16px 20px;margin:0 0 28px\">\n<p class=\"aiw-toc-head\"><strong>\u0130\u00e7indekiler<\/strong><span class=\"aiw-toc-meta\"> \u00b7 11 dk okuma<\/span><\/p>\n<ol style=\"margin:10px 0 0;padding-left:22px\">\n<li><a href=\"#nginx-reverse-proxy-ne-ise-yarar\">Nginx reverse proxy ne i\u015fe yarar?<\/a><\/li>\n<li><a href=\"#kurulumdan-once-hangi-bilgiler-hazirlanmali\">Kurulumdan \u00f6nce hangi bilgiler haz\u0131rlanmal\u0131?<\/a><\/li>\n<li><a href=\"#ubuntuda-nginx-reverse-proxy-kurulumu-nasil-yapilir\">Ubuntu&#039;da Nginx reverse proxy kurulumu nas\u0131l yap\u0131l\u0131r?<\/a><\/li>\n<li><a href=\"#istemci-ipsi-ve-proxy-basliklari-nasil-ayarlanir\">\u0130stemci IP&#039;si ve proxy ba\u015fl\u0131klar\u0131 nas\u0131l ayarlan\u0131r?<\/a><\/li>\n<li><a href=\"#https-ve-alan-adi-yonlendirmesi-nasil-eklenir\">HTTPS ve alan ad\u0131 y\u00f6nlendirmesi nas\u0131l eklenir?<\/a><\/li>\n<li><a href=\"#websocket-ve-uzun-baglantilar-icin-ne-degisir\">WebSocket ve uzun ba\u011flant\u0131lar i\u00e7in ne de\u011fi\u015fir?<\/a><\/li>\n<li><a href=\"#statik-dosyalar-alt-yollar-ve-birden-fazla-uygulama\">Statik dosyalar, alt yollar ve birden fazla uygulama<\/a><\/li>\n<li><a href=\"#hatalar-nasil-incelenir-ve-performans-nasil-izlenir\">Hatalar nas\u0131l incelenir ve performans nas\u0131l izlenir?<\/a><\/li>\n<li><a href=\"#yayina-almadan-once-guvenlik-kontrolu\">Yay\u0131na almadan \u00f6nce g\u00fcvenlik kontrol\u00fc<\/a><\/li>\n<li><a href=\"#yayina-almadan-once-sunlari-kontrol-edin\">Yay\u0131na Almadan \u00d6nce \u015eunlar\u0131 Kontrol Edin<\/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=\"nginx-reverse-proxy-ne-ise-yarar\">Nginx reverse proxy ne i\u015fe yarar?<\/h2>\n<p>Reverse proxy, istemci ile uygulama sunucusu aras\u0131nda duran ve HTTP isteklerini arka u\u00e7 servisine ileten katmand\u0131r. Nginx bu g\u00f6revle 80 ve 443 numaral\u0131 portlarda ba\u011flant\u0131lar\u0131 kar\u015f\u0131layabilir; uygulama ise yaln\u0131zca <code>127.0.0.1:3000<\/code>, <code>127.0.0.1:8000<\/code> veya \u00f6zel bir Unix socket \u00fczerinden \u00e7al\u0131\u015f\u0131r. B\u00f6ylece TLS sonland\u0131rma, alan ad\u0131 y\u00f6nlendirmesi, eri\u015fim g\u00fcnl\u00fckleri ve temel g\u00fcvenlik kurallar\u0131 tek bir noktada y\u00f6netilir.<\/p>\n<p>Kurulum birka\u00e7 dosya d\u00fczenlemekten ibaret g\u00f6r\u00fcn\u00fcr. As\u0131l dikkat edilmesi gerekenler istemci IP bilgisinin arka uca do\u011fru aktar\u0131lmas\u0131, WebSocket ba\u011flant\u0131lar\u0131n\u0131n kopmamas\u0131, DNS kayd\u0131n\u0131n do\u011fru sunucuyu g\u00f6stermesi ve yap\u0131land\u0131rman\u0131n yeniden y\u00fcklemeden \u00f6nce do\u011frulanmas\u0131d\u0131r.<\/p>\n<p>HTTP isteklerinin hangi alan ad\u0131ndan geldi\u011fini anlamak i\u00e7in <a href=\"https:\/\/www.vps.tc\/blog\/tr\/domain-ve-url-farki\/\">Domain ve URL Fark\u0131 Nedir?<\/a> ba\u015fl\u0131\u011f\u0131ndaki ayr\u0131m i\u015fe yarar: Nginx sunucu ad\u0131na g\u00f6re do\u011fru <code>server<\/code> blo\u011funu se\u00e7er, URL&#8217;nin yol k\u0131sm\u0131 ise \u00e7o\u011funlukla <code>location<\/code> kurallar\u0131yla i\u015flenir.<\/p>\n<p><strong>Dinleme adresini belirleyin<\/strong> &#8211; Uygulamay\u0131 m\u00fcmk\u00fcnse d\u0131\u015f a\u011fa a\u00e7madan yaln\u0131zca localhost \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131n.<\/p>\n<h2 id=\"kurulumdan-once-hangi-bilgiler-hazirlanmali\">Kurulumdan \u00f6nce hangi bilgiler haz\u0131rlanmal\u0131?<\/h2>\n<p>\u00d6rnek yap\u0131land\u0131rmada Ubuntu 22.04 veya 24.04, Nginx ve 3000 numaral\u0131 portta \u00e7al\u0131\u015fan bir uygulama kullan\u0131lacakt\u0131r. Da\u011f\u0131t\u0131m farkl\u0131 olsa da dosya yollar\u0131 Debian tabanl\u0131 sistemlerde genellikle ayn\u0131d\u0131r. <a href=\"https:\/\/www.vps.tc\/blog\/tr\/ubuntu-nginx-kurulumu-ilk-yapilandirma\/\">Ubuntu&#8217;da Nginx Kurulumu ve \u0130lk Yap\u0131land\u0131rma<\/a> ba\u015fl\u0131\u011f\u0131nda paket kurulumunun temel ad\u0131mlar\u0131 ayr\u0131ca ele al\u0131n\u0131r; burada reverse proxy katman\u0131na odaklan\u0131l\u0131r.<\/p>\n<p>\u00d6nce alan ad\u0131n\u0131n A veya AAAA kayd\u0131n\u0131n VPS adresini g\u00f6sterdi\u011fini do\u011frulay\u0131n. Yetkili DNS cevab\u0131n\u0131 g\u00f6rmek i\u00e7in a\u015fa\u011f\u0131daki komutlar yeterlidir:<\/p>\n<pre><code>dig +short example.com A\ndig +short example.com AAAA<\/code><\/pre>\n<p>Beklenen \u00e7\u0131kt\u0131 VPS&#8217;nin IPv4 veya IPv6 adresidir. Eski bir adres d\u00f6n\u00fcyorsa Nginx yap\u0131land\u0131rmas\u0131n\u0131 de\u011fi\u015ftirmek sorunu \u00e7\u00f6zmez; istekler h\u00e2l\u00e2 ba\u015fka bir sunucuya gidebilir. DNS de\u011fi\u015fikliklerinin yay\u0131lma s\u00fcresi ve \u00f6nbellek davran\u0131\u015f\u0131 i\u00e7in <a href=\"https:\/\/www.vps.tc\/blog\/tr\/dns-yayilmasi-ne-kadar-surer\/\">DNS Yay\u0131lmas\u0131 Nedir? Ne Kadar S\u00fcrer?<\/a> ba\u015fl\u0131\u011f\u0131na bak\u0131labilir.<\/p>\n<p>Arka u\u00e7 uygulamas\u0131n\u0131 Nginx&#8217;i devreye almadan test edin:<\/p>\n<pre><code>ss -ltnp | grep ':3000'\ncurl --fail --silent --show-error http:\/\/127.0.0.1:3000\/<\/code><\/pre>\n<p><code>ss<\/code> \u00e7\u0131kt\u0131s\u0131nda uygulama s\u00fcrecinin 3000 numaral\u0131 portu dinledi\u011fi g\u00f6r\u00fclmelidir. <code>curl<\/code> komutu <code>2xx<\/code> veya uygulaman\u0131n beklenen ba\u015fka bir HTTP durum kodunu d\u00f6nd\u00fcrmelidir. Hi\u00e7bir s\u00fcre\u00e7 dinlemiyorsa Nginx&#8217;e ge\u00e7meden \u00f6nce uygulama servisini d\u00fczeltin.<\/p>\n<p><strong>Arka ucu do\u011frulay\u0131n<\/strong> &#8211; Nginx yap\u0131land\u0131rmas\u0131na ge\u00e7meden \u00f6nce localhost iste\u011finin ba\u015far\u0131l\u0131 oldu\u011funu kan\u0131tlay\u0131n.<\/p>\n<div class=\"aiw-callout aiw-callout-tip\">\n<p class=\"aiw-callout-label\">\u0130pucu<\/p>\n<p>\u0130pucu: Yap\u0131land\u0131rmay\u0131 kaydetmeden \u00f6nce hedef servisi curl http:\/\/127.0.0.1:3000\/ ile test edin. Bu istek ba\u015far\u0131s\u0131zsa Nginx taraf\u0131nda de\u011fi\u015fiklik yapmak te\u015fhisi zorla\u015ft\u0131r\u0131r.<\/p>\n<\/div>\n<h2 id=\"ubuntuda-nginx-reverse-proxy-kurulumu-nasil-yapilir\">Ubuntu&#8217;da Nginx reverse proxy kurulumu nas\u0131l yap\u0131l\u0131r?<\/h2>\n<h3>Paketi y\u00fckleyin ve servisi etkinle\u015ftirin<\/h3>\n<p>Ubuntu depolar\u0131ndaki paketi kurup servisin durumunu kontrol edin:<\/p>\n<pre><code>sudo apt update\nsudo apt install nginx\nsudo systemctl enable --now nginx\nsudo systemctl status nginx --no-pager<\/code><\/pre>\n<p>Varsay\u0131lan kurulum 80 numaral\u0131 portta dinler. G\u00fcvenlik duvar\u0131 kullan\u0131l\u0131yorsa HTTP ve HTTPS profillerinin a\u00e7\u0131k oldu\u011fundan emin olun. UFW etkinse \u015fu komutlar kullan\u0131labilir:<\/p>\n<pre><code>sudo ufw allow 'Nginx Full'\nsudo ufw status verbose<\/code><\/pre>\n<p>Bu kural TCP 80 ve TCP 443 portlar\u0131n\u0131 kapsar. Uygulaman\u0131n 3000 numaral\u0131 portunu internete a\u00e7mak gereksizdir; arka u\u00e7 yaln\u0131zca localhost&#8217;a ba\u011fl\u0131ysa d\u0131\u015far\u0131dan eri\u015filemez.<\/p>\n<h3>Site dosyas\u0131n\u0131 olu\u015fturun<\/h3>\n<p>Debian tabanl\u0131 Nginx paketleri etkin siteleri <code>\/etc\/nginx\/sites-enabled\/<\/code> alt\u0131ndaki sembolik ba\u011flant\u0131larla y\u00fckler. \u00d6nce yap\u0131land\u0131rma dosyas\u0131n\u0131 olu\u015fturun:<\/p>\n<pre><code>sudo vim \/etc\/nginx\/sites-available\/example.com<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki temel yap\u0131land\u0131rma, <code>example.com<\/code> alan ad\u0131ndan gelen istekleri 3000 numaral\u0131 porttaki servise iletir:<\/p>\n<pre><code>server {\n    listen 80;\n    listen [::]:80;\n\n    server_name example.com www.example.com;\n\n    access_log \/var\/log\/nginx\/example.com.access.log;\n    error_log  \/var\/log\/nginx\/example.com.error.log warn;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_http_version 1.1;\n\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n\n        proxy_read_timeout 60s;\n        proxy_connect_timeout 5s;\n    }\n}<\/code><\/pre>\n<p><code>proxy_pass<\/code> hedef servisi belirler. <code>Host<\/code> ba\u015fl\u0131\u011f\u0131 uygulaman\u0131n hangi alan ad\u0131yla \u00e7a\u011fr\u0131ld\u0131\u011f\u0131n\u0131 korur; <code>X-Real-IP<\/code> ve <code>X-Forwarded-For<\/code> istemci adresini arka uca ta\u015f\u0131r. Bu ba\u015fl\u0131klar uygulaman\u0131n g\u00f6rd\u00fc\u011f\u00fc istemci bilgisini etkiler; uygulama yaln\u0131zca g\u00fcvenilen proxy katmanlar\u0131ndan gelen de\u011ferlere g\u00fcvenecek \u015fekilde ayarlanmal\u0131d\u0131r.<\/p>\n<p><code>proxy_read_timeout<\/code>, Nginx&#8217;in arka u\u00e7tan yan\u0131t bekleme s\u00fcresidir. Bu de\u011fer uygulaman\u0131n uzun s\u00fcren i\u015fleriyle birlikte de\u011ferlendirilmelidir. Rastgele birka\u00e7 dakikaya y\u00fckseltmek, kopmu\u015f ba\u011flant\u0131lar\u0131n daha uzun s\u00fcre kaynak t\u00fcketmesine yol a\u00e7abilir.<\/p>\n<p>Sembolik ba\u011flant\u0131y\u0131 olu\u015fturup varsay\u0131lan siteyi kald\u0131r\u0131n:<\/p>\n<pre><code>sudo ln -s \/etc\/nginx\/sites-available\/example.com \/etc\/nginx\/sites-enabled\/example.com\nsudo rm -f \/etc\/nginx\/sites-enabled\/default\nsudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\n<p><code>nginx -t<\/code> ba\u015far\u0131l\u0131 olmadan <code>reload<\/code> \u00e7al\u0131\u015ft\u0131rmay\u0131n. Ba\u015far\u0131l\u0131 \u00e7\u0131kt\u0131 genellikle <code>syntax is ok<\/code> ve <code>test is successful<\/code> sat\u0131rlar\u0131n\u0131 i\u00e7erir. Yeniden y\u00fckleme mevcut ba\u011flant\u0131lar\u0131 genellikle kesmeden yeni yap\u0131land\u0131rmay\u0131 devreye al\u0131r; <code>restart<\/code> ise servis s\u00fcrecini durdurup yeniden ba\u015flat\u0131r.<\/p>\n<p><strong>Yap\u0131land\u0131rmay\u0131 s\u0131nay\u0131n<\/strong> &#8211; Her de\u011fi\u015fiklikten \u00f6nce <code>sudo nginx -t<\/code> \u00e7al\u0131\u015ft\u0131r\u0131n ve yaln\u0131zca ba\u015far\u0131l\u0131 kontrolden sonra reload uygulay\u0131n.<\/p>\n<h2 id=\"istemci-ipsi-ve-proxy-basliklari-nasil-ayarlanir\">\u0130stemci IP&#8217;si ve proxy ba\u015fl\u0131klar\u0131 nas\u0131l ayarlan\u0131r?<\/h2>\n<p>Reverse proxy arkas\u0131ndaki uygulama, TCP ba\u011flant\u0131s\u0131n\u0131n do\u011frudan Nginx&#8217;ten geldi\u011fini g\u00f6r\u00fcr. Uygulama loglar\u0131nda ger\u00e7ek istemci adresinin g\u00f6r\u00fcnmesi i\u00e7in ba\u015fl\u0131klar\u0131n aktar\u0131lmas\u0131 gerekir. <code>$proxy_add_x_forwarded_for<\/code>, mevcut <code>X-Forwarded-For<\/code> zincirine Nginx&#8217;in g\u00f6rd\u00fc\u011f\u00fc adresi ekler; yaln\u0131zca <code>$remote_addr<\/code> kullanmak \u00f6nceki g\u00fcvenilir proxy bilgisini kaybettirebilir.<\/p>\n<p>Uygulama HTTPS ba\u011flant\u0131s\u0131n\u0131 Nginx sonland\u0131rd\u0131ktan sonra HTTP olarak al\u0131yorsa <code>X-Forwarded-Proto: https<\/code> ba\u015fl\u0131\u011f\u0131 \u00f6nem kazan\u0131r. Uygulama bu ba\u015fl\u0131\u011f\u0131 tan\u0131m\u0131yorsa g\u00fcvenli URL \u00fcretirken <code>http:\/\/<\/code> kullanabilir, oturum \u00e7erezlerine <code>Secure<\/code> niteli\u011fi eklemeyebilir veya sonsuz HTTPS y\u00f6nlendirmesi olu\u015fturabilir.<\/p>\n<p>Arka u\u00e7 ayn\u0131 makinede \u00e7al\u0131\u015f\u0131yorsa ba\u015fl\u0131klar\u0131n d\u0131\u015far\u0131dan do\u011frudan manip\u00fcle edilmesi zorla\u015f\u0131r. Nginx ba\u015fka bir CDN veya y\u00fck dengeleyicinin arkas\u0131ndaysa g\u00fcvenilen proxy adresleri ayr\u0131ca tan\u0131mlanmal\u0131, uygulaman\u0131n gelen her <code>X-Forwarded-For<\/code> de\u011ferini sorgusuz kabul etmesine izin verilmemelidir.<\/p>\n<p>RFC 7239, standartla\u015ft\u0131r\u0131lm\u0131\u015f <code>Forwarded<\/code> ba\u015fl\u0131\u011f\u0131n\u0131n s\u00f6z dizimini tan\u0131mlar. Pratikte bir\u00e7ok uygulama ve web sunucusu h\u00e2l\u00e2 <code>X-Forwarded-For<\/code>, <code>X-Forwarded-Proto<\/code> ve <code>X-Real-IP<\/code> ba\u015fl\u0131klar\u0131n\u0131 bekler. Kullan\u0131lacak bi\u00e7imi uygulaman\u0131n dok\u00fcmantasyonuyla e\u015fle\u015ftirin.<\/p>\n<p><strong>G\u00fcven s\u0131n\u0131r\u0131n\u0131 tan\u0131mlay\u0131n<\/strong> &#8211; Uygulaman\u0131n yaln\u0131zca kendi reverse proxy katman\u0131ndan gelen istemci IP&#8217;sine g\u00fcvenmesini sa\u011flay\u0131n.<\/p>\n<h2 id=\"https-ve-alan-adi-yonlendirmesi-nasil-eklenir\">HTTPS ve alan ad\u0131 y\u00f6nlendirmesi nas\u0131l eklenir?<\/h2>\n<p>HTTP testi tamamland\u0131ktan sonra TLS sertifikas\u0131 eklenebilir. Sertifika al\u0131nmadan \u00f6nce DNS kayd\u0131 do\u011fru sunucuyu g\u00f6stermeli ve TCP 80 portu ACME HTTP-01 do\u011frulamas\u0131 i\u00e7in eri\u015filebilir olmal\u0131d\u0131r. Certbot gibi ara\u00e7larla sertifika \u00fcretilecekse otomatik de\u011fi\u015fiklikten \u00f6nce mevcut Nginx dosyalar\u0131n\u0131n yede\u011fini al\u0131n.<\/p>\n<p>HTTPS kullanan yap\u0131land\u0131rman\u0131n temel bi\u00e7imi \u015f\u00f6yledir:<\/p>\n<pre><code>server {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name example.com www.example.com;\n\n    ssl_certificate     \/etc\/letsencrypt\/live\/example.com\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/example.com\/privkey.pem;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\n\nserver {\n    listen 80;\n    listen [::]:80;\n    server_name example.com www.example.com;\n    return 301 https:\/\/$host$request_uri;\n}<\/code><\/pre>\n<p>HTTP blo\u011fundaki <code>301<\/code> y\u00f6nlendirmesi yolu ve sorgu dizesini koruyarak istemciyi HTTPS&#8217;e ta\u015f\u0131r. Sertifika dosyalar\u0131 hen\u00fcz yoksa <code>nginx -t<\/code> ba\u015far\u0131s\u0131z olur; TLS blo\u011funu sertifika \u00fcretiminden \u00f6nce etkinle\u015ftirmeyin.<\/p>\n<p>Birden fazla alan ad\u0131 kullan\u0131lacaksa her alan ad\u0131n\u0131n sertifikada yer ald\u0131\u011f\u0131n\u0131 kontrol edin. Sertifika yenileme i\u015finden sonra yap\u0131land\u0131rma testi ve Nginx reload ad\u0131mlar\u0131 otomatik g\u00f6revin par\u00e7as\u0131 olmal\u0131d\u0131r. Sertifika dosyalar\u0131n\u0131n yenilenmesi, \u00e7al\u0131\u015fan Nginx s\u00fcrecinin yeni dosyay\u0131 kendili\u011finden okudu\u011fu anlam\u0131na gelmez.<\/p>\n<p><strong>HTTPS&#8217;i do\u011frulay\u0131n<\/strong> &#8211; Sertifika, alan ad\u0131, HTTP y\u00f6nlendirmesi ve otomatik yenileme ak\u0131\u015f\u0131n\u0131 birlikte test edin.<\/p>\n<h2 id=\"websocket-ve-uzun-baglantilar-icin-ne-degisir\">WebSocket ve uzun ba\u011flant\u0131lar i\u00e7in ne de\u011fi\u015fir?<\/h2>\n<p>Standart HTTP isteklerinde temel proxy yap\u0131land\u0131rmas\u0131 yeterlidir. WebSocket ise HTTP y\u00fckseltmesiyle farkl\u0131 bir ba\u011flant\u0131 ak\u0131\u015f\u0131 kullan\u0131r. Nginx&#8217;in <code>Upgrade<\/code> ve <code>Connection<\/code> ba\u015fl\u0131klar\u0131n\u0131 arka uca iletmesi gerekir.<\/p>\n<pre><code>map $http_upgrade $connection_upgrade {\n    default upgrade;\n    ''      close;\n}\n\nserver {\n    listen 443 ssl;\n    server_name app.example.com;\n\n    location \/socket.io\/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection $connection_upgrade;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_read_timeout 3600s;\n    }\n}<\/code><\/pre>\n<p><code>map<\/code> blo\u011fu <code>http<\/code> ba\u011flam\u0131nda, genellikle <code>\/etc\/nginx\/nginx.conf<\/code> i\u00e7indeki <code>http {}<\/code> b\u00f6l\u00fcm\u00fcnde bulunmal\u0131d\u0131r. Site dosyas\u0131n\u0131n i\u00e7ine eklenirse Nginx ba\u011flam hatas\u0131 verebilir. WebSocket yolu uygulamaya g\u00f6re <code>\/socket.io\/<\/code>, <code>\/ws\/<\/code> veya farkl\u0131 bir de\u011fer olabilir.<\/p>\n<p>Uzun timeout de\u011feri ba\u011flant\u0131n\u0131n sa\u011fl\u0131kl\u0131 oldu\u011funu kan\u0131tlamaz. Uygulama heartbeat g\u00f6ndermeli, monitoring sistemi a\u00e7\u0131k ba\u011flant\u0131lar\u0131n say\u0131s\u0131n\u0131 ve hata oran\u0131n\u0131 izlemelidir. <a href=\"https:\/\/www.vps.tc\/blog\/tr\/vpste-prometheus-grafana-kurulumu\/\">VPS&#8217;te Prometheus ve Grafana ile \u0130zleme<\/a> ba\u015fl\u0131\u011f\u0131, bu metrikleri g\u00f6r\u00fcn\u00fcr k\u0131lacak temel yakla\u015f\u0131m\u0131 a\u00e7\u0131klar.<\/p>\n<p><strong>Y\u00fckseltmeyi s\u0131n\u0131rlay\u0131n<\/strong> &#8211; <code>Upgrade<\/code> ba\u015fl\u0131klar\u0131n\u0131 yaln\u0131zca ger\u00e7ekten WebSocket kullanan <code>location<\/code> bloklar\u0131nda etkinle\u015ftirin.<\/p>\n<h2 id=\"statik-dosyalar-alt-yollar-ve-birden-fazla-uygulama\">Statik dosyalar, alt yollar ve birden fazla uygulama<\/h2>\n<p>Bir VPS \u00fczerinde birden fazla uygulama \u00e7al\u0131\u015ft\u0131r\u0131labilir. Nginx her alan ad\u0131 i\u00e7in ayr\u0131 <code>server<\/code> blo\u011fu se\u00e7ebilir; ayn\u0131 alan ad\u0131n\u0131n farkl\u0131 yollar\u0131 da ayr\u0131 upstream hedeflerine g\u00f6nderilebilir.<\/p>\n<pre><code>upstream api_backend {\n    server 127.0.0.1:8000;\n    keepalive 16;\n}\n\nserver {\n    listen 443 ssl;\n    server_name example.com;\n\n    root \/var\/www\/example.com\/public;\n\n    location \/assets\/ {\n        try_files $uri =404;\n        access_log off;\n        expires 7d;\n    }\n\n    location \/api\/ {\n        proxy_pass http:\/\/api_backend;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/code><\/pre>\n<p><code>proxy_pass<\/code> sat\u0131r\u0131n\u0131n URI ile veya URI olmadan kullan\u0131lmas\u0131, yolun arka uca aktar\u0131lma bi\u00e7imini etkiler. \u00d6rne\u011fin <code>location \/api\/<\/code> i\u00e7inde <code>proxy_pass http:\/\/127.0.0.1:8000;<\/code> kullan\u0131ld\u0131\u011f\u0131nda istek yolu korunur; <code>proxy_pass http:\/\/127.0.0.1:8000\/;<\/code> kullan\u0131ld\u0131\u011f\u0131nda e\u015fle\u015fen b\u00f6l\u00fcm\u00fcn de\u011fi\u015ftirilmesi s\u00f6z konusu olabilir. API&#8217;nin <code>\/api\/users<\/code> yerine <code>\/users<\/code> bekleyip beklemedi\u011fini k\u00fc\u00e7\u00fck bir curl testiyle do\u011frulay\u0131n.<\/p>\n<p>Statik dosyalarda <code>try_files $uri =404;<\/code> kullan\u0131lmas\u0131, bulunmayan dosyalar\u0131n uygulamaya gereksiz yere g\u00f6nderilmesini \u00f6nler. \u00d6nbellek s\u00fcresini dosya adland\u0131rma stratejisiyle birlikte belirleyin; i\u00e7erik de\u011fi\u015fti\u011finde ayn\u0131 URL kullan\u0131lacaksa uzun <code>expires<\/code> de\u011ferleri eski dosyalar\u0131n taray\u0131c\u0131da kalmas\u0131na yol a\u00e7abilir.<\/p>\n<p><strong>Yol e\u015fle\u015fmesini test edin<\/strong> &#8211; Her <code>location<\/code> i\u00e7in beklenen istemci yolunu ve arka ucun ald\u0131\u011f\u0131 ger\u00e7ek yolu ayr\u0131 ayr\u0131 do\u011frulay\u0131n.<\/p>\n<div class=\"aiw-callout aiw-callout-warn\">\n<p class=\"aiw-callout-label\">Dikkat<\/p>\n<p>Dikkat: proxy_pass sat\u0131r\u0131n\u0131n sonunda bulunan e\u011fik \u00e7izgi, istek yolunun arka uca nas\u0131l aktar\u0131laca\u011f\u0131n\u0131 de\u011fi\u015ftirebilir. \/api\/ ve \/api gibi yollar\u0131 k\u00fc\u00e7\u00fck bir curl testiyle do\u011frulamadan yay\u0131na almay\u0131n.<\/p>\n<\/div>\n<h2 id=\"hatalar-nasil-incelenir-ve-performans-nasil-izlenir\">Hatalar nas\u0131l incelenir ve performans nas\u0131l izlenir?<\/h2>\n<p>Bir proxy hatas\u0131nda servisi hemen yeniden ba\u015flatmak yerine \u00fc\u00e7 katman\u0131 ay\u0131r\u0131n: istemci ile Nginx, Nginx ile arka u\u00e7 ve uygulaman\u0131n kendi loglar\u0131. \u0130lk testleri alan ad\u0131 yerine do\u011frudan yerel hedefe, ard\u0131ndan Nginx&#8217;e ve en son HTTPS alan ad\u0131na y\u00f6neltin.<\/p>\n<pre><code>curl -I http:\/\/127.0.0.1:3000\/\ncurl -I -H 'Host: example.com' http:\/\/127.0.0.1\/\ncurl -vk https:\/\/example.com\/\nsudo tail -f \/var\/log\/nginx\/example.com.error.log\nsudo journalctl -u nginx -n 100 --no-pager<\/code><\/pre>\n<p>\u0130lk komut uygulaman\u0131n durumunu, ikinci komut do\u011fru <code>server_name<\/code> se\u00e7imini, \u00fc\u00e7\u00fcnc\u00fc komut ise TLS el s\u0131k\u0131\u015fmas\u0131n\u0131 ve y\u00f6nlendirmeleri g\u00f6sterir. <code>502 Bad Gateway<\/code> \u00e7o\u011funlukla Nginx&#8217;in arka uca ba\u011flanamad\u0131\u011f\u0131n\u0131, uygulaman\u0131n kapal\u0131 oldu\u011funu, yanl\u0131\u015f port veya socket kullan\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6sterir. <code>504 Gateway Timeout<\/code> ise ba\u011flant\u0131n\u0131n kurulup arka u\u00e7 yan\u0131t\u0131n\u0131n zaman\u0131nda gelmemesiyle ili\u015fkilidir; uygulama loglar\u0131 incelenmeden timeout de\u011ferini art\u0131rmak do\u011fru te\u015fhis de\u011fildir.<\/p>\n<p>Access loglarda istek s\u00fcresi ve upstream s\u00fcresi g\u00f6r\u00fclebilir. Daha ayr\u0131nt\u0131l\u0131 \u00f6l\u00e7\u00fcm i\u00e7in log format\u0131na <code>$request_time<\/code>, <code>$upstream_connect_time<\/code> ve <code>$upstream_response_time<\/code> de\u011fi\u015fkenleri eklenebilir:<\/p>\n<pre><code>log_format proxy_timing '$remote_addr - $host [$time_iso8601] '\n                        '\"$request\" $status $body_bytes_sent '\n                        'rt=$request_time '\n                        'uct=$upstream_connect_time '\n                        'urt=$upstream_response_time';<\/code><\/pre>\n<p>Bu format\u0131 <code>http<\/code> ba\u011flam\u0131nda tan\u0131mlay\u0131p ilgili <code>server<\/code> blo\u011funda <code>access_log<\/code> sat\u0131r\u0131na uygulay\u0131n. Ham loglar\u0131 uzun s\u00fcre saklamak disk t\u00fcketimini art\u0131r\u0131r; logrotate ayarlar\u0131n\u0131n ve disk alarm\u0131n\u0131n birlikte \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edin.<\/p>\n<p>Nginx&#8217;i CDN ile birlikte kullan\u0131yorsan\u0131z istemci IP&#8217;si, \u00f6nbellek ba\u015fl\u0131klar\u0131 ve HTTPS y\u00f6nlendirmeleri iki proxy katman\u0131nda farkl\u0131la\u015fabilir. <a href=\"https:\/\/www.vps.tc\/blog\/tr\/cdn-nedir-web-sitesini-nasil-hizlandirir\/\">CDN Nedir? Web Sitesini Nas\u0131l H\u0131zland\u0131r\u0131r?<\/a> ba\u015fl\u0131\u011f\u0131ndaki \u00f6nbellek katman\u0131 ile origin sunucu ayr\u0131m\u0131, bu mimarinin s\u0131n\u0131rlar\u0131n\u0131 anlamaya yard\u0131mc\u0131 olur.<\/p>\n<p><strong>Katmanl\u0131 te\u015fhis yap\u0131n<\/strong> &#8211; \u00d6nce arka ucu, sonra Nginx&#8217;i, ard\u0131ndan TLS ve varsa CDN katman\u0131n\u0131 ayr\u0131 ayr\u0131 \u00f6l\u00e7\u00fcn.<\/p>\n<div class=\"aiw-callout aiw-callout-example\">\n<p class=\"aiw-callout-label\">\u00d6rnek<\/p>\n<p>\u00d6rnek senaryo: Uygulama 127.0.0.1:3000 \u00fczerinde \u00e7al\u0131\u015f\u0131yor, Nginx 443&#039;\u00fc dinliyor ve istemci 502 g\u00f6r\u00fcyor. \u00d6nce ss -ltnp | grep &#039;:3000&#039; ile portu, ard\u0131ndan journalctl -u nginx ve uygulama loglar\u0131n\u0131 kontrol edin; timeout de\u011ferini rastgele y\u00fckseltmeyin.<\/p>\n<\/div>\n<h2 id=\"yayina-almadan-once-guvenlik-kontrolu\">Yay\u0131na almadan \u00f6nce g\u00fcvenlik kontrol\u00fc<\/h2>\n<p>Reverse proxy uygulama portunu gizler, fakat tek ba\u015f\u0131na g\u00fcvenlik duvar\u0131 de\u011fildir. Y\u00f6netim paneli, veritaban\u0131 ve debug endpoint&#8217;leri internete a\u00e7\u0131k b\u0131rak\u0131lmamal\u0131d\u0131r. Uygulaman\u0131n <code>127.0.0.1<\/code> \u00fczerinde dinlemesi iyi bir ba\u015flang\u0131\u00e7t\u0131r; ayr\u0131 sunucudaki arka u\u00e7 i\u00e7in yaln\u0131zca Nginx sunucusunun \u00f6zel IP&#8217;sine izin veren g\u00fcvenlik duvar\u0131 kural\u0131 gerekir.<\/p>\n<p>HTTP ba\u015fl\u0131klar\u0131n\u0131 sabit bir re\u00e7ete gibi eklemek yerine uygulaman\u0131n beklentisini do\u011frulay\u0131n. <code>Host<\/code> de\u011ferini kullan\u0131c\u0131 girdisi gibi kullanan uygulamalarda izin verilen alan adlar\u0131n\u0131 a\u00e7\u0131k\u00e7a tan\u0131mlay\u0131n. Dosya y\u00fckleme yapan servislerde Nginx&#8217;in <code>client_max_body_size<\/code> de\u011feri uygulama limitinden d\u00fc\u015f\u00fckse istemci <code>413 Request Entity Too Large<\/code> alabilir; PHP veya uygulama limitini y\u00fckseltmek Nginx s\u0131n\u0131r\u0131n\u0131 otomatik olarak de\u011fi\u015ftirmez.<\/p>\n<p>Yap\u0131land\u0131rma dosyalar\u0131n\u0131n izinlerini gereksiz yere geni\u015fletmeyin. Sertifika \u00f6zel anahtar\u0131 yaln\u0131zca root ve Nginx worker s\u00fcrecinin ihtiya\u00e7 duydu\u011fu kullan\u0131c\u0131 taraf\u0131ndan okunabilmelidir. SSH portunu de\u011fi\u015ftirmek veya <code>chmod 777<\/code> \u00e7al\u0131\u015ft\u0131rmak proxy g\u00fcvenli\u011finin yerine ge\u00e7mez.<\/p>\n<p>Da\u011f\u0131t\u0131mdan \u00f6nce yap\u0131land\u0131rmay\u0131 yedekleyin:<\/p>\n<pre><code>sudo cp -a \/etc\/nginx \/etc\/nginx.backup.$(date +%F-%H%M)\nsudo nginx -t\nsudo systemctl reload nginx\ncurl --fail --silent --show-error -o \/dev\/null -w '%{http_code}\\n' https:\/\/example.com\/<\/code><\/pre>\n<p>Son <code>curl<\/code> komutu yaln\u0131zca HTTP durum kodunu yazd\u0131r\u0131r. Uygulama g\u00f6vdesinin do\u011fru oldu\u011funu kan\u0131tlamaz; kritik bir yay\u0131nda giri\u015f, statik dosya, API ve WebSocket ak\u0131\u015flar\u0131n\u0131 ayr\u0131ca deneyin.<\/p>\n<p><strong>Geri d\u00f6n\u00fc\u015f plan\u0131n\u0131 haz\u0131rlay\u0131n<\/strong> &#8211; Eski dosyay\u0131 saklay\u0131n, de\u011fi\u015fikli\u011fi reload ile uygulay\u0131n ve ba\u015far\u0131s\u0131zl\u0131kta \u00f6nceki yap\u0131land\u0131rmaya d\u00f6n\u00fcn.<\/p>\n<div class=\"aiw-callout aiw-callout-field\">\n<p class=\"aiw-callout-label\">Sahadan not<\/p>\n<p>Bir gece staging sand\u0131\u011f\u0131m production sunucusunda Nginx dosyas\u0131n\u0131 de\u011fi\u015ftirmek \u00fczereydim. K\u0131rm\u0131z\u0131 prompt&#039;taki hostname ve nginx -T \u00e7\u0131kt\u0131s\u0131n\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131nca yanl\u0131\u015f makinede oldu\u011fumu fark ettim; de\u011fi\u015fikli\u011fi durdurup do\u011fru sunucuya ge\u00e7tim ve o g\u00fcnden beri yay\u0131ndan \u00f6nce bu iki kontrol\u00fc birlikte yap\u0131yorum.<\/p>\n<\/div>\n<h2 id=\"yayina-almadan-once-sunlari-kontrol-edin\">Yay\u0131na Almadan \u00d6nce \u015eunlar\u0131 Kontrol Edin<\/h2>\n<ul class=\"aiw-checklist\">\n<li>DNS A ve AAAA kay\u0131tlar\u0131n\u0131 VPS adresiyle e\u015fle\u015ftirin.<\/li>\n<li>Arka u\u00e7 servisini localhost \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<li>Nginx server blo\u011funda alan ad\u0131n\u0131 do\u011fru yaz\u0131n.<\/li>\n<li>proxy_set_header sat\u0131rlar\u0131n\u0131 uygulaman\u0131z\u0131n beklentisiyle kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/li>\n<li>sudo nginx -t komutunu ba\u015far\u0131l\u0131 \u00e7\u0131kt\u0131 alana kadar d\u00fczeltin.<\/li>\n<li>HTTP, HTTPS, API ve WebSocket ak\u0131\u015flar\u0131n\u0131 ayr\u0131 ayr\u0131 test edin.<\/li>\n<li>Eski yap\u0131land\u0131rmay\u0131 saklay\u0131p geri d\u00f6n\u00fc\u015f komutunu haz\u0131r tutun.<\/li>\n<\/ul>\n<div class=\"aiw-cta\">\n<p>Kurulumu \u00f6nce bir test alan ad\u0131nda ve yerel uygulama portunda deneyin. Trafik art\u0131nca log s\u00fcrelerini ve upstream hata oranlar\u0131n\u0131 izleyerek timeout, cache ve \u00f6l\u00e7ekleme kararlar\u0131n\u0131 \u00f6l\u00e7\u00fcmlere dayand\u0131r\u0131n.<\/p>\n<p class=\"aiw-cta-action\"><a href=\"https:\/\/www.vps.tc\/tr\/vps\">VPS paketlerini inceleyin<\/a><\/p>\n<\/div>\n<h2 id=\"sik-sorulan-sorular\">S\u0131k Sorulan Sorular<\/h2>\n<div class=\"aiw-faq\">\n<details class=\"aiw-faq-item\" open>\n<summary>Nginx reverse proxy nedir?<\/summary>\n<p>Nginx reverse proxy, istemci ile uygulama sunucusu aras\u0131nda \u00e7al\u0131\u015fan bir web sunucusudur. \u0130stekleri 80 veya 443 numaral\u0131 portlarda kar\u015f\u0131lar ve bunlar\u0131 localhost&#039;taki ya da \u00f6zel a\u011fdaki arka uca iletir. TLS sonland\u0131rma, alan ad\u0131 y\u00f6nlendirmesi, eri\u015fim loglar\u0131 ve istemci IP ba\u015fl\u0131klar\u0131n\u0131n aktar\u0131m\u0131 bu katmanda yap\u0131labilir.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Nginx reverse proxy kurulumu i\u00e7in hangi portlar a\u00e7\u0131lmal\u0131?<\/summary>\n<p>Genellikle d\u0131\u015f a\u011fdan TCP 80 ve TCP 443 portlar\u0131na izin verilir. TCP 80, HTTP y\u00f6nlendirmesi veya ACME HTTP-01 do\u011frulamas\u0131 i\u00e7in kullan\u0131labilir; TCP 443 HTTPS trafi\u011fini ta\u015f\u0131r. Uygulaman\u0131n 3000 veya 8000 gibi arka u\u00e7 portlar\u0131 yaln\u0131zca localhost&#039;ta dinlemeli ya da g\u00fcvenlik duvar\u0131yla sadece Nginx sunucusuna a\u00e7\u0131lmal\u0131d\u0131r.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Nginx&#039;te 502 Bad Gateway hatas\u0131 nas\u0131l \u00e7\u00f6z\u00fcl\u00fcr?<\/summary>\n<p>\u00d6nce arka u\u00e7 servisinin \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 ss -ltnp ve curl http:\/\/127.0.0.1:3000\/ ile kontrol edin. Ard\u0131ndan proxy_pass adresi, portu veya Unix socket yolunu uygulaman\u0131n ger\u00e7ek dinleme adresiyle kar\u015f\u0131la\u015ft\u0131r\u0131n. \/var\/log\/nginx\/ alt\u0131ndaki error log, ba\u011flant\u0131 reddi, DNS hatas\u0131 veya socket izin sorunu hakk\u0131nda ayr\u0131nt\u0131 verir.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Nginx reverse proxy arkas\u0131nda ger\u00e7ek istemci IP&#039;si nas\u0131l al\u0131n\u0131r?<\/summary>\n<p>Nginx yap\u0131land\u0131rmas\u0131nda genellikle proxy_set_header X-Real-IP $remote_addr; ve proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; kullan\u0131l\u0131r. HTTPS bilgisini ta\u015f\u0131mak i\u00e7in X-Forwarded-Proto $scheme eklenir. Uygulama bu ba\u015fl\u0131klara yaln\u0131zca g\u00fcvenilen proxy&#039;den geldiklerinde g\u00fcvenmelidir; d\u0131\u015far\u0131dan gelen de\u011ferler sorgusuz kabul edilmemelidir.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Nginx reverse proxy WebSocket destekler mi?<\/summary>\n<p>Evet. WebSocket ba\u011flant\u0131lar\u0131 i\u00e7in ilgili location blo\u011funda proxy_http_version 1.1, Upgrade ve Connection ba\u015fl\u0131klar\u0131 aktar\u0131lmal\u0131d\u0131r. Uzun s\u00fcre a\u00e7\u0131k kalan ba\u011flant\u0131larda proxy_read_timeout de\u011feri uygulaman\u0131n heartbeat aral\u0131\u011f\u0131na g\u00f6re se\u00e7ilir. Bu ayar\u0131 t\u00fcm siteye uygulamak yerine yaln\u0131zca WebSocket kullanan yola eklemek daha kontroll\u00fcd\u00fcr.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Nginx yap\u0131land\u0131rmas\u0131 de\u011fi\u015fince restart m\u0131 reload mu yap\u0131lmal\u0131?<\/summary>\n<p>Dosya de\u011fi\u015fikli\u011finden sonra \u00f6nce sudo nginx -t ile s\u00f6z dizimini ve dosya referanslar\u0131n\u0131 kontrol edin. Test ba\u015far\u0131l\u0131ysa sudo systemctl reload nginx mevcut worker s\u00fcre\u00e7lerini kontroll\u00fc bi\u00e7imde yeniler ve aktif ba\u011flant\u0131lar\u0131 genellikle kesmez. restart servis s\u00fcrecini durdurup ba\u015flatt\u0131\u011f\u0131 i\u00e7in k\u0131sa bir kesinti olu\u015fturabilir; yaln\u0131zca reload yetersiz kald\u0131\u011f\u0131nda tercih edilmelidir.<\/p>\n<\/details>\n<\/div>\n<h2 id=\"kaynaklar\">Kaynaklar<\/h2>\n<ul class=\"aiw-sources\">\n<li><a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_proxy_module.html\" target=\"_blank\" rel=\"noopener\">NGINX &#8211; ngx_http_proxy_module<\/a> \u2014 nginx.org<\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc7239\" target=\"_blank\" rel=\"noopener\">RFC 7239 &#8211; Forwarded HTTP Extension<\/a> \u2014 rfc-editor.org<\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/X-Forwarded-For\" target=\"_blank\" rel=\"noopener\">MDN &#8211; X-Forwarded-For<\/a> \u2014 developer.mozilla.org<\/li>\n<li><a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_upstream_module.html\" target=\"_blank\" rel=\"noopener\">NGINX &#8211; ngx_http_upstream_module<\/a> \u2014 nginx.org<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ubuntu \u00fczerinde Nginx reverse proxy kurulumunu; server blo\u011fu, proxy ba\u015fl\u0131klar\u0131, HTTPS, WebSocket, log analizi ve g\u00fcvenlik ayarlar\u0131yla ele al\u0131r.<\/p>\n","protected":false},"author":2,"featured_media":1053,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[157],"tags":[],"class_list":["post-1055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting"],"lang":"tr","translations":{"tr":1055,"en":1056},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/1055","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=1055"}],"version-history":[{"count":1,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/1055\/revisions"}],"predecessor-version":[{"id":1057,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/1055\/revisions\/1057"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media\/1053"}],"wp:attachment":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media?parent=1055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/categories?post=1055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/tags?post=1055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}