{"id":40856,"date":"2026-03-01T20:40:56","date_gmt":"2026-03-01T17:40:56","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=40856"},"modified":"2026-03-01T20:40:56","modified_gmt":"2026-03-01T17:40:56","slug":"docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/","title":{"rendered":"Docker A\u00e7\u0131klamas\u0131: Nginx&#8217;i Konteynerize Etme ve Ters Proxy Olarak Kullanma"},"content":{"rendered":"<p><body><\/p>\n<h2>Docker A\u00e7\u0131klamas\u0131: Nginx&#8217;i Konteynerize Etme ve Ters Proxy Olarak Kullanma<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131l\u0131m d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilmesi, da\u011f\u0131t\u0131lmas\u0131 ve y\u00f6netilmesi s\u00fcre\u00e7leri her zamankinden daha karma\u015f\u0131k hale gelmi\u015ftir. Geli\u015ftiriciler, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sendromuyla s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131rken, operasyon ekipleri farkl\u0131 ba\u011f\u0131ml\u0131l\u0131klar ve ortam tutars\u0131zl\u0131klar\u0131yla m\u00fccadele etmektedir. \u0130\u015fte tam bu noktada <strong>Docker<\/strong> ve <strong>konteynerizasyon<\/strong> devreye girerek, yaz\u0131l\u0131m ya\u015fam d\u00f6ng\u00fcs\u00fcne devrim niteli\u011finde bir \u00e7\u00f6z\u00fcm sunar. Docker, uygulamalar\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131yla birlikte izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 bir ortamda \u00e7al\u0131\u015ft\u0131rmay\u0131 m\u00fcmk\u00fcn k\u0131lar. Bu sayede, geli\u015ftirme ortam\u0131ndan test ortam\u0131na ve nihayetinde \u00fcretim ortam\u0131na kadar her a\u015famada ayn\u0131 uygulaman\u0131n ayn\u0131 \u015fekilde \u00e7al\u0131\u015faca\u011f\u0131ndan emin olabiliriz.<\/p>\n<p>Bu makalede, Docker&#8217;\u0131n temel prensiplerini derinlemesine inceleyecek, ard\u0131ndan y\u00fcksek performansl\u0131 bir web sunucusu ve ters proxy olan <strong>Nginx<\/strong>&#8216;i Docker ile nas\u0131l konteynerize edece\u011fimizi ad\u0131m ad\u0131m g\u00f6sterece\u011fiz. \u00d6zellikle, Nginx&#8217;i birden fazla arka u\u00e7 uygulamas\u0131n\u0131 tek bir eri\u015fim noktas\u0131 \u00fczerinden y\u00f6nlendiren bir ters proxy (reverse proxy) olarak nas\u0131l yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131 detayland\u0131raca\u011f\u0131z. Docker Compose kullanarak \u00e7oklu konteyner uygulamalar\u0131n\u0131 nas\u0131l y\u00f6netece\u011fimizi de ele alarak, modern uygulama da\u011f\u0131t\u0131m pratiklerinin temel ta\u015flar\u0131n\u0131 \u00f6\u011frenmi\u015f olaca\u011f\u0131z. Bu rehber, hem Docker&#8217;a yeni ba\u015flayanlar hem de Nginx&#8217;i konteynerize edilmi\u015f bir ortamda etkin bir \u015fekilde kullanmak isteyen deneyimli geli\u015ftiriciler ve sistem y\u00f6neticileri i\u00e7in kapsaml\u0131 bir kaynak olmay\u0131 hedeflemektedir.<\/p>\n<h3>Docker Temelleri<\/h3>\n<p>Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 k\u00fc\u00e7\u00fck, hafif ve ta\u015f\u0131nabilir birimler olan konteynerler i\u00e7inde paketlemek i\u00e7in kullan\u0131lan a\u00e7\u0131k kaynakl\u0131 bir platformdur. Konteynerizasyon, sanal makineler (VM&#8217;ler) gibi geleneksel sanalla\u015ft\u0131rma y\u00f6ntemlerine k\u0131yasla \u00f6nemli avantajlar sunar.<\/p>\n<h4>Docker Nedir?<\/h4>\n<p>Docker&#8217;\u0131n temelini olu\u015fturan birka\u00e7 anahtar kavram bulunmaktad\u0131r:<\/p>\n<p>*   <strong>Konteyner (Container):<\/strong> Bir uygulaman\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilen, ba\u011f\u0131ms\u0131z bir birimidir. Uygulaman\u0131n kodu, \u00e7al\u0131\u015fma zaman\u0131, sistem ara\u00e7lar\u0131, k\u00fct\u00fcphaneler ve ayarlar dahil olmak \u00fczere \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken her \u015feyi i\u00e7erir. Konteynerler, ana i\u015fletim sistemi \u00e7ekirde\u011fini payla\u015f\u0131r ancak kendi izole edilmi\u015f dosya sistemlerine, a\u011f aray\u00fczlerine ve s\u00fcre\u00e7 alanlar\u0131na sahiptir.<br \/>\n*   <strong>\u0130maj (Image):<\/strong> Bir konteyner olu\u015fturmak i\u00e7in kullan\u0131lan \u015fablondur. \u0130majlar, uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve konfig\u00fcrasyonlar\u0131 i\u00e7erir ve genellikle bir Dockerfile kullan\u0131larak olu\u015fturulur. \u0130majlar sabittir (immutable) ve bir kez olu\u015fturulduktan sonra de\u011fi\u015fmezler.<br \/>\n*   <strong>Dockerfile:<\/strong> Bir Docker imaj\u0131n\u0131n nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 tan\u0131mlayan metin tabanl\u0131 bir betiktir. Ad\u0131m ad\u0131m talimatlar i\u00e7erir: hangi temel imaj\u0131n kullan\u0131laca\u011f\u0131, hangi dosyalar\u0131n kopyalanaca\u011f\u0131, hangi komutlar\u0131n \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131 vb.<br \/>\n*   <strong>Docker Engine:<\/strong> Konteynerleri olu\u015fturan, \u00e7al\u0131\u015ft\u0131ran ve y\u00f6neten temel Docker bile\u015fenidir. Bir sunucuda veya geli\u015ftirme makinesinde \u00e7al\u0131\u015f\u0131r ve Docker CLI (Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc) arac\u0131l\u0131\u011f\u0131yla etkile\u015fime girilir.<br \/>\n*   <strong>Docker Hub:<\/strong> Docker imajlar\u0131 i\u00e7in bulut tabanl\u0131 bir kay\u0131t defteridir (registry). Geli\u015ftiriciler, kendi imajlar\u0131n\u0131 depolayabilir, payla\u015fabilir ve ba\u015fkalar\u0131n\u0131n imajlar\u0131n\u0131 \u00e7ekebilir.<\/p>\n<h4>Neden Docker?<\/h4>\n<p>Docker&#8217;\u0131n pop\u00fclaritesi, sundu\u011fu bir dizi \u00f6nemli avantajdan kaynaklanmaktad\u0131r:<\/p>\n<p>*   <strong>Tutarl\u0131l\u0131k (Consistency):<\/strong> Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 garanti eder. Uygulama, Docker imaj\u0131 i\u00e7inde paketlendi\u011fi i\u00e7in, her ortamda ayn\u0131 ba\u011f\u0131ml\u0131l\u0131klar ve konfig\u00fcrasyonlarla \u00e7al\u0131\u015f\u0131r. Bu, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sorununu ortadan kald\u0131r\u0131r.<br \/>\n*   <strong>\u0130zolasyon (Isolation):<\/strong> Her konteyner, di\u011fer konteynerlerden ve ana sistemden izole edilmi\u015ftir. Bu, farkl\u0131 uygulamalar\u0131n veya farkl\u0131 versiyonlar\u0131n\u0131n ayn\u0131 sunucuda \u00e7ak\u0131\u015fmadan \u00e7al\u0131\u015fabilmesini sa\u011flar.<br \/>\n*   <strong>Ta\u015f\u0131nabilirlik (Portability):<\/strong> Bir Docker imaj\u0131, herhangi bir Docker Engine y\u00fckl\u00fc makinede \u00e7al\u0131\u015fabilir. Bu, uygulamalar\u0131n bulut ortamlar\u0131, \u015firket i\u00e7i sunucular veya geli\u015ftirici makineleri aras\u0131nda kolayca ta\u015f\u0131nabilmesini sa\u011flar.<br \/>\n*   <strong>Kaynak Verimlili\u011fi (Resource Efficiency):<\/strong> Sanal makinelerden farkl\u0131 olarak, konteynerler kendi i\u015fletim sistemlerini i\u00e7ermez; bunun yerine ana bilgisayar\u0131n \u00e7ekirde\u011fini payla\u015f\u0131r. Bu, daha az disk alan\u0131, bellek ve CPU t\u00fcketimi anlam\u0131na gelir, b\u00f6ylece ayn\u0131 donan\u0131m \u00fczerinde daha fazla uygulama \u00e7al\u0131\u015ft\u0131r\u0131labilir.<br \/>\n*   <strong>H\u0131zl\u0131 Da\u011f\u0131t\u0131m (Rapid Deployment):<\/strong> Konteynerler \u00e7ok h\u0131zl\u0131 bir \u015fekilde ba\u015flat\u0131labilir ve durdurulabilir. Bu, CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r ve uygulamalar\u0131n daha s\u0131k ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131na olanak tan\u0131r.<br \/>\n*   <strong>Versiyonlama ve Geri D\u00f6n\u00fc\u015f (Versioning and Rollback):<\/strong> Docker imajlar\u0131 versiyonlanabilir. Bu, uygulaman\u0131n farkl\u0131 versiyonlar\u0131n\u0131 kolayca y\u00f6netmeyi ve sorun ya\u015fand\u0131\u011f\u0131nda \u00f6nceki bir versiyona h\u0131zla geri d\u00f6nmeyi sa\u011flar.<\/p>\n<h3>Nginx Temelleri ve Ters Proxy Kavram\u0131<\/h3>\n<p>Nginx (Engine-X olarak telaffuz edilir), y\u00fcksek performansl\u0131, a\u00e7\u0131k kaynakl\u0131 bir web sunucusu, ters proxy, y\u00fck dengeleyici ve HTTP \u00f6nbelle\u011fi olarak i\u015flev g\u00f6ren pop\u00fcler bir yaz\u0131l\u0131md\u0131r. \u00d6zellikle yo\u011fun trafikli web siteleri i\u00e7in tasarlanm\u0131\u015f olup, d\u00fc\u015f\u00fck bellek t\u00fcketimi ve e\u015f zamanl\u0131 ba\u011flant\u0131lar\u0131 etkin bir \u015fekilde y\u00f6netme yetene\u011fi ile bilinir.<\/p>\n<h4>Nginx Nedir?<\/h4>\n<p>Nginx, ilk olarak 2004 y\u0131l\u0131nda Igor Sysoev taraf\u0131ndan piyasaya s\u00fcr\u00fcld\u00fc ve o zamandan beri web altyap\u0131s\u0131n\u0131n \u00f6nemli bir bile\u015feni haline geldi. Apache HTTP Sunucusu gibi geleneksel web sunucular\u0131ndan farkl\u0131 olarak, Nginx olay tabanl\u0131 (event-driven) ve asenkron bir mimariye sahiptir. Bu mimari, Nginx&#8217;in ayn\u0131 anda binlerce ba\u011flant\u0131y\u0131 \u00e7ok daha az sistem kayna\u011f\u0131 kullanarak i\u015fleyebilmesini sa\u011flar.<\/p>\n<p>Nginx&#8217;in ba\u015fl\u0131ca kullan\u0131m alanlar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>Statik \u0130\u00e7erik Sunumu:<\/strong> HTML, CSS, JavaScript dosyalar\u0131 ve g\u00f6rseller gibi statik i\u00e7erikleri son derece h\u0131zl\u0131 bir \u015fekilde sunar.<br \/>\n*   <strong>Ters Proxy (Reverse Proxy):<\/strong> \u0130stemci isteklerini bir veya daha fazla arka u\u00e7 sunucusuna y\u00f6nlendirir. Bu, Nginx&#8217;in ana konumuz olan kullan\u0131m \u015feklidir.<br \/>\n*   <strong>Y\u00fck Dengeleyici (Load Balancer):<\/strong> Gelen trafi\u011fi birden fazla arka u\u00e7 sunucusu aras\u0131nda da\u011f\u0131tarak performans\u0131 art\u0131r\u0131r ve tek hata noktas\u0131n\u0131 (single point of failure) ortadan kald\u0131r\u0131r.<br \/>\n*   <strong>HTTP \u00d6nbelle\u011fi (HTTP Cache):<\/strong> S\u0131k\u00e7a istenen i\u00e7erikleri \u00f6nbelle\u011fe alarak arka u\u00e7 sunucular\u0131n\u0131n y\u00fck\u00fcn\u00fc azalt\u0131r ve yan\u0131t s\u00fcrelerini k\u0131salt\u0131r.<br \/>\n*   <strong>SSL\/TLS Sonland\u0131rma:<\/strong> SSL\/TLS \u015fifrelemesini Nginx \u00fczerinde sonland\u0131rarak arka u\u00e7 sunucular\u0131n\u0131n bu y\u00fckten kurtulmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Ters Proxy (Reverse Proxy) Nedir ve Neden Kullan\u0131l\u0131r?<\/h4>\n<p>Bir ters proxy, istemciden gelen istekleri kabul eden ve bu istekleri bir veya daha fazla arka u\u00e7 sunucusuna (genellikle web sunucular\u0131 veya uygulama sunucular\u0131) ileten bir sunucudur. Arka u\u00e7 sunucular\u0131, iste\u011fi i\u015fler ve yan\u0131t\u0131 ters proxy&#8217;ye geri g\u00f6nderir; ters proxy de bu yan\u0131t\u0131 istemciye iletir. \u0130stemci, arka u\u00e7 sunucular\u0131n\u0131n varl\u0131\u011f\u0131ndan haberdar de\u011fildir ve sadece ters proxy ile etkile\u015fime girdi\u011fini d\u00fc\u015f\u00fcn\u00fcr.<\/p>\n<p>Ters proxy&#8217;lerin kullan\u0131m\u0131n\u0131n bir\u00e7ok \u00f6nemli faydas\u0131 vard\u0131r:<\/p>\n<p>*   <strong>G\u00fcvenlik:<\/strong> Ters proxy, arka u\u00e7 sunucular\u0131n\u0131 do\u011frudan internete maruz kalmaktan korur. \u0130stemciler sadece ters proxy&#8217;nin IP adresini g\u00f6r\u00fcr, bu da arka u\u00e7 sunucular\u0131n\u0131n zafiyetlerini gizlemeye yard\u0131mc\u0131 olur. Ayr\u0131ca, g\u00fcvenlik duvar\u0131 ve DDoS korumas\u0131 gibi ek g\u00fcvenlik \u00f6nlemleri ters proxy seviyesinde uygulanabilir.<br \/>\n*   <strong>Y\u00fck Dengeleme (Load Balancing):<\/strong> Gelen trafi\u011fi birden fazla arka u\u00e7 sunucusu aras\u0131nda da\u011f\u0131tarak sunucu y\u00fck\u00fcn\u00fc dengeleyebilir. Bu, uygulaman\u0131n performans\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini art\u0131r\u0131r. E\u011fer bir sunucu ar\u0131zalan\u0131rsa, ters proxy trafi\u011fi di\u011fer \u00e7al\u0131\u015fan sunuculara y\u00f6nlendirebilir.<br \/>\n*   <strong>SSL\/TLS Sonland\u0131rma:<\/strong> T\u00fcm SSL\/TLS \u015fifreleme ve \u015fifre \u00e7\u00f6zme i\u015flemleri ters proxy \u00fczerinde yap\u0131labilir. Bu, arka u\u00e7 uygulama sunucular\u0131n\u0131n bu i\u015flem y\u00fck\u00fcnden kurtulmas\u0131n\u0131 ve sadece uygulama mant\u0131\u011f\u0131na odaklanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>\u00d6nbellekleme (Caching):<\/strong> S\u0131k\u00e7a istenen i\u00e7erikleri \u00f6nbelle\u011fe alarak arka u\u00e7 sunucular\u0131n\u0131n y\u00fck\u00fcn\u00fc azalt\u0131r ve istemcilere daha h\u0131zl\u0131 yan\u0131t s\u00fcreleri sunar.<br \/>\n*   <strong>Mikroservis Y\u00f6nlendirme:<\/strong> Mikroservis mimarilerinde, ters proxy, farkl\u0131 mikroservisleri farkl\u0131 URL yollar\u0131na veya alt alan adlar\u0131na g\u00f6re y\u00f6nlendirmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, <code>\/api\/users<\/code> iste\u011fi kullan\u0131c\u0131 servisine, <code>\/api\/products<\/code> iste\u011fi \u00fcr\u00fcn servisine y\u00f6nlendirilebilir.<br \/>\n*   <strong>S\u0131k\u0131\u015ft\u0131rma ve Optimizasyon:<\/strong> Gelen yan\u0131tlar\u0131 s\u0131k\u0131\u015ft\u0131rabilir veya di\u011fer optimizasyonlar\u0131 uygulayarak bant geni\u015fli\u011fi kullan\u0131m\u0131n\u0131 azaltabilir ve sayfa y\u00fckleme s\u00fcrelerini iyile\u015ftirebilir.<br \/>\n*   <strong>URL Yeniden Yazma (URL Rewriting):<\/strong> \u0130stemciden gelen URL&#8217;leri arka u\u00e7 sunucular\u0131n\u0131n bekledi\u011fi formata g\u00f6re yeniden yazabilir.<\/p>\n<p>\u00d6zetle, Nginx bir ters proxy olarak kullan\u0131ld\u0131\u011f\u0131nda, karma\u015f\u0131k uygulama mimarilerini basitle\u015ftirir, g\u00fcvenli\u011fi art\u0131r\u0131r, performans\u0131 iyile\u015ftirir ve \u00f6l\u00e7eklenebilirli\u011fi destekler.<\/p>\n<h3>Nginx&#8217;i Docker ile Konteynerize Etme<\/h3>\n<p>Nginx&#8217;i Docker ile konteynerize etmek, onun da\u011f\u0131t\u0131m\u0131n\u0131 ve y\u00f6netimini \u00f6nemli \u00f6l\u00e7\u00fcde basitle\u015ftirir. Bu b\u00f6l\u00fcmde, Nginx&#8217;i temel bir konteyner olarak \u00e7al\u0131\u015ft\u0131rmaktan, \u00f6zel konfig\u00fcrasyonlarla bir imaj olu\u015fturmaya kadar ad\u0131mlar\u0131 inceleyece\u011fiz.<\/p>\n<h4>Temel Nginx Konteyneri Olu\u015fturma<\/h4>\n<p>\u0130lk ad\u0131m olarak, Docker Hub&#8217;dan resmi Nginx imaj\u0131n\u0131 \u00e7ekip \u00e7al\u0131\u015ft\u0131rmakla ba\u015flayabiliriz. Bu, Nginx&#8217;in varsay\u0131lan konfig\u00fcrasyonuyla \u00e7al\u0131\u015fan h\u0131zl\u0131 bir ba\u015flang\u0131\u00e7 sa\u011flar.<\/p>\n<p>1.  <strong>Nginx \u0130maj\u0131n\u0131 \u00c7ekme:<\/strong><br \/>\n    Docker Hub&#8217;dan Nginx&#8217;in en son stabil imaj\u0131n\u0131 \u00e7ekmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker pull nginx:latest<\/code><\/pre>\n<p>    Bu komut, Nginx imaj\u0131n\u0131 yerel Docker deponuza indirir. <code>latest<\/code> etiketi, genellikle en son stabil s\u00fcr\u00fcm\u00fc i\u015faret eder.<\/p>\n<p>2.  <strong>Nginx Konteynerini \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n    \u0130maj\u0131 indirdikten sonra, Nginx&#8217;i bir konteyner i\u00e7inde \u00e7al\u0131\u015ft\u0131rabiliriz. Konteyneri ana makinenin 80 portuna (HTTP varsay\u0131lan portu) ba\u011flamak i\u00e7in <code>-p<\/code> bayra\u011f\u0131n\u0131 kullanaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-bash\">docker run -d -p 80:80 --name my-nginx-container nginx:latest<\/code><\/pre>\n<p>    *   <code>-d<\/code>: Konteyneri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n    *   <code>-p 80:80<\/code>: Ana makinenin 80 portunu konteynerin 80 portuna e\u015fler. B\u00f6ylece, ana makinenin IP adresine veya <code>localhost<\/code>&#8216;a 80 portundan gelen istekler konteynerdeki Nginx&#8217;e y\u00f6nlendirilir.<br \/>\n    *   <code>--name my-nginx-container<\/code>: Konteynera okunabilir bir isim veririz.<br \/>\n    *   <code>nginx:latest<\/code>: \u00c7al\u0131\u015ft\u0131r\u0131lacak imaj\u0131n ad\u0131d\u0131r.<\/p>\n<p>3.  <strong>\u00c7al\u0131\u015ft\u0131\u011f\u0131n\u0131 Test Etme:<\/strong><br \/>\n    Taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve <code>http:\/\/localhost<\/code> adresine gidin. Nginx&#8217;in varsay\u0131lan kar\u015f\u0131lama sayfas\u0131n\u0131 g\u00f6rmelisiniz (&#8220;Welcome to Nginx!&#8221;). Bu, Nginx konteynerinizin ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<p>    Konteynerin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in <code>docker ps<\/code> komutunu da kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">docker ps<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131da <code>my-nginx-container<\/code> isimli konteyneri g\u00f6rmelisiniz.<\/p>\n<h4>\u00d6zel Nginx Konfig\u00fcrasyonu Kullanma<\/h4>\n<p>\u00c7o\u011fu ger\u00e7ek d\u00fcnya senaryosunda, Nginx&#8217;i varsay\u0131lan konfig\u00fcrasyonuyla de\u011fil, \u00f6zel bir konfig\u00fcrasyon dosyas\u0131yla \u00e7al\u0131\u015ft\u0131rmak isteriz. \u00d6zellikle ters proxy olarak kullanaca\u011f\u0131m\u0131zda bu ka\u00e7\u0131n\u0131lmazd\u0131r. \u00d6zel bir <code>nginx.conf<\/code> dosyas\u0131 kullanarak kendi Nginx imaj\u0131m\u0131z\u0131 nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 g\u00f6relim.<\/p>\n<p>1.  <strong>\u00d6zel <code>nginx.conf<\/code> Dosyas\u0131 Olu\u015fturma:<\/strong><br \/>\n    \u00d6ncelikle, Nginx&#8217;in konfig\u00fcrasyonunu tan\u0131mlayacak bir <code>nginx.conf<\/code> dosyas\u0131 olu\u015ftural\u0131m. Bu \u00f6rnekte, Nginx&#8217;in varsay\u0131lan ayarlar\u0131n\u0131 kullanarak basit bir konfig\u00fcrasyon tan\u0131mlayaca\u011f\u0131z. Daha sonra ters proxy i\u00e7in bu dosyay\u0131 g\u00fcncelleyece\u011fiz.<br \/>\n    Yeni bir dizin olu\u015fturun (\u00f6rne\u011fin, <code>my-nginx-proxy<\/code>) ve i\u00e7ine <code>nginx.conf<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-nginx\"># my-nginx-proxy\/nginx.conf\n    worker_processes auto;\n    events {\n        worker_connections 1024;\n    }\n    http {\n        include \/etc\/nginx\/mime.types;\n        default_type application\/octet-stream;\n        sendfile on;\n        keepalive_timeout 65;\n\n        server {\n            listen 80;\n            server_name localhost;\n\n            location \/ {\n                root \/usr\/share\/nginx\/html;\n                index index.html index.htm;\n            }\n\n            error_page 500 502 503 504 \/50x.html;\n            location = \/50x.html {\n                root \/usr\/share\/nginx\/html;\n            }\n        }\n    }<\/code><\/pre>\n<p>    Bu konfig\u00fcrasyon, Nginx&#8217;in varsay\u0131lan davran\u0131\u015f\u0131n\u0131 taklit eder: 80 numaral\u0131 portu dinler ve <code>\/usr\/share\/nginx\/html<\/code> dizininden statik dosyalar sunar.<\/p>\n<p>2.  <strong>Dockerfile Olu\u015fturma:<\/strong><br \/>\n    \u015eimdi, bu \u00f6zel <code>nginx.conf<\/code> dosyas\u0131n\u0131 i\u00e7eren kendi Nginx imaj\u0131m\u0131z\u0131 olu\u015fturmak i\u00e7in bir <code>Dockerfile<\/code> olu\u015ftural\u0131m. <code>nginx.conf<\/code> dosyas\u0131n\u0131n bulundu\u011fu ayn\u0131 dizine <code>Dockerfile<\/code> ad\u0131nda bir dosya ekleyin:<\/p>\n<pre><code class=\"language-dockerfile\"># my-nginx-proxy\/Dockerfile\n    # Resmi Nginx imaj\u0131n\u0131 temel al\n    FROM nginx:latest\n\n    # \u00d6zel nginx.conf dosyam\u0131z\u0131 konteynerin do\u011fru yerine kopyala\n    COPY nginx.conf \/etc\/nginx\/nginx.conf\n\n    # Nginx'in dinleyece\u011fi portu belirt (iste\u011fe ba\u011fl\u0131, dok\u00fcmantasyon ama\u00e7l\u0131)\n    EXPOSE 80\n\n    # Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda Nginx'i \u00e7al\u0131\u015ft\u0131r\n    # \"daemon off;\" Nginx'in bir foreground s\u00fcreci olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar,\n    # bu da Docker'\u0131n konteynerin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamas\u0131 i\u00e7in gereklidir.\n    CMD [\"nginx\", \"-g\", \"daemon off;\"]<\/code><\/pre>\n<p>3.  <strong>\u0130maj\u0131 Olu\u015fturma (Build Etme):<\/strong><br \/>\n    <code>Dockerfile<\/code> ve <code>nginx.conf<\/code> dosyalar\u0131n\u0131 olu\u015fturdu\u011funuz <code>my-nginx-proxy<\/code> dizininde, a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak kendi Nginx imaj\u0131n\u0131z\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">docker build -t custom-nginx-image .<\/code><\/pre>\n<p>    *   <code>-t custom-nginx-image<\/code>: Olu\u015fturulan imaja <code>custom-nginx-image<\/code> ad\u0131n\u0131 verir.<br \/>\n    *   <code>.<\/code>: <code>Dockerfile<\/code>&#8216;\u0131n ve ilgili dosyalar\u0131n mevcut dizinde oldu\u011funu belirtir.<\/p>\n<p>4.  <strong>\u00d6zel Konteyneri \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n    Olu\u015fturdu\u011funuz <code>custom-nginx-image<\/code> imaj\u0131n\u0131 kullanarak bir konteyner \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker run -d -p 80:80 --name custom-nginx-container custom-nginx-image<\/code><\/pre>\n<p>    Taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost<\/code> adresine tekrar gidin. Yine Nginx&#8217;in kar\u015f\u0131lama sayfas\u0131n\u0131 g\u00f6rmelisiniz. Bu sefer, bu sayfa sizin \u00f6zel imaj\u0131n\u0131zdan gelmektedir. E\u011fer <code>nginx.conf<\/code> dosyas\u0131nda bir hata olsayd\u0131, Nginx ba\u015flamazd\u0131 ve <code>docker logs custom-nginx-container<\/code> komutu ile hata mesajlar\u0131n\u0131 g\u00f6rebilirdiniz.<\/p>\n<p>Bu ad\u0131mlar, Nginx&#8217;i Docker ile temel seviyede konteynerize etmeyi ve \u00f6zel bir konfig\u00fcrasyonla \u00e7al\u0131\u015ft\u0131rmay\u0131 g\u00f6sterir. Bir sonraki b\u00f6l\u00fcmde, Nginx&#8217;i ger\u00e7ek bir ters proxy olarak yap\u0131land\u0131rmak i\u00e7in bu bilgiyi kullanaca\u011f\u0131z.<\/p>\n<h3>Nginx&#8217;i Ters Proxy Olarak Kullanma<\/h3>\n<p>\u015eimdi Nginx&#8217;i, birden fazla arka u\u00e7 uygulamas\u0131n\u0131 tek bir eri\u015fim noktas\u0131 \u00fczerinden y\u00f6nlendiren bir ters proxy olarak yap\u0131land\u0131rma konusuna ge\u00e7elim. Bu senaryoda, iki basit web uygulamam\u0131z olacak ve Nginx bu uygulamalara gelen istekleri URL yollar\u0131na g\u00f6re y\u00f6nlendirecek.<\/p>\n<h4>Senaryo: \u0130ki Farkl\u0131 Web Uygulamas\u0131n\u0131 Proxy Etme<\/h4>\n<p>Hayal edelim ki, biri <code>\/app1<\/code> yolu \u00fczerinden eri\u015filecek bir &#8220;Uygulama 1&#8221; ve di\u011feri <code>\/app2<\/code> yolu \u00fczerinden eri\u015filecek bir &#8220;Uygulama 2&#8221; olmak \u00fczere iki farkl\u0131 web uygulamam\u0131z var. Her iki uygulama da kendi Docker konteynerlerinde \u00e7al\u0131\u015facak ve Nginx de ayr\u0131 bir Docker konteynerinde bu uygulamalar\u0131n \u00f6n\u00fcnde bir ters proxy g\u00f6revi g\u00f6recek.<\/p>\n<p>*   <strong>Uygulama 1:<\/strong> Basit bir Node.js uygulamas\u0131, <code>http:\/\/app1_service:3001<\/code> adresinden eri\u015filebilir.<br \/>\n*   <strong>Uygulama 2:<\/strong> Basit bir Node.js uygulamas\u0131, <code>http:\/\/app2_service:3002<\/code> adresinden eri\u015filebilir.<br \/>\n*   <strong>Nginx Proxy:<\/strong> <code>http:\/\/localhost\/app1<\/code> isteklerini Uygulama 1&#8217;e, <code>http:\/\/localhost\/app2<\/code> isteklerini Uygulama 2&#8217;ye y\u00f6nlendirecek.<\/p>\n<h4>Uygulama Konteynerlerini Olu\u015fturma<\/h4>\n<p>\u00d6ncelikle, proxy edece\u011fimiz iki basit Node.js uygulamas\u0131n\u0131 olu\u015ftural\u0131m. Her uygulama i\u00e7in ayr\u0131 bir dizin ve <code>Dockerfile<\/code> olu\u015fturaca\u011f\u0131z.<\/p>\n<p>1.  <strong>Uygulama 1 (<code>app1<\/code>):<\/strong><br \/>\n    <code>my-nginx-proxy<\/code> ana dizininin i\u00e7ine <code>app1<\/code> ad\u0131nda bir dizin olu\u015fturun.<\/p>\n<p>    <code>app1\/app.js<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-javascript\">\/\/ app1\/app.js\n    const http = require('http');\n    const port = 3001;\n\n    const server = http.createServer((req, res) => {\n      res.writeHead(200, { 'Content-Type': 'text\/plain' });\n      res.end('Merhaba Uygulama 1! (Port 3001)\\n');\n    });\n\n    server.listen(port, () => {\n      console.log(<code>Uygulama 1 ${port} portunda \u00e7al\u0131\u015f\u0131yor.<\/code>);\n    });<\/code><\/pre>\n<p>    <code>app1\/Dockerfile<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-dockerfile\"># app1\/Dockerfile\n    FROM node:14-alpine\n\n    WORKDIR \/app\n\n    COPY package*.json .\/\n    # package.json'\u0131m\u0131z yok ama genel bir pratik olarak ekleyelim\n    # RUN npm install\n\n    COPY . .\n\n    EXPOSE 3001\n\n    CMD [\"node\", \"app.js\"]<\/code><\/pre>\n<p>2.  <strong>Uygulama 2 (<code>app2<\/code>):<\/strong><br \/>\n    <code>my-nginx-proxy<\/code> ana dizininin i\u00e7ine <code>app2<\/code> ad\u0131nda bir dizin olu\u015fturun.<\/p>\n<p>    <code>app2\/app.js<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-javascript\">\/\/ app2\/app.js\n    const http = require('http');\n    const port = 3002;\n\n    const server = http.createServer((req, res) => {\n      res.writeHead(200, { 'Content-Type': 'text\/plain' });\n      res.end('Merhaba Uygulama 2! (Port 3002)\\n');\n    });\n\n    server.listen(port, () => {\n      console.log(<code>Uygulama 2 ${port} portunda \u00e7al\u0131\u015f\u0131yor.<\/code>);\n    });<\/code><\/pre>\n<p>    <code>app2\/Dockerfile<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-dockerfile\"># app2\/Dockerfile\n    FROM node:14-alpine\n\n    WORKDIR \/app\n\n    COPY package*.json .\/\n    # RUN npm install\n\n    COPY . .\n\n    EXPOSE 3002\n\n    CMD [\"node\", \"app.js\"]<\/code><\/pre>\n<h4>Nginx Ters Proxy Konfig\u00fcrasyonu<\/h4>\n<p>\u015eimdi <code>my-nginx-proxy\/nginx.conf<\/code> dosyam\u0131z\u0131 ters proxy olarak i\u015flev g\u00f6recek \u015fekilde g\u00fcncelleyelim. Bu konfig\u00fcrasyon, <code>\/app1<\/code> ve <code>\/app2<\/code> yollar\u0131na gelen istekleri ilgili arka u\u00e7 uygulamalar\u0131na y\u00f6nlendirecek.<\/p>\n<pre><code class=\"language-nginx\"># my-nginx-proxy\/nginx.conf\nworker_processes auto;\nevents {\n    worker_connections 1024;\n}\nhttp {\n    include \/etc\/nginx\/mime.types;\n    default_type application\/octet-stream;\n    sendfile on;\n    keepalive_timeout 65;\n\n    # Arka u\u00e7 servislerini tan\u0131mlamak i\u00e7in upstream bloklar\u0131\n    # Docker Compose veya Docker network i\u00e7inde servis isimleri do\u011frudan kullan\u0131labilir\n    upstream app1_service {\n        server app1:3001; # app1, Docker network i\u00e7indeki servis ad\u0131d\u0131r\n    }\n\n    upstream app2_service {\n        server app2:3002; # app2, Docker network i\u00e7indeki servis ad\u0131d\u0131r\n    }\n\n    server {\n        listen 80;\n        server_name localhost;\n\n        # \/app1 yoluna gelen istekleri app1_service'e y\u00f6nlendir\n        location \/app1\/ {\n            proxy_pass http:\/\/app1_service\/;\n            # Gelen iste\u011fin orijinal host ba\u015fl\u0131\u011f\u0131n\u0131 arka uca ilet\n            proxy_set_header Host $host;\n            # Gelen iste\u011fin orijinal IP adresini arka uca ilet\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            # Nginx'in \/app1\/ yolunu arka u\u00e7tan kald\u0131rarak y\u00f6nlendirmesi i\u00e7in\n            # rewrite ^\/app1\/(.*)$ \/$1 break; # Bu, e\u011fer arka u\u00e7 \/app1'i beklemiyorsa kullan\u0131labilir.\n                                           # Ancak proxy_pass sonuna e\u011fik \u00e7izgi eklemek genellikle yeterlidir.\n        }\n\n        # \/app2 yoluna gelen istekleri app2_service'e y\u00f6nlendir\n        location \/app2\/ {\n            proxy_pass http:\/\/app2_service\/;\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        # Di\u011fer t\u00fcm istekler i\u00e7in varsay\u0131lan bir sayfa veya hata sayfas\u0131 sun\n        location \/ {\n            root \/usr\/share\/nginx\/html;\n            index index.html;\n            try_files $uri $uri\/ =404;\n            # E\u011fer ana dizine bir index.html koyarsak bu k\u0131s\u0131m \u00e7al\u0131\u015f\u0131r.\n            # \u015eimdilik varsay\u0131lan Nginx sayfas\u0131n\u0131 g\u00f6rmek i\u00e7in bo\u015f b\u0131rakabiliriz.\n            return 200 'Nginx Ters Proxy \u00c7al\u0131\u015f\u0131yor!';\n        }\n\n        error_page 500 502 503 504 \/50x.html;\n        location = \/50x.html {\n            root \/usr\/share\/nginx\/html;\n        }\n    }\n}<\/code><\/pre>\n<p><strong>\u00d6nemli Not:<\/strong> <code>proxy_pass http:\/\/app1_service\/;<\/code> ifadesindeki son e\u011fik \u00e7izgi (<code>\/<\/code>) \u00f6nemlidir. E\u011fer <code>proxy_pass<\/code> URL&#8217;si bir e\u011fik \u00e7izgi ile biterse, <code>location<\/code> blo\u011fundaki e\u015fle\u015fen \u00f6nek (bu durumda <code>\/app1\/<\/code>) arka u\u00e7 sunucusuna g\u00f6nderilen URL&#8217;den \u00e7\u0131kar\u0131l\u0131r. Yani <code>http:\/\/localhost\/app1\/somepath<\/code> iste\u011fi <code>http:\/\/app1_service\/somepath<\/code> olarak y\u00f6nlendirilir. E\u011fer e\u011fik \u00e7izgi olmazsa (<code>proxy_pass http:\/\/app1_service;<\/code>), <code>location<\/code> \u00f6neki korunur ve <code>http:\/\/localhost\/app1\/somepath<\/code> iste\u011fi <code>http:\/\/app1_service\/app1\/somepath<\/code> olarak y\u00f6nlendirilir. Uygulamalar\u0131n\u0131z\u0131n URL yap\u0131land\u0131rmas\u0131na g\u00f6re do\u011fru olan\u0131 se\u00e7melisiniz. Genellikle ilk y\u00f6ntem tercih edilir.<\/p>\n<h3>Docker Compose ile Orkestrasyon<\/h3>\n<p>Yukar\u0131daki senaryoda \u00fc\u00e7 ayr\u0131 konteyneri (Nginx, app1, app2) manuel olarak y\u00f6netmek karma\u015f\u0131k olabilir. \u0130\u015fte bu noktada <strong>Docker Compose<\/strong> devreye girer. Docker Compose, \u00e7oklu konteyner Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7t\u0131r. Bir YAML dosyas\u0131 kullanarak uygulaman\u0131z\u0131n t\u00fcm servislerini, a\u011flar\u0131n\u0131 ve birimlerini tek bir dosyada tan\u0131mlars\u0131n\u0131z, ard\u0131ndan tek bir komutla t\u00fcm uygulamay\u0131 ba\u015flatabilirsiniz.<\/p>\n<h4>Neden Docker Compose?<\/h4>\n<p>*   <strong>Tek Dosya Tan\u0131m\u0131:<\/strong> T\u00fcm uygulama y\u0131\u011f\u0131n\u0131 (servisler, a\u011flar, depolama) tek bir <code>docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlan\u0131r. Bu, uygulaman\u0131n konfig\u00fcrasyonunu s\u00fcrd\u00fcrmeyi ve payla\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Kolay Y\u00f6netim:<\/strong> Tek bir komutla (\u00f6rne\u011fin, <code>docker-compose up<\/code>) t\u00fcm servisleri ba\u015flatabilir, durdurabilir, yeniden olu\u015fturabilir ve \u00f6l\u00e7eklendirebilirsiniz.<br \/>\n*   <strong>Servis Ke\u015ffi:<\/strong> Docker Compose, servisler aras\u0131nda otomatik olarak bir a\u011f olu\u015fturur ve servis isimlerini DNS \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fc i\u00e7in kullan\u0131r. Bu, bir servisin di\u011fer bir servise ad\u0131yla eri\u015febilece\u011fi anlam\u0131na gelir (\u00f6rne\u011fin, Nginx&#8217;in <code>app1<\/code> servisine <code>app1:3001<\/code> ile eri\u015fmesi).<br \/>\n*   <strong>Ortam Tutarl\u0131l\u0131\u011f\u0131:<\/strong> Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131 bir uygulama y\u0131\u011f\u0131n\u0131 sa\u011flar.<\/p>\n<h4><code>docker-compose.yml<\/code> Olu\u015fturma<\/h4>\n<p>\u015eimdi, <code>my-nginx-proxy<\/code> ana dizininde, t\u00fcm uygulamam\u0131z\u0131 tan\u0131mlayan bir <code>docker-compose.yml<\/code> dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\"># my-nginx-proxy\/docker-compose.yml\nversion: '3.8' # Docker Compose dosyas\u0131n\u0131n versiyonu\n\nservices:\n  # Uygulama 1 servisi\n  app1:\n    build: .\/app1 # app1 dizinindeki Dockerfile'\u0131 kullanarak imaj\u0131 olu\u015ftur\n    container_name: app1_container # Konteynerin ad\u0131\n    ports:\n      - \"3001:3001\" # Host'un 3001 portunu konteynerin 3001 portuna e\u015fle (iste\u011fe ba\u011fl\u0131, sadece test i\u00e7in)\n    networks:\n      - app_network # Bu servisi app_network a\u011f\u0131na dahil et\n\n  # Uygulama 2 servisi\n  app2:\n    build: .\/app2 # app2 dizinindeki Dockerfile'\u0131 kullanarak imaj\u0131 olu\u015ftur\n    container_name: app2_container # Konteynerin ad\u0131\n    ports:\n      - \"3002:3002\" # Host'un 3002 portunu konteynerin 3002 portuna e\u015fle (iste\u011fe ba\u011fl\u0131, sadece test i\u00e7in)\n    networks:\n      - app_network # Bu servisi app_network a\u011f\u0131na dahil et\n\n  # Nginx ters proxy servisi\n  nginx:\n    build: . # Mevcut dizindeki Dockerfile'\u0131 kullanarak Nginx imaj\u0131n\u0131 olu\u015ftur\n    container_name: nginx_proxy_container # Konteynerin ad\u0131\n    ports:\n      - \"80:80\" # Host'un 80 portunu Nginx konteynerinin 80 portuna e\u015fle\n    volumes:\n      # Nginx konfig\u00fcrasyon dosyas\u0131n\u0131 host'tan konteynere ba\u011fla\n      # Bu, nginx.conf dosyas\u0131nda de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda konteyneri yeniden olu\u015fturmadan\n      # sadece Nginx'i yeniden y\u00fckleyerek de\u011fi\u015fiklikleri uygulaman\u0131z\u0131 sa\u011flar.\n      - .\/nginx.conf:\/etc\/nginx\/nginx.conf:ro\n    depends_on:\n      - app1 # Nginx'in app1'den \u00f6nce ba\u015flamas\u0131n\u0131 bekle\n      - app2 # Nginx'in app2'den \u00f6nce ba\u015flamas\u0131n\u0131 bekle\n    networks:\n      - app_network # Bu servisi app_network a\u011f\u0131na dahil et\n\n<h2>\u00d6zel bir a\u011f tan\u0131mla<\/h2>\nnetworks:\n  app_network:\n    driver: bridge # Varsay\u0131lan bridge a\u011f s\u00fcr\u00fcc\u00fcs\u00fcn\u00fc kullan<\/code><\/pre>\n<p><strong>Dosya Yap\u0131s\u0131:<\/strong><br \/>\nMakalenin ba\u015f\u0131nda bahsetti\u011fimiz <code>my-nginx-proxy<\/code> dizin yap\u0131s\u0131 \u015f\u00f6yle olmal\u0131:<\/p>\n<pre><code class=\"language-\">my-nginx-proxy\/\n\u251c\u2500\u2500 app1\/\n\u2502   \u251c\u2500\u2500 app.js\n\u2502   \u2514\u2500\u2500 Dockerfile\n\u251c\u2500\u2500 app2\/\n\u2502   \u251c\u2500\u2500 app.js\n\u2502   \u2514\u2500\u2500 Dockerfile\n\u251c\u2500\u2500 nginx.conf\n\u2514\u2500\u2500 docker-compose.yml<\/code><\/pre>\n<h4>Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p><code>docker-compose.yml<\/code> dosyas\u0131n\u0131 olu\u015fturduktan sonra, <code>my-nginx-proxy<\/code> dizininde terminali a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker-compose up --build -d<\/code><\/pre>\n<p>*   <code>up<\/code>: Servisleri olu\u015fturur ve ba\u015flat\u0131r.<br \/>\n*   <code>--build<\/code>: Servis imajlar\u0131n\u0131 (e\u011fer de\u011fi\u015fmi\u015flerse veya yoklarsa) yeniden olu\u015fturur. Bu, ilk \u00e7al\u0131\u015ft\u0131rmada veya Dockerfile&#8217;larda de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131nda \u00f6nemlidir.<br \/>\n*   <code>-d<\/code>: Servisleri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<p>Bu komut, <code>app1<\/code> ve <code>app2<\/code> i\u00e7in imajlar\u0131 olu\u015fturacak, Nginx i\u00e7in imaj\u0131 olu\u015fturacak ve \u00fc\u00e7 konteyneri de <code>app_network<\/code> a\u011f\u0131 i\u00e7inde ba\u015flatacakt\u0131r. <code>depends_on<\/code> sayesinde, <code>app1<\/code> ve <code>app2<\/code> servisleri <code>nginx<\/code> servisi ba\u015flamadan \u00f6nce ba\u015flat\u0131lacakt\u0131r.<\/p>\n<p><strong>Test Etme:<\/strong><br \/>\nT\u00fcm servisler \u00e7al\u0131\u015fmaya ba\u015flad\u0131ktan sonra, taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve a\u015fa\u011f\u0131daki adreslere gidin:<br \/>\n*   <code>http:\/\/localhost\/app1\/<\/code> adresine gitti\u011finizde &#8220;Merhaba Uygulama 1! (Port 3001)&#8221; \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6rmelisiniz.<br \/>\n*   <code>http:\/\/localhost\/app2\/<\/code> adresine gitti\u011finizde &#8220;Merhaba Uygulama 2! (Port 3002)&#8221; \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6rmelisiniz.<br \/>\n*   <code>http:\/\/localhost\/<\/code> adresine gitti\u011finizde &#8220;Nginx Ters Proxy \u00c7al\u0131\u015f\u0131yor!&#8221; \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<p>Bu, Nginx&#8217;in istekleri do\u011fru arka u\u00e7 uygulamalar\u0131na ba\u015far\u0131yla y\u00f6nlendirdi\u011fini kan\u0131tlar.<\/p>\n<p><strong>Servisleri Durdurma ve Temizleme:<\/strong><br \/>\nUygulamay\u0131 durdurmak ve olu\u015fturulan t\u00fcm konteynerleri, a\u011flar\u0131 ve imajlar\u0131 (e\u011fer <code>-v<\/code> bayra\u011f\u0131 ile belirtilirse) kald\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker-compose down<\/code><\/pre>\n<p>E\u011fer imajlar\u0131 da kald\u0131rmak isterseniz:<\/p>\n<pre><code class=\"language-bash\">docker-compose down --rmi all<\/code><\/pre>\n<h4>Geli\u015fmi\u015f Nginx Proxy Ayarlar\u0131<\/h4>\n<p>Nginx, ters proxy olarak kullan\u0131ld\u0131\u011f\u0131nda bir\u00e7ok geli\u015fmi\u015f \u00f6zelli\u011fi destekler:<\/p>\n<p>*   <strong>SSL\/TLS Sonland\u0131rma:<\/strong> Nginx, istemci ile kendisi aras\u0131ndaki ileti\u015fimi \u015fifrelemek i\u00e7in SSL\/TLS sertifikalar\u0131n\u0131 bar\u0131nd\u0131rabilir. Bu, arka u\u00e7 uygulamalar\u0131n\u0131n SSL y\u00fck\u00fcnden kurtulmas\u0131n\u0131 sa\u011flar. Let&#8217;s Encrypt gibi hizmetlerle entegre olarak otomatik sertifika y\u00f6netimi de yap\u0131labilir.<br \/>\n*   <strong>Y\u00fck Dengeleme (Load Balancing):<\/strong> <code>upstream<\/code> bloklar\u0131 i\u00e7inde birden fazla arka u\u00e7 sunucusu tan\u0131mlayarak ve farkl\u0131 y\u00fck dengeleme algoritmalar\u0131 (round-robin, least-connected, ip-hash) kullanarak trafi\u011fi da\u011f\u0131tabilirsiniz.<\/p>\n<pre><code class=\"language-nginx\">upstream my_backend_servers {\n        server backend1.example.com;\n        server backend2.example.com;\n        # server backend3.example.com backup; # Yedek sunucu\n    }\n    location \/api\/ {\n        proxy_pass http:\/\/my_backend_servers;\n    }<\/code><\/pre>\n<p>*   <strong>\u00d6nbellekleme (Caching):<\/strong> Nginx, arka u\u00e7tan gelen yan\u0131tlar\u0131 \u00f6nbelle\u011fe alarak tekrarlanan isteklerde arka u\u00e7 sunucusuna gitme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r ve yan\u0131t s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.<\/p>\n<pre><code class=\"language-nginx\">proxy_cache_path \/var\/cache\/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;\n    server {\n        # ...\n        location \/static\/ {\n            proxy_cache my_cache;\n            proxy_cache_valid 200 302 10m;\n            proxy_cache_valid 404      1m;\n            proxy_pass http:\/\/my_backend;\n        }\n    }<\/code><\/pre>\n<p>*   <strong>Hata Sayfalar\u0131:<\/strong> Arka u\u00e7 sunucusu ula\u015f\u0131lamad\u0131\u011f\u0131nda veya bir hata d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnde \u00f6zel hata sayfalar\u0131 sunmak i\u00e7in <code>error_page<\/code> direktifi kullan\u0131labilir.<br \/>\n*   <strong>Gzip S\u0131k\u0131\u015ft\u0131rma:<\/strong> Nginx, sunulan i\u00e7eri\u011fi s\u0131k\u0131\u015ft\u0131rarak bant geni\u015fli\u011fi kullan\u0131m\u0131n\u0131 azaltabilir ve sayfa y\u00fckleme s\u00fcrelerini iyile\u015ftirebilir.<\/p>\n<pre><code class=\"language-nginx\">gzip on;\n    gzip_types text\/plain text\/css application\/json application\/javascript text\/xml application\/xml application\/xml+rss text\/javascript;<\/code><\/pre>\n<p>Bu geli\u015fmi\u015f ayarlar, Nginx&#8217;in bir ters proxy olarak potansiyelini tam olarak kullanman\u0131z\u0131 sa\u011flar ve modern web uygulamalar\u0131 i\u00e7in sa\u011flam ve performansl\u0131 bir altyap\u0131 olu\u015fturman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Docker ve Nginx ile \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve bunlar\u0131n \u00e7\u00f6z\u00fcmleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Port \u00c7ak\u0131\u015fmalar\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>docker run<\/code> veya <code>docker-compose up<\/code> komutu \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda &#8220;port already in use&#8221; (port zaten kullan\u0131mda) hatas\u0131 al\u0131rs\u0131n\u0131z.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Bu, ana makinenizde belirtilen portun (\u00f6rne\u011fin, 80) zaten ba\u015fka bir uygulama veya konteyner taraf\u0131ndan kullan\u0131ld\u0131\u011f\u0131 anlam\u0131na gelir. Ya ana makinedeki \u00e7ak\u0131\u015fan uygulamay\u0131 durdurun ya da Docker komutunuzdaki port e\u015fle\u015fmesini de\u011fi\u015ftirin (\u00f6rne\u011fin, <code>-p 8080:80<\/code> ile Nginx&#8217;e 8080 portundan eri\u015fin).<br \/>\n    *   <code>netstat -tulnp | grep :80<\/code> (Linux) veya <code>lsof -i :80<\/code> (macOS) gibi komutlarla hangi s\u00fcrecin portu kulland\u0131\u011f\u0131n\u0131 bulabilirsiniz.<\/p>\n<p>*   <strong>Network \u0130zolasyonu ve Servis Ke\u015ffi:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Nginx konteyneriniz, arka u\u00e7 uygulama konteynerlerine eri\u015femiyor (\u00f6rne\u011fin, <code>proxy_pass<\/code> hedefi bulunam\u0131yor).<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> T\u00fcm ilgili konteynerlerin ayn\u0131 Docker a\u011f\u0131na ba\u011fl\u0131 oldu\u011fundan emin olun. Docker Compose kullan\u0131yorsan\u0131z, <code>networks<\/code> anahtar\u0131n\u0131 kullanarak t\u00fcm servislerinizi ayn\u0131 \u00f6zel a\u011fa ekleyin. Nginx konfig\u00fcrasyonunuzda <code>proxy_pass<\/code> i\u00e7inde arka u\u00e7 servislerinin konteyner isimlerini (Docker Compose&#8217;daki servis isimleri) kullan\u0131n. Docker Compose bu servis isimlerini otomatik olarak a\u011f i\u00e7indeki IP adreslerine \u00e7\u00f6z\u00fcmler.<\/p>\n<p>*   <strong>Nginx Konfig\u00fcrasyon Hatalar\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Nginx konteyneri ba\u015flam\u0131yor veya beklendi\u011fi gibi \u00e7al\u0131\u015fm\u0131yor. <code>docker logs <nginx_container_name><\/code> komutunda hata mesajlar\u0131 g\u00f6r\u00fcyorsunuz.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Nginx konfig\u00fcrasyon dosyan\u0131zda (nginx.conf) s\u00f6zdizimi hatalar\u0131 olabilir. Nginx, konfig\u00fcrasyon dosyas\u0131n\u0131 test etmek i\u00e7in bir komut sa\u011flar:<\/p>\n<pre><code class=\"language-bash\">docker exec -it <nginx_container_name> nginx -t<\/code><\/pre>\n<p>        Bu komut, konteyner i\u00e7indeki Nginx&#8217;in konfig\u00fcrasyonunu test eder ve herhangi bir hata varsa size bildirir. D\u00fczeltmeleri yapt\u0131ktan sonra konteyneri yeniden olu\u015fturman\u0131z veya Nginx&#8217;i yeniden y\u00fcklemeniz gerekebilir:<\/p>\n<pre><code class=\"language-bash\">docker exec -it <nginx_container_name> nginx -s reload<\/code><\/pre>\n<p>        <code>volumes<\/code> kullanarak <code>nginx.conf<\/code> dosyas\u0131n\u0131 ana makineden ba\u011flad\u0131ysan\u0131z, dosyay\u0131 d\u00fczenleyip <code>nginx -s reload<\/code> komutunu \u00e7al\u0131\u015ft\u0131rman\u0131z yeterlidir.<\/p>\n<p>*   <strong>Loglara Eri\u015fim:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Uygulaman\u0131zda veya Nginx&#8217;te bir sorun oldu\u011funda ne oldu\u011funu anlamak i\u00e7in loglara ihtiyac\u0131n\u0131z var.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Docker, her konteyner i\u00e7in standart \u00e7\u0131kt\u0131 (stdout) ve standart hata (stderr) ak\u0131\u015flar\u0131n\u0131 yakalar. Konteynerin loglar\u0131n\u0131 g\u00f6rmek i\u00e7in <code>docker logs <container_name><\/code> komutunu kullan\u0131n.<br \/>\n        *   <code>docker logs nginx_proxy_container<\/code><br \/>\n        *   <code>docker logs app1_container<\/code><br \/>\n        *   <code>docker logs app2_container<\/code><br \/>\n    *   <code>docker logs -f <container_name><\/code> ile loglar\u0131 ger\u00e7ek zamanl\u0131 olarak takip edebilirsiniz.<br \/>\n    *   Docker Compose kullan\u0131yorsan\u0131z, <code>docker-compose logs<\/code> veya <code>docker-compose logs -f<\/code> komutlar\u0131 t\u00fcm servislerin loglar\u0131n\u0131 veya belirli bir servisin loglar\u0131n\u0131 g\u00f6sterir.<\/p>\n<p>*   <strong>Cache Sorunlar\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Nginx \u00f6nbellekleme kullan\u0131yorsunuz ancak yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikler hemen yans\u0131m\u0131yor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Nginx \u00f6nbelle\u011fi, <code>proxy_cache_valid<\/code> gibi direktiflerle belirlenen s\u00fcreler boyunca yan\u0131tlar\u0131 saklar. De\u011fi\u015fikliklerin hemen g\u00f6r\u00fcnmesi i\u00e7in \u00f6nbelle\u011fi temizlemeniz gerekebilir. Bu genellikle <code>proxy_cache_path<\/code> i\u00e7inde tan\u0131mlanan \u00f6nbellek dizinini manuel olarak silerek yap\u0131l\u0131r. \u00dcretim ortamlar\u0131nda, \u00f6nbellek temizleme i\u00e7in \u00f6zel ara\u00e7lar veya Nginx mod\u00fclleri kullan\u0131labilir.<\/p>\n<p>Bu sorun giderme ipu\u00e7lar\u0131, Docker ve Nginx ile \u00e7al\u0131\u015f\u0131rken daha verimli olman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 makalede, Docker&#8217;\u0131n temel prensiplerinden ba\u015flayarak, Nginx&#8217;in g\u00fc\u00e7l\u00fc bir web sunucusu ve ters proxy olarak nas\u0131l kullan\u0131labilece\u011fine dair derinlemesine bir yolculuk yapt\u0131k. Konteynerizasyonun modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerindeki kritik rol\u00fcn\u00fc, Docker&#8217;\u0131n sundu\u011fu tutarl\u0131l\u0131k, izolasyon ve ta\u015f\u0131nabilirlik gibi avantajlarla birlikte ele ald\u0131k.<\/p>\n<p>Nginx&#8217;i Docker ile konteynerize etme ad\u0131mlar\u0131n\u0131, temel bir Nginx konteyneri \u00e7al\u0131\u015ft\u0131rmaktan, \u00f6zel konfig\u00fcrasyonlarla kendi imaj\u0131m\u0131z\u0131 olu\u015fturmaya kadar detayland\u0131rd\u0131k. Ard\u0131ndan, Nginx&#8217;i birden fazla arka u\u00e7 uygulamas\u0131n\u0131 tek bir eri\u015fim noktas\u0131 \u00fczerinden y\u00f6nlendiren bir ters proxy olarak nas\u0131l yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131, pratik \u00f6rnekler ve kod par\u00e7ac\u0131klar\u0131yla g\u00f6sterdik. \u00d6zellikle, Docker Compose kullanarak bu \u00e7oklu konteyner uygulamas\u0131n\u0131 nas\u0131l tek bir komutla y\u00f6netebilece\u011fimizi \u00f6\u011frenmek, karma\u015f\u0131k mimarilerin basitle\u015ftirilmesi a\u00e7\u0131s\u0131ndan \u00f6nemli bir kilometre ta\u015f\u0131 oldu.<\/p>\n<p>Docker ve Nginx&#8217;in birlikte kullan\u0131lmas\u0131, g\u00fcn\u00fcm\u00fcz\u00fcn mikroservis tabanl\u0131, bulut yerel uygulamalar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc, esnek ve \u00f6l\u00e7eklenebilir bir altyap\u0131 sunar. Uygulama geli\u015ftiricileri, operasyon ekipleri ve sistem mimarlar\u0131 i\u00e7in bu iki teknolojinin entegrasyonu, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r, ortam tutars\u0131zl\u0131klar\u0131n\u0131 ortadan kald\u0131r\u0131r ve genel sistem g\u00fcvenilirli\u011fini art\u0131r\u0131r.<\/p>\n<p>\u00d6\u011frendi\u011fimiz bu bilgiler \u0131\u015f\u0131\u011f\u0131nda, a\u015fa\u011f\u0131daki alanlarda daha fazla ke\u015fif yapman\u0131z \u00f6nerilir:<\/p>\n<p>*   <strong>SSL\/TLS Entegrasyonu:<\/strong> Nginx \u00fczerinde Let&#8217;s Encrypt ile \u00fccretsiz SSL sertifikalar\u0131n\u0131 otomatik olarak yap\u0131land\u0131rma.<br \/>\n*   <strong>Y\u00fck Dengeleme Stratejileri:<\/strong> Nginx&#8217;in farkl\u0131 y\u00fck dengeleme algoritmalar\u0131n\u0131 (least-connected, ip-hash vb.) daha detayl\u0131 inceleme.<br \/>\n*   <strong>Geli\u015fmi\u015f Nginx Mod\u00fclleri:<\/strong> Nginx&#8217;in sundu\u011fu di\u011fer mod\u00fcllerle (\u00f6rne\u011fin, kimlik do\u011frulama, rate limiting) yeteneklerini geni\u015fletme.<br \/>\n*   <strong>Docker Volume&#8217;ler ve Kal\u0131c\u0131 Veri:<\/strong> Konteynerlerde kal\u0131c\u0131 veri depolama i\u00e7in Docker volume&#8217;lerinin nas\u0131l kullan\u0131laca\u011f\u0131.<br \/>\n*   <strong>Docker Swarm veya Kubernetes:<\/strong> B\u00fcy\u00fck \u00f6l\u00e7ekli konteyner orkestrasyonu i\u00e7in bu platformlar\u0131 inceleme.<\/p>\n<p>Docker ve Nginx&#8217;in g\u00fcc\u00fcn\u00fc birle\u015ftirerek, uygulamalar\u0131n\u0131z\u0131 daha g\u00fcvenilir, daha h\u0131zl\u0131 ve daha y\u00f6netilebilir bir \u015fekilde da\u011f\u0131tabilir ve \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu makalenin, bu yolda size sa\u011flam bir temel sa\u011flad\u0131\u011f\u0131n\u0131 umuyoruz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Docker A\u00e7\u0131klamas\u0131: Nginx&#8217;i Konteynerize Etme ve Ters Proxy Olarak Kullanma Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131l\u0131m d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilmesi, da\u011f\u0131t\u0131lmas\u0131 ve y\u00f6netilmesi s\u00fcre\u00e7leri her zamankinden daha karma\u015f\u0131k hale gelmi\u015ftir.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1504],"tags":[],"class_list":{"0":"post-40856","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-nginx","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker A\u00e7\u0131klamas\u0131: Nginx&#039;i Konteynerize Etme ve Ters Proxy Olarak Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker A\u00e7\u0131klamas\u0131: Nginx&#039;i Konteynerize Etme ve Ters Proxy Olarak Kullanma\" \/>\n<meta property=\"og:description\" content=\"Docker A\u00e7\u0131klamas\u0131: Nginx&#039;i Konteynerize Etme ve Ters Proxy Olarak Kullanma Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131l\u0131m d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilmesi, da\u011f\u0131t\u0131lmas\u0131 ve y\u00f6netilmesi s\u00fcre\u00e7leri her zamankinden daha karma\u015f\u0131k hale gelmi\u015ftir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-01T17:40:56+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker A\u00e7\u0131klamas\u0131: Nginx&#8217;i Konteynerize Etme ve Ters Proxy Olarak Kullanma\",\"datePublished\":\"2026-03-01T17:40:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/\"},\"wordCount\":3899,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Nginx\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/\",\"name\":\"Docker A\u00e7\u0131klamas\u0131: Nginx'i Konteynerize Etme ve Ters Proxy Olarak Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-03-01T17:40:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker A\u00e7\u0131klamas\u0131: Nginx&#8217;i Konteynerize Etme ve Ters Proxy Olarak Kullanma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Docker A\u00e7\u0131klamas\u0131: Nginx'i Konteynerize Etme ve Ters Proxy Olarak Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker A\u00e7\u0131klamas\u0131: Nginx'i Konteynerize Etme ve Ters Proxy Olarak Kullanma","og_description":"Docker A\u00e7\u0131klamas\u0131: Nginx'i Konteynerize Etme ve Ters Proxy Olarak Kullanma Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131l\u0131m d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilmesi, da\u011f\u0131t\u0131lmas\u0131 ve y\u00f6netilmesi s\u00fcre\u00e7leri her zamankinden daha karma\u015f\u0131k hale gelmi\u015ftir.","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-03-01T17:40:56+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker A\u00e7\u0131klamas\u0131: Nginx&#8217;i Konteynerize Etme ve Ters Proxy Olarak Kullanma","datePublished":"2026-03-01T17:40:56+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/"},"wordCount":3899,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Nginx"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/","name":"Docker A\u00e7\u0131klamas\u0131: Nginx'i Konteynerize Etme ve Ters Proxy Olarak Kullanma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-03-01T17:40:56+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-aciklamasi-nginxi-konteynerize-etme-ve-ters-proxy-olarak-kullanma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker A\u00e7\u0131klamas\u0131: Nginx&#8217;i Konteynerize Etme ve Ters Proxy Olarak Kullanma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=40856"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40856\/revisions"}],"predecessor-version":[{"id":40857,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40856\/revisions\/40857"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}