{"id":33662,"date":"2025-11-05T16:22:50","date_gmt":"2025-11-05T13:22:50","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/"},"modified":"2025-11-05T16:22:50","modified_gmt":"2025-11-05T13:22:50","slug":"nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/","title":{"rendered":"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?"},"content":{"rendered":"<p><title>Nginx Location Direktifi: Tam E\u015fle\u015fme, Regex ve Proxy Ayarlar\u0131<\/title><br \/>\n<body><\/p>\n<p>Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131 veya hangi uygulamaya y\u00f6nlendirece\u011fini kontrol etmekte zorlan\u0131yor musunuz? Nginx Location direktifi ile web sunucunuzun istekleri nas\u0131l i\u015fleyece\u011fini, tam e\u015fle\u015fme, regex ve proxy ayarlar\u0131yla performans\u0131 nas\u0131l optimize edece\u011finizi \u00f6\u011frenin.<\/p>\n<h2>Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?<\/h2>\n<p>Modern web uygulamalar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a, gelen HTTP isteklerini do\u011fru bir \u015fekilde y\u00f6netmek ve y\u00f6nlendirmek hayati bir \u00f6nem ta\u015f\u0131r. \u0130\u015fte tam bu noktada Nginx&#8217;in kalbinde yer alan <code>location<\/code> direktifi devreye girer. Bu direktif, Nginx&#8217;in bir istemciden gelen URI&#8217;yi (Uniform Resource Identifier) nas\u0131l i\u015fleyece\u011fini belirleyen temel yap\u0131 ta\u015f\u0131d\u0131r. K\u0131sacas\u0131, bir web sunucusunun &#8220;beyni&#8221; gibi \u00e7al\u0131\u015farak, hangi iste\u011fin hangi dosyaya, hangi uygulama sunucusuna veya hangi \u00f6zel i\u015fleme y\u00f6nlendirilece\u011fine karar verir.<\/p>\n<p>Bir Nginx sunucusu, bir istemciden istek ald\u0131\u011f\u0131nda, \u00f6ncelikle <code>server<\/code> blo\u011fu i\u00e7inde tan\u0131mlanm\u0131\u015f <code>listen<\/code> ve <code>server_name<\/code> direktiflerine bakarak hangi sanal ana bilgisayar\u0131n bu iste\u011fi i\u015fleyece\u011fini belirler. Ard\u0131ndan, iste\u011fin URI&#8217;sini alarak bu <code>server<\/code> blo\u011fu i\u00e7indeki <code>location<\/code> direktifleriyle e\u015fle\u015ftirmeye \u00e7al\u0131\u015f\u0131r. Bu e\u015fle\u015ftirme s\u00fcreci, Nginx&#8217;in esnekli\u011finin ve g\u00fcc\u00fcn\u00fcn temelini olu\u015fturur. \u00d6rne\u011fin, statik dosyalar\u0131 do\u011frudan sunmak, dinamik i\u00e7erik i\u00e7in bir uygulama sunucusuna (\u00f6rne\u011fin Node.js, Python Flask veya PHP-FPM) istekleri iletmek, belirli URL&#8217;lere eri\u015fimi k\u0131s\u0131tlamak, \u00f6nbellekleme yapmak veya belirli istekleri ba\u015fka bir URL&#8217;ye y\u00f6nlendirmek gibi bir\u00e7ok farkl\u0131 senaryo <code>location<\/code> direktifleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netilir.<\/p>\n<p><code>location<\/code> direktifi olmadan, Nginx yaln\u0131zca varsay\u0131lan bir davran\u0131\u015f sergilerdi ki bu da \u00e7o\u011fu karma\u015f\u0131k web sitesi i\u00e7in yetersiz kal\u0131rd\u0131. Bu direktif sayesinde, sunucunuzun performans\u0131n\u0131 art\u0131rabilir, g\u00fcvenlik katmanlar\u0131 ekleyebilir ve farkl\u0131 servisleri tek bir alan ad\u0131 alt\u0131nda sorunsuz bir \u015fekilde entegre edebilirsiniz. \u00d6rne\u011fin, bir web sitesinde hem statik HTML\/CSS\/JS dosyalar\u0131, hem bir blog i\u00e7in PHP tabanl\u0131 WordPress, hem de bir API i\u00e7in Node.js uygulamas\u0131 \u00e7al\u0131\u015ft\u0131r\u0131yor olabilirsiniz. <code>location<\/code> direktifleri, Nginx&#8217;in bu farkl\u0131 bile\u015fenler aras\u0131ndaki trafi\u011fi sorunsuz bir \u015fekilde y\u00f6nlendirmesini sa\u011flar. Bu, geli\u015ftiricilere b\u00fcy\u00fck bir esneklik sunarken, son kullan\u0131c\u0131lara da h\u0131zl\u0131 ve g\u00fcvenilir bir deneyim vaat eder.<\/p>\n<p>Dolay\u0131s\u0131yla, Nginx ile profesyonel d\u00fczeyde \u00e7al\u0131\u015fmak isteyen herkesin <code>location<\/code> direktiflerinin inceliklerini ve farkl\u0131 e\u015fle\u015fme t\u00fcrlerini anlamas\u0131 kritik \u00f6nem ta\u015f\u0131r. Bu bilgi, sadece bir web sunucusunu ayakta tutmakla kalmaz, ayn\u0131 zamanda onu optimize etmek, \u00f6l\u00e7eklendirmek ve potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapatmak i\u00e7in de temel bir ara\u00e7t\u0131r. \u015eimdi, bu g\u00fc\u00e7l\u00fc direktifin farkl\u0131 t\u00fcrlerine ve nas\u0131l kullan\u0131ld\u0131klar\u0131na daha yak\u0131ndan bakal\u0131m.<\/p>\n<h2>Nginx Location Direktifi T\u00fcrleri Nelerdir ve Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h2>\n<p>Nginx&#8217;in <code>location<\/code> direktifi, gelen iste\u011fin URI&#8217;sine g\u00f6re farkl\u0131 bloklar\u0131 i\u015flemek i\u00e7in \u00e7e\u015fitli e\u015fle\u015fme t\u00fcrleri sunar. Bu e\u015fle\u015fme t\u00fcrleri, Nginx&#8217;in bir iste\u011fi hangi <code>location<\/code> blo\u011funun y\u00f6netece\u011fine karar verirken belirli bir \u00f6ncelik s\u0131ras\u0131na uymas\u0131n\u0131 sa\u011flar. Bu \u00f6ncelik s\u0131ras\u0131n\u0131 anlamak, beklenmedik davran\u0131\u015flar\u0131 \u00f6nlemek ve sunucunuzu do\u011fru \u015fekilde yap\u0131land\u0131rmak i\u00e7in hayati \u00f6neme sahiptir. Temelde, Nginx en spesifik e\u015fle\u015fmeyi bulmaya \u00e7al\u0131\u015f\u0131r, ancak bu &#8220;spesifiklik&#8221; farkl\u0131 operat\u00f6rlerle farkl\u0131 \u015fekillerde yorumlan\u0131r.<\/p>\n<p>\u0130\u015fte Nginx&#8217;in ana <code>location<\/code> e\u015fle\u015fme t\u00fcrleri ve bunlar\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131:<\/p>\n<ol>\n<li><strong>Tam E\u015fle\u015fme (<code>=<\/code>):<\/strong> En y\u00fcksek \u00f6nceli\u011fe sahiptir ve sadece URI tam olarak e\u015fle\u015fti\u011finde tetiklenir.<\/li>\n<li><strong>\u00d6nek E\u015fle\u015fmesi (Prefix, operat\u00f6rs\u00fcz veya <code>^~<\/code>):<\/strong> URI&#8217;nin ba\u015flang\u0131c\u0131yla e\u015fle\u015fir. <code>^~<\/code> ile kullan\u0131ld\u0131\u011f\u0131nda d\u00fczenli ifade e\u015fle\u015fmelerinden daha y\u00fcksek \u00f6ncelik kazan\u0131r.<\/li>\n<li><strong>D\u00fczenli \u0130fade E\u015fle\u015fmesi (Regex, <code>~<\/code> veya <code>~*<\/code>):<\/strong> URI&#8217;nin belirli bir desene uyup uymad\u0131\u011f\u0131n\u0131 kontrol eder. <code>~<\/code> b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyarl\u0131d\u0131r, <code>~*<\/code> ise duyars\u0131zd\u0131r.<\/li>\n<\/ol>\n<p>Nginx, bir istek ald\u0131\u011f\u0131nda, bu e\u015fle\u015fme t\u00fcrlerini belirli bir s\u0131rayla kontrol eder. \u0130lk olarak tam e\u015fle\u015fme aran\u0131r. E\u011fer bir tam e\u015fle\u015fme bulunursa, o <code>location<\/code> blo\u011fu kullan\u0131l\u0131r ve arama durur. Tam e\u015fle\u015fme yoksa, Nginx \u00f6nek e\u015fle\u015fmelerine bakar. E\u011fer <code>^~<\/code> ile ba\u015flayan bir \u00f6nek e\u015fle\u015fmesi bulunursa, bu da d\u00fczenli ifade e\u015fle\u015fmelerinden \u00f6nce kullan\u0131l\u0131r ve arama durur. E\u011fer bu da yoksa veya <code>^~<\/code> kullan\u0131lmam\u0131\u015fsa, Nginx d\u00fczenli ifade e\u015fle\u015fmelerine bakar ve ilk e\u015fle\u015feni kullan\u0131r. Son olarak, hi\u00e7bir \u00f6zel e\u015fle\u015fme bulunamazsa, varsay\u0131lan \u00f6nek e\u015fle\u015fmesi (genellikle <code>location \/<\/code> blo\u011fu) kullan\u0131l\u0131r.<\/p>\n<h3>Tam E\u015fle\u015fme (<code class=\"language-\">=<\/code>) Nas\u0131l Kullan\u0131l\u0131r ve Ne Zaman Tercih Edilmelidir?<\/h3>\n<p>Tam e\u015fle\u015fme operat\u00f6r\u00fc (<code>=<\/code>), Nginx&#8217;teki en y\u00fcksek \u00f6nceli\u011fe sahip <code>location<\/code> e\u015fle\u015fme t\u00fcr\u00fcd\u00fcr. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, bu operat\u00f6r sadece gelen iste\u011fin URI&#8217;si, <code>location<\/code> blo\u011funda belirtilen de\u011ferle <strong>tamamen<\/strong> ayn\u0131 oldu\u011funda tetiklenir. Bu, onu belirli, tekil dosyalar veya URI&#8217;ler i\u00e7in ideal bir se\u00e7enek haline getirir.<\/p>\n<p><strong>Neden ve Ne Zaman Kullan\u0131l\u0131r?<\/strong><\/p>\n<ul>\n<li><strong>Performans:<\/strong> Tam e\u015fle\u015fme, Nginx&#8217;in URI&#8217;yi h\u0131zl\u0131 bir \u015fekilde kontrol edip arama s\u00fcrecini durdurmas\u0131n\u0131 sa\u011flar. Bu, \u00f6zellikle s\u0131k\u00e7a eri\u015filen statik dosyalar (favicon, robots.txt gibi) i\u00e7in performans\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>Kesinlik:<\/strong> Sadece belirli bir URI i\u00e7in \u00f6zel kurallar uygulamak istedi\u011finizde \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. \u00d6rne\u011fin, bir dosya i\u00e7in farkl\u0131 bir \u00f6nbellekleme politikas\u0131 veya eri\u015fim k\u0131s\u0131tlamas\u0131 belirleyebilirsiniz.<\/li>\n<li><strong>\u00d6ncelik:<\/strong> Di\u011fer t\u00fcm <code>location<\/code> e\u015fle\u015fme t\u00fcrlerinden (\u00f6nek veya d\u00fczenli ifade) daha y\u00fcksek \u00f6nceli\u011fe sahip oldu\u011fu i\u00e7in, di\u011fer daha genel kurallar\u0131n \u00f6n\u00fcne ge\u00e7mek istedi\u011finizde tercih edilir.<\/li>\n<\/ul>\n<p><strong>Kullan\u0131m \u00d6rne\u011fi:<\/strong><\/p>\n<p>Diyelim ki web sitenizin ana sayfas\u0131ndaki <code>index.html<\/code> dosyas\u0131n\u0131 do\u011frudan sunmak ve bu dosya i\u00e7in \u00f6zel bir HTTP ba\u015fl\u0131\u011f\u0131 eklemek istiyorsunuz. Ayr\u0131ca, sitenizin <code>favicon.ico<\/code> dosyas\u0131n\u0131 da ayr\u0131 bir \u015fekilde y\u00f6netmek isteyebilirsiniz.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html;\n\n    # Tam e\u015fle\u015fme: Sadece \/index.html iste\u011fi i\u00e7in ge\u00e7erli\n    location = \/index.html {\n        add_header X-Custom-Header \"Ana Sayfa\";\n        # Bu blokta ba\u015fka kurallar da tan\u0131mlanabilir\n    }\n\n    # Tam e\u015fle\u015fme: Sadece \/favicon.ico iste\u011fi i\u00e7in ge\u00e7erli\n    location = \/favicon.ico {\n        access_log off;\n        log_not_found off;\n        expires 365d; # Favicon i\u00e7in uzun s\u00fcreli \u00f6nbellekleme\n    }\n\n    # Di\u011fer t\u00fcm istekler i\u00e7in varsay\u0131lan blok\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li><code>location = \/index.html<\/code> blo\u011fu, sadece tam olarak <code>\/index.html<\/code> URI&#8217;si istendi\u011finde tetiklenir. Burada \u00f6zel bir ba\u015fl\u0131k eklenir.<\/li>\n<li><code>location = \/favicon.ico<\/code> blo\u011fu, sadece <code>\/favicon.ico<\/code> URI&#8217;si istendi\u011finde \u00e7al\u0131\u015f\u0131r. Bu blokta eri\u015fim g\u00fcnl\u00fckleri kapat\u0131l\u0131r ve uzun s\u00fcreli bir \u00f6nbellekleme ba\u015fl\u0131\u011f\u0131 (<code>expires 365d<\/code>) eklenir. Bu, taray\u0131c\u0131lar\u0131n favicon&#8217;u uzun s\u00fcre \u00f6nbelle\u011finde tutmas\u0131n\u0131 sa\u011flayarak performans\u0131 art\u0131r\u0131r.<\/li>\n<li><code>location \/<\/code> blo\u011fu, di\u011fer t\u00fcm e\u015fle\u015fmeyen istekleri (\u00f6nek e\u015fle\u015fmesi olarak) ele al\u0131r.<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Tam e\u015fle\u015fmeler, Nginx&#8217;in e\u015fle\u015fme algoritmas\u0131n\u0131 erken durdurdu\u011fu i\u00e7in, \u00f6zellikle s\u0131k\u00e7a eri\u015filen k\u00fc\u00e7\u00fck, statik dosyalar (favicon, robots.txt, sitemap.xml gibi) i\u00e7in kullanarak sunucu y\u00fck\u00fcn\u00fc azaltabilir ve yan\u0131t s\u00fcrelerini iyile\u015ftirebilirsiniz. Bu, Nginx&#8217;in di\u011fer, daha karma\u015f\u0131k e\u015fle\u015fme kurallar\u0131n\u0131 de\u011ferlendirmesini engeller.\n<\/div>\n<p>Vaka Analizi: Y\u00fcksek Trafikli Bir Blogda Favicon ve Robots.txt Y\u00f6netimi<\/p>\n<p>Y\u00fcksek trafik alan bir blog sitesinde, her sayfa y\u00fcklemesinde taray\u0131c\u0131lar <code>\/favicon.ico<\/code> ve arama motoru botlar\u0131 <code>\/robots.txt<\/code> dosyalar\u0131n\u0131 ister. Bu dosyalar genellikle nadiren de\u011fi\u015fir. E\u011fer bu istekleri genel bir <code>location \/<\/code> blo\u011fu \u00fczerinden i\u015flerseniz, Nginx her seferinde daha fazla kural\u0131 de\u011ferlendirmek zorunda kalabilir. Tam e\u015fle\u015fme kullanarak bu dosyalar\u0131 do\u011frudan ve optimize bir \u015fekilde sunmak, sunucu kaynaklar\u0131n\u0131 korur ve gereksiz i\u015flem y\u00fck\u00fcn\u00fc ortadan kald\u0131r\u0131r. \u00d6rne\u011fin, <code>favicon.ico<\/code> i\u00e7in uzun s\u00fcreli \u00f6nbellekleme ve g\u00fcnl\u00fck kayd\u0131n\u0131 kapatma, hem sunucu y\u00fck\u00fcn\u00fc azalt\u0131r hem de istemcinin daha h\u0131zl\u0131 yan\u0131t almas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>\u00d6nek E\u015fle\u015fmesi (Prefix, operat\u00f6rs\u00fcz veya <code class=\"language-\">^~<\/code>) Ne Anlama Gelir ve Ne Zaman Kullan\u0131lmal\u0131d\u0131r?<\/h3>\n<p>\u00d6nek e\u015fle\u015fmesi, Nginx&#8217;teki en yayg\u0131n kullan\u0131lan ve varsay\u0131lan <code>location<\/code> e\u015fle\u015fme t\u00fcr\u00fcd\u00fcr. Bu t\u00fcr, URI&#8217;nin ba\u015flang\u0131c\u0131n\u0131n (\u00f6nek) <code>location<\/code> blo\u011funda belirtilen de\u011ferle e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol eder. Herhangi bir operat\u00f6r (<code>=<\/code>, <code>~<\/code>, <code>~*<\/code>) olmadan kullan\u0131lan <code>location<\/code> bloklar\u0131 \u00f6nek e\u015fle\u015fmesi olarak kabul edilir.<\/p>\n<p><strong>Neden ve Ne Zaman Kullan\u0131l\u0131r?<\/strong><\/p>\n<ul>\n<li><strong>Genel Ama\u00e7l\u0131:<\/strong> Belirli bir dizindeki t\u00fcm dosyalar\u0131 veya belirli bir URL yap\u0131s\u0131na sahip t\u00fcm istekleri i\u015flemek i\u00e7in idealdir. \u00d6rne\u011fin, <code>\/static\/<\/code> ile ba\u015flayan t\u00fcm istekleri belirli bir dizinden sunmak.<\/li>\n<li><strong>Esneklik:<\/strong> Tam e\u015fle\u015fmeye g\u00f6re daha esnektir ve belirli bir \u00f6nekle ba\u015flayan farkl\u0131 dosya t\u00fcrlerini veya alt dizinleri kapsayabilir.<\/li>\n<li><strong><code>^~<\/code> Operat\u00f6r\u00fc:<\/strong> E\u011fer \u00f6nek e\u015fle\u015fmesinin d\u00fczenli ifade e\u015fle\u015fmelerinden daha y\u00fcksek \u00f6nceli\u011fe sahip olmas\u0131n\u0131 istiyorsan\u0131z <code>^~<\/code> operat\u00f6r\u00fcn\u00fc kullan\u0131rs\u0131n\u0131z. Bu, Nginx&#8217;in bu \u00f6nekle e\u015fle\u015fen bir URI buldu\u011funda d\u00fczenli ifade aramay\u0131 durdurmas\u0131n\u0131 sa\u011flar. Bu, \u00f6zellikle bir dizindeki statik dosyalar\u0131 sunarken, o dizinle ilgili herhangi bir d\u00fczenli ifade kural\u0131n\u0131n devreye girmesini engellemek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<\/ul>\n<p><strong>Kullan\u0131m \u00d6rne\u011fi:<\/strong><\/p>\n<p>Bir web uygulaman\u0131z oldu\u011funu ve statik dosyalar\u0131n\u0131z\u0131 (CSS, JS, resimler) <code>\/static\/<\/code> dizini alt\u0131nda, kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen medya dosyalar\u0131n\u0131 ise <code>\/media\/<\/code> dizini alt\u0131nda tuttu\u011funuzu varsayal\u0131m. Ayr\u0131ca, uygulaman\u0131z\u0131n API&#8217;si i\u00e7in <code>\/api\/<\/code> \u00f6nekiyle ba\u015flayan t\u00fcm istekleri bir uygulama sunucusuna y\u00f6nlendirmek isteyebilirsiniz.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html; # Varsay\u0131lan root dizini\n\n    # Statik dosyalar i\u00e7in \u00f6nek e\u015fle\u015fmesi (d\u00fczenli ifadelerden \u00f6nce i\u015flensin)\n    location ^~ \/static\/ {\n        alias \/var\/www\/static_assets\/; # Farkl\u0131 bir fiziksel dizinden sun\n        expires 30d; # Uzun s\u00fcreli \u00f6nbellekleme\n        add_header Cache-Control \"public, max-age=2592000\";\n    }\n\n    # Medya dosyalar\u0131 i\u00e7in \u00f6nek e\u015fle\u015fmesi\n    location \/media\/ {\n        alias \/var\/www\/user_uploads\/; # Kullan\u0131c\u0131 y\u00fcklemeleri i\u00e7in\n        expires 7d;\n    }\n\n    # API istekleri i\u00e7in \u00f6nek e\u015fle\u015fmesi, bir uygulama sunucusuna proxy\n    location \/api\/ {\n        proxy_pass http:\/\/backend_app_server;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n\n    # Varsay\u0131lan \u00f6nek e\u015fle\u015fmesi: Di\u011fer t\u00fcm istekler i\u00e7in (genellikle tek bir slash ile)\n    location \/ {\n        try_files $uri $uri\/ \/index.html; # Tek sayfa uygulamalar\u0131 i\u00e7in\n    }\n}\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li><code>location ^~ \/static\/<\/code> blo\u011fu, <code>\/static\/<\/code> ile ba\u015flayan t\u00fcm URI&#8217;leri <code>\/var\/www\/static_assets\/<\/code> dizininden sunar ve d\u00fczenli ifade e\u015fle\u015fmelerinden \u00f6nce i\u015flenir. Bu, statik varl\u0131klar\u0131n h\u0131zl\u0131 ve verimli bir \u015fekilde sunulmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>location \/media\/<\/code> blo\u011fu, <code>\/media\/<\/code> ile ba\u015flayan t\u00fcm URI&#8217;leri <code>\/var\/www\/user_uploads\/<\/code> dizininden sunar.<\/li>\n<li><code>location \/api\/<\/code> blo\u011fu, <code>\/api\/<\/code> ile ba\u015flayan t\u00fcm URI&#8217;leri <code>backend_app_server<\/code> adl\u0131 bir uygulama sunucusuna y\u00f6nlendirir.<\/li>\n<li><code>location \/<\/code> blo\u011fu, di\u011fer t\u00fcm e\u015fle\u015fmeyen istekleri ele al\u0131r ve bir tek sayfa uygulamas\u0131 (SPA) senaryosunda <code>index.html<\/code>&#8216;e geri d\u00fc\u015fer.<\/li>\n<\/ul>\n<p>Vaka Analizi: Mikroservis Mimarisi ve API Y\u00f6nlendirmesi<\/p>\n<p>B\u00fcy\u00fck bir e-ticaret platformunun mikroservis mimarisinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn. \u00dcr\u00fcnler i\u00e7in <code>\/api\/products\/<\/code>, kullan\u0131c\u0131lar i\u00e7in <code>\/api\/users\/<\/code> ve sipari\u015fler i\u00e7in <code>\/api\/orders\/<\/code> gibi farkl\u0131 API&#8217;ler farkl\u0131 arka u\u00e7 servisleri taraf\u0131ndan y\u00f6netiliyor olabilir. Nginx&#8217;teki \u00f6nek e\u015fle\u015fmeleri, bu API isteklerini ilgili mikroservislere y\u00f6nlendirmek i\u00e7in m\u00fckemmel bir \u00e7\u00f6z\u00fcmd\u00fcr. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-nginx\">location \/api\/products\/ {\n    proxy_pass http:\/\/product_service_cluster;\n}\n\nlocation \/api\/users\/ {\n    proxy_pass http:\/\/user_service_cluster;\n}\n<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, Nginx&#8217;in gelen istekleri URI \u00f6neklerine g\u00f6re ak\u0131ll\u0131ca da\u011f\u0131tmas\u0131n\u0131 sa\u011flayarak, karma\u015f\u0131k bir sistemin tek bir giri\u015f noktas\u0131 \u00fczerinden tutarl\u0131 bir \u015fekilde hizmet vermesine olanak tan\u0131r.<\/p>\n<h3>D\u00fczenli \u0130fadeler (Regex, <code class=\"language-\">~<\/code> ve <code class=\"language-\">~*<\/code>) ile Dinamik Y\u00f6nlendirmeler Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>D\u00fczenli ifade (regex) e\u015fle\u015fmeleri, Nginx&#8217;te en esnek <code>location<\/code> e\u015fle\u015fme t\u00fcr\u00fcd\u00fcr ve karma\u015f\u0131k URL desenlerini veya dinamik i\u00e7erikleri y\u00f6netmek i\u00e7in kullan\u0131l\u0131r. Ancak, tam e\u015fle\u015fme ve <code>^~<\/code> ile ba\u015flayan \u00f6nek e\u015fle\u015fmelerine g\u00f6re daha d\u00fc\u015f\u00fck \u00f6nceli\u011fe sahiptirler. Nginx, birden fazla d\u00fczenli ifade e\u015fle\u015fmesi buldu\u011funda, yap\u0131land\u0131rma dosyas\u0131nda ilk kar\u015f\u0131la\u015ft\u0131\u011f\u0131 e\u015fle\u015fmeyi kullan\u0131r.<\/p>\n<p>\u0130ki ana d\u00fczenli ifade operat\u00f6r\u00fc vard\u0131r:<\/p>\n<ul>\n<li><strong><code>~<\/code> (B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyarl\u0131):<\/strong> URI&#8217;nin belirtilen d\u00fczenli ifadeyle b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf ayr\u0131m\u0131 yaparak e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol eder.<\/li>\n<li><strong><code>~*<\/code> (B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyars\u0131z):<\/strong> URI&#8217;nin belirtilen d\u00fczenli ifadeyle b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf ayr\u0131m\u0131 yapmadan e\u015fle\u015fip e\u015fle\u015fmedi\u011fini kontrol eder.<\/li>\n<\/ul>\n<p><strong>Neden ve Ne Zaman Kullan\u0131l\u0131r?<\/strong><\/p>\n<ul>\n<li><strong>Dinamik \u0130\u00e7erik:<\/strong> URL&#8217;nin bir k\u0131sm\u0131n\u0131n de\u011fi\u015fken oldu\u011fu durumlar i\u00e7in idealdir. \u00d6rne\u011fin, dosya uzant\u0131s\u0131na g\u00f6re i\u015flem yapmak (<code>.php<\/code>, <code>.jpg<\/code>, <code>.css<\/code>).<\/li>\n<li><strong>SEO Dostu URL&#8217;ler:<\/strong> Eski, karma\u015f\u0131k URL yap\u0131lar\u0131n\u0131 yeni, daha okunabilir URL&#8217;lere y\u00f6nlendirmek i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>Karma\u015f\u0131k Desenler:<\/strong> Basit \u00f6nek e\u015fle\u015fmeleriyle y\u00f6netilemeyecek kadar karma\u015f\u0131k URL desenlerini ele almak i\u00e7in gereklidir.<\/li>\n<\/ul>\n<p><strong>Kullan\u0131m \u00d6rne\u011fi:<\/strong><\/p>\n<p>Diyelim ki web sitenizdeki t\u00fcm PHP dosyalar\u0131n\u0131 bir PHP-FPM servisine y\u00f6nlendirmek istiyorsunuz. Ayr\u0131ca, t\u00fcm resim dosyalar\u0131n\u0131 (JPG, PNG, GIF) belirli bir \u00f6nbellekleme politikas\u0131yla sunmak isteyebilirsiniz.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html;\n\n    # PHP dosyalar\u0131n\u0131 PHP-FPM'e y\u00f6nlendirme (b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyarl\u0131)\n    location ~ \\.php$ {\n        include fastcgi_params;\n        fastcgi_pass unix:\/var\/run\/php\/php7.4-fpm.sock; # PHP-FPM soket yolu\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    }\n\n    # Resim dosyalar\u0131n\u0131 \u00f6nbellekleme (b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyars\u0131z)\n    location ~* \\.(jpg|jpeg|gif|png|webp|svg)$ {\n        expires 30d;\n        add_header Cache-Control \"public, max-age=2592000\";\n        # Hotlinking'i \u00f6nlemek i\u00e7in referer kontrol\u00fc eklenebilir\n        valid_referers none blocked server_names ~\\.google\\. ~\\.bing\\.;\n        if ($invalid_referer) {\n            return 403;\n        }\n    }\n\n    # Gizli dosyalar\u0131 engelleme\n    location ~ \/\\. {\n        deny all;\n    }\n\n    # Varsay\u0131lan blok\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li><code>location ~ \\.php$<\/code> blo\u011fu, URI&#8217;si <code>.php<\/code> ile biten t\u00fcm istekleri yakalar ve bunlar\u0131 PHP-FPM servisine y\u00f6nlendirir. <code>$<\/code> i\u015fareti URI&#8217;nin sonunu belirtir, b\u00f6ylece sadece dosya uzant\u0131s\u0131 <code>.php<\/code> olanlar e\u015fle\u015fir.<\/li>\n<li><code>location ~* \\.(jpg|jpeg|gif|png|webp|svg)$<\/code> blo\u011fu, URI&#8217;si <code>.jpg<\/code>, <code>.jpeg<\/code>, <code>.gif<\/code>, <code>.png<\/code>, <code>.webp<\/code> veya <code>.svg<\/code> ile biten t\u00fcm resim dosyalar\u0131n\u0131 b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf ayr\u0131m\u0131 yapmaks\u0131z\u0131n yakalar. Bu dosyalar i\u00e7in uzun s\u00fcreli \u00f6nbellekleme ba\u015fl\u0131klar\u0131 eklenir ve basit bir hotlinking \u00f6nleme mekanizmas\u0131 uygulan\u0131r.<\/li>\n<li><code>location ~ \/\\.<\/code> blo\u011fu, <code>.<\/code> ile ba\u015flayan (gizli) dosyalara eri\u015fimi tamamen engeller, bu da g\u00fcvenlik i\u00e7in iyi bir uygulamad\u0131r.<\/li>\n<\/ul>\n<p>Vaka Analizi: Eski URL&#8217;leri Yeni Yap\u0131ya Y\u00f6nlendirme<\/p>\n<p>Bir web sitesinin URL yap\u0131s\u0131n\u0131 de\u011fi\u015ftirdi\u011finizi ve eski URL&#8217;lerin hala internette referans g\u00f6sterildi\u011fini varsayal\u0131m. SEO de\u011ferini kaybetmemek ve kullan\u0131c\u0131 deneyimini bozmamak i\u00e7in eski URL&#8217;leri yeni URL&#8217;lere y\u00f6nlendirmeniz gerekir. D\u00fczenli ifadeler bu senaryo i\u00e7in idealdir:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name old-example.com;\n\n    # Eski blog g\u00f6nderisi URL'lerini yeni yap\u0131ya y\u00f6nlendirme\n    # \u00d6rne\u011fin: \/blog\/id\/123 -> \/yeni-blog\/post-basligi-123\n    location ~ ^\/blog\/id\/(\\d+)$ {\n        return 301 \/yeni-blog\/post-basligi-$1; # $1 yakalanan ID'yi temsil eder\n    }\n\n    # Eski \u00fcr\u00fcn URL'lerini yeni e-ticaret platformuna y\u00f6nlendirme\n    # \u00d6rne\u011fin: \/urun.php?id=456 -> \/urunler\/456\n    location ~ ^\/urun\\.php\\?id=(\\d+)$ {\n        return 301 \/urunler\/$1;\n    }\n\n    # T\u00fcm di\u011fer eski domain isteklerini yeni domain'e y\u00f6nlendirme\n    location \/ {\n        return 301 http:\/\/new-example.com$request_uri;\n    }\n}\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, regex yakalama gruplar\u0131 (parantez i\u00e7indeki <code>(\\d+)<\/code> gibi) kullan\u0131larak dinamik de\u011ferler (ID&#8217;ler) yakalan\u0131r ve <code>$1<\/code> gibi de\u011fi\u015fkenlerle yeni URL&#8217;de kullan\u0131l\u0131r. Bu, binlerce eski URL&#8217;yi tek bir kural ile y\u00f6netmenizi sa\u011flar.<\/p>\n<h2>Nginx Location Direktifinde Proxy Ayarlar\u0131 Nas\u0131l Yap\u0131l\u0131r ve Neden Kullan\u0131lmal\u0131d\u0131r?<\/h2>\n<p>Nginx, bir web sunucusu olarak do\u011frudan dosya sunman\u0131n yan\u0131 s\u0131ra, gelen istekleri ba\u015fka bir sunucuya (genellikle bir uygulama sunucusu veya ba\u015fka bir mikroservis) iletmek i\u00e7in de yayg\u0131n olarak kullan\u0131l\u0131r. Bu i\u015fleme &#8220;ters proxy&#8221; (reverse proxy) denir ve <code>location<\/code> direktifi i\u00e7inde <code>proxy_pass<\/code> komutu ile yap\u0131land\u0131r\u0131l\u0131r. Ters proxy, modern web mimarilerinin temel ta\u015flar\u0131ndan biridir.<\/p>\n<p><strong>Neden Ters Proxy Kullan\u0131l\u0131r?<\/strong><\/p>\n<ul>\n<li><strong>Y\u00fck Dengeleme:<\/strong> Birden fazla uygulama sunucusu aras\u0131nda trafi\u011fi da\u011f\u0131tarak y\u00fcksek eri\u015filebilirlik ve \u00f6l\u00e7eklenebilirlik sa\u011flar.<\/li>\n<li><strong>G\u00fcvenlik:<\/strong> Uygulama sunucular\u0131n\u0131 do\u011frudan internete maruz b\u0131rakmak yerine Nginx&#8217;in arkas\u0131na saklayarak bir g\u00fcvenlik katman\u0131 olu\u015fturur. Nginx, DDoS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma, SSL\/TLS sonland\u0131rma gibi g\u00f6revleri \u00fcstlenebilir.<\/li>\n<li><strong>\u00d6nbellekleme:<\/strong> Nginx, proxy&#8217;ledi\u011fi i\u00e7erikleri \u00f6nbelle\u011fe alarak uygulama sunucular\u0131n\u0131n y\u00fck\u00fcn\u00fc azaltabilir ve yan\u0131t s\u00fcrelerini iyile\u015ftirebilir.<\/li>\n<li><strong>Statik \u0130\u00e7erik Sunumu:<\/strong> Dinamik i\u00e7erik isteklerini uygulama sunucusuna y\u00f6nlendirirken, statik dosyalar\u0131 (CSS, JS, resimler) do\u011frudan Nginx&#8217;ten sunarak uygulama sunucusunun bu t\u00fcr g\u00f6revlerle me\u015fgul olmas\u0131n\u0131 engeller.<\/li>\n<li><strong>API A\u011f Ge\u00e7idi:<\/strong> Farkl\u0131 arka u\u00e7 servislerine (mikroservislere) giden API isteklerini tek bir giri\u015f noktas\u0131ndan y\u00f6nlendirme.<\/li>\n<\/ul>\n<p><strong>Temel Proxy Direktifleri:<\/strong><\/p>\n<ul>\n<li><strong><code>proxy_pass URL;<\/code>:<\/strong> \u0130ste\u011fin iletilece\u011fi hedef sunucunun adresini belirtir. URL&#8217;nin sonundaki slash (<code>\/<\/code>) karakteri \u00f6nemlidir ve farkl\u0131 davran\u0131\u015flara neden olur.\n<ul>\n<li>E\u011fer <code>proxy_pass<\/code> URL&#8217;nin sonunda slash varsa (<code>http:\/\/backend\/<\/code>), <code>location<\/code> blo\u011fundaki e\u015fle\u015fen URI k\u0131sm\u0131 kald\u0131r\u0131l\u0131r ve kalan k\u0131s\u0131m hedefe g\u00f6nderilir.<\/li>\n<li>E\u011fer <code>proxy_pass<\/code> URL&#8217;nin sonunda slash yoksa (<code>http:\/\/backend<\/code>), <code>location<\/code> blo\u011fundaki e\u015fle\u015fen URI k\u0131sm\u0131 da hedefe g\u00f6nderilir.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>proxy_set_header Header-Name Value;<\/code>:<\/strong> Nginx&#8217;in proxy&#8217;ledi\u011fi iste\u011fe ekleyece\u011fi veya de\u011fi\u015ftirece\u011fi HTTP ba\u015fl\u0131klar\u0131n\u0131 belirtir. En s\u0131k kullan\u0131lanlar:\n<ul>\n<li><code>Host<\/code>: Orijinal ana bilgisayar ad\u0131n\u0131 arka u\u00e7 sunucusuna iletir.<\/li>\n<li><code>X-Real-IP<\/code>: \u0130stemcinin ger\u00e7ek IP adresini arka u\u00e7 sunucusuna iletir.<\/li>\n<li><code>X-Forwarded-For<\/code>: \u0130stemcinin ger\u00e7ek IP adresini (veya proxy zincirindeki di\u011fer proxy&#8217;lerin IP&#8217;lerini) arka u\u00e7 sunucusuna iletir.<\/li>\n<li><code>X-Forwarded-Proto<\/code>: \u0130ste\u011fin orijinal protokol\u00fcn\u00fc (HTTP veya HTTPS) arka u\u00e7 sunucusuna iletir.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>proxy_redirect<\/code>:<\/strong> Arka u\u00e7 sunucudan gelen y\u00f6nlendirme (301, 302) yan\u0131tlar\u0131ndaki <code>Location<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 Nginx&#8217;in yeniden yazmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong><code>proxy_buffering on|off;<\/code>:<\/strong> Nginx&#8217;in arka u\u00e7 sunucudan gelen yan\u0131tlar\u0131 tamponlay\u0131p tamponlamayaca\u011f\u0131n\u0131 kontrol eder. Performans i\u00e7in genellikle a\u00e7\u0131k b\u0131rak\u0131l\u0131r.<\/li>\n<li><strong><code>proxy_cache<\/code>:<\/strong> Proxy&#8217;lenen yan\u0131tlar\u0131 \u00f6nbelle\u011fe almak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<p><strong>Kullan\u0131m \u00d6rne\u011fi:<\/strong><\/p>\n<p>Bir Node.js uygulamas\u0131n\u0131 Nginx&#8217;in arkas\u0131nda \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizi varsayal\u0131m. Nginx gelen t\u00fcm istekleri (statik dosyalar hari\u00e7) Node.js uygulamas\u0131na y\u00f6nlendirecek ve SSL sonland\u0131rmas\u0131n\u0131 da Nginx yapacakt\u0131r.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    listen 443 ssl; # SSL\/TLS sonland\u0131rmas\u0131\n    server_name myapp.com;\n\n    ssl_certificate \/etc\/nginx\/certs\/myapp.com.crt;\n    ssl_certificate_key \/etc\/nginx\/certs\/myapp.com.key;\n\n    # Statik dosyalar\u0131 do\u011frudan Nginx'ten sun\n    location \/static\/ {\n        root \/var\/www\/myapp\/public; # Statik dosyalar\u0131n bulundu\u011fu dizin\n        expires 30d;\n        add_header Cache-Control \"public, max-age=2592000\";\n    }\n\n    # Geri kalan t\u00fcm istekleri Node.js uygulamas\u0131na proxy et\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000; # Node.js uygulamas\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 adres ve port\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\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        proxy_cache_bypass $http_pragma;\n        proxy_cache_revalidate on; # \u00d6nbelle\u011fi yeniden do\u011frula\n        proxy_cache_min_uses 1;\n        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;\n        proxy_redirect off; # Arka u\u00e7tan gelen y\u00f6nlendirmeleri Nginx'in de\u011fi\u015ftirmemesi\n    }\n}\n<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rmada:<\/p>\n<ul>\n<li>Nginx, 80 ve 443 portlar\u0131ndan gelen istekleri dinler ve SSL\/TLS sonland\u0131rmas\u0131n\u0131 yapar.<\/li>\n<li><code>location \/static\/<\/code> blo\u011fu, <code>\/static\/<\/code> ile ba\u015flayan t\u00fcm istekleri do\u011frudan Nginx&#8217;in dosya sisteminden sunar ve uzun s\u00fcreli \u00f6nbellekleme ba\u015fl\u0131klar\u0131 ekler.<\/li>\n<li><code>location \/<\/code> blo\u011fu, di\u011fer t\u00fcm istekleri (statik olmayan) <code>http:\/\/127.0.0.1:3000<\/code> adresinde \u00e7al\u0131\u015fan Node.js uygulamas\u0131na iletir.<\/li>\n<li><code>proxy_set_header<\/code> direktifleri, orijinal iste\u011fe ait \u00f6nemli bilgileri (Host, IP, protokol) Node.js uygulamas\u0131na ileterek uygulaman\u0131n do\u011fru \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. \u00d6zellikle <code>Host<\/code> ba\u015fl\u0131\u011f\u0131, uygulaman\u0131n sanal ana bilgisayar ad\u0131n\u0131 do\u011fru bir \u015fekilde alg\u0131lamas\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/li>\n<\/ul>\n<p>Vaka Analizi: Mikroservisler Aras\u0131 API Y\u00f6nlendirmesi ve G\u00fcvenlik<\/p>\n<p>B\u00fcy\u00fck bir SaaS (Hizmet Olarak Yaz\u0131l\u0131m) platformunda, farkl\u0131 i\u015flevsellikler i\u00e7in ayr\u0131lm\u0131\u015f birden fazla mikroservis bulunur: <code>Kullan\u0131c\u0131 Y\u00f6netimi<\/code>, <code>\u00d6deme \u0130\u015flemleri<\/code>, <code>Bildirimler<\/code>. Bu servislerin her biri kendi sunucusunda \u00e7al\u0131\u015f\u0131r ve belirli bir API yoluyla eri\u015filebilir. Nginx, bu servislerin \u00f6n\u00fcne bir API a\u011f ge\u00e7idi olarak konumland\u0131r\u0131labilir:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 443 ssl;\n    server_name api.saasplatform.com;\n    # SSL config...\n\n    # Kullan\u0131c\u0131 Y\u00f6netimi Servisi\n    location \/users\/ {\n        proxy_pass http:\/\/user_service_internal:8081\/;\n        proxy_set_header Host $host;\n        # ... di\u011fer proxy_set_header ayarlar\u0131\n    }\n\n    # \u00d6deme \u0130\u015flemleri Servisi\n    location \/payments\/ {\n        proxy_pass http:\/\/payment_service_internal:8082\/;\n        proxy_set_header Host $host;\n        # ... di\u011fer proxy_set_header ayarlar\u0131\n        # Bu servise sadece belirli IP'lerden eri\u015fim izni verilebilir\n        allow 192.168.1.0\/24;\n        deny all;\n    }\n\n    # Bildirim Servisi\n    location \/notifications\/ {\n        proxy_pass http:\/\/notification_service_internal:8083\/;\n        proxy_set_header Host $host;\n        # ... di\u011fer proxy_set_header ayarlar\u0131\n    }\n}\n<\/code><\/pre>\n<p>Bu senaryoda, Nginx:<\/p>\n<ul>\n<li>T\u00fcm API isteklerini <code>api.saasplatform.com<\/code> \u00fczerinden al\u0131r.<\/li>\n<li>URI&#8217;ye g\u00f6re ilgili mikroservise (<code>user_service_internal<\/code>, <code>payment_service_internal<\/code> vb.) y\u00f6nlendirir.<\/li>\n<li><code>\/payments\/<\/code> API&#8217;sine eri\u015fimi belirli bir dahili IP aral\u0131\u011f\u0131yla k\u0131s\u0131tlayarak ek bir g\u00fcvenlik katman\u0131 sa\u011flar.<\/li>\n<li>Arka u\u00e7 servislerini do\u011frudan internete maruz b\u0131rakmaz, b\u00f6ylece g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azalt\u0131r.<\/li>\n<\/ul>\n<p>Bu yap\u0131land\u0131rma, karma\u015f\u0131k da\u011f\u0131t\u0131k sistemlerde API y\u00f6netimini basitle\u015ftirir, g\u00fcvenli\u011fi art\u0131r\u0131r ve esnek bir mimari sunar.<\/p>\n<h2>Nginx Location Direktifleri Aras\u0131ndaki \u00d6ncelik \u00c7at\u0131\u015fmalar\u0131 Nas\u0131l \u00c7\u00f6z\u00fcl\u00fcr?<\/h2>\n<p>Nginx&#8217;in <code>location<\/code> direktifleri, gelen istek URI&#8217;sini e\u015fle\u015ftirmek i\u00e7in \u00e7e\u015fitli operat\u00f6rler sunar. Ancak, birden fazla <code>location<\/code> blo\u011fu ayn\u0131 URI ile e\u015fle\u015febilecek durumlarda, Nginx&#8217;in hangi blo\u011fu se\u00e7ece\u011fini bilmek kritik \u00f6neme sahiptir. Bu, &#8220;\u00f6ncelik \u00e7at\u0131\u015fmalar\u0131&#8221; olarak adland\u0131r\u0131labilir ve Nginx&#8217;in belirli bir algoritmay\u0131 takip ederek bu \u00e7at\u0131\u015fmalar\u0131 \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc anlamak, beklenmeyen davran\u0131\u015flar\u0131 \u00f6nlemenin anahtar\u0131d\u0131r.<\/p>\n<p>Nginx, bir iste\u011fi i\u015flerken a\u015fa\u011f\u0131daki \u00f6ncelik s\u0131ras\u0131n\u0131 izler:<\/p>\n<ol>\n<li><strong>Tam E\u015fle\u015fme (<code>=<\/code>):<\/strong> Nginx \u00f6nce tam e\u015fle\u015fmeleri kontrol eder. E\u011fer iste\u011fin URI&#8217;si bir <code>location = \/uri<\/code> blo\u011fu ile tam olarak e\u015fle\u015firse, bu blok kullan\u0131l\u0131r ve Nginx ba\u015fka hi\u00e7bir e\u015fle\u015fme aramaz. Bu, en y\u00fcksek \u00f6nceli\u011fe sahiptir.<\/li>\n<li><strong>\u00d6nek E\u015fle\u015fmesi (<code>^~<\/code>):<\/strong> Tam e\u015fle\u015fme bulunamazsa, Nginx <code>^~<\/code> (caret tilde) operat\u00f6r\u00fc ile tan\u0131mlanm\u0131\u015f \u00f6nek e\u015fle\u015fmelerine bakar. E\u011fer bir <code>location ^~ \/prefix<\/code> blo\u011fu iste\u011fin URI&#8217;sinin ba\u015flang\u0131c\u0131yla e\u015fle\u015firse, bu blok kullan\u0131l\u0131r ve Nginx d\u00fczenli ifade e\u015fle\u015fmeleri de dahil olmak \u00fczere ba\u015fka hi\u00e7bir e\u015fle\u015fme aramaz. Bu operat\u00f6r, d\u00fczenli ifade e\u015fle\u015fmelerinden daha y\u00fcksek \u00f6ncelik kazanmak i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/li>\n<li><strong>D\u00fczenli \u0130fade E\u015fle\u015fmeleri (<code>~<\/code> ve <code>~*<\/code>):<\/strong> E\u011fer yukar\u0131daki e\u015fle\u015fmelerden hi\u00e7biri bulunamazsa veya <code>^~<\/code> ile ba\u015flayan bir \u00f6nek e\u015fle\u015fmesi yoksa, Nginx d\u00fczenli ifade e\u015fle\u015fmelerini kontrol eder. Nginx, yap\u0131land\u0131rma dosyas\u0131nda tan\u0131mland\u0131\u011f\u0131 s\u0131raya g\u00f6re d\u00fczenli ifade bloklar\u0131n\u0131 tarar ve ilk e\u015fle\u015fen blo\u011fu kullan\u0131r. <code>~<\/code> (b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyarl\u0131) ve <code>~*<\/code> (b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harfe duyars\u0131z) operat\u00f6rleri bu kategoriye girer.<\/li>\n<li><strong>En Uzun \u00d6nek E\u015fle\u015fmesi (Operat\u00f6rs\u00fcz):<\/strong> E\u011fer yukar\u0131daki e\u015fle\u015fmelerden hi\u00e7biri bulunamazsa, Nginx operat\u00f6rs\u00fcz (yani <code>=<\/code>, <code>^~<\/code>, <code>~<\/code>, <code>~*<\/code> olmadan) tan\u0131mlanm\u0131\u015f \u00f6nek e\u015fle\u015fmelerine bakar. Bu durumda, Nginx iste\u011fin URI&#8217;si ile en uzun e\u015fle\u015fen \u00f6nek blo\u011funu se\u00e7er. Bu, en d\u00fc\u015f\u00fck \u00f6nceli\u011fe sahiptir ve genellikle <code>location \/<\/code> blo\u011fu bu kategoriye girer.<\/li>\n<\/ol>\n<p><strong>\u00d6ncelik S\u0131ras\u0131 \u00d6zeti:<\/strong><\/p>\n<p><code>=<\/code> (Tam e\u015fle\u015fme) > <code>^~<\/code> (\u00d6nek, regex&#8217;ten \u00f6nce) > <code>~<\/code> veya <code>~*<\/code> (D\u00fczenli ifade, tan\u0131m s\u0131ras\u0131na g\u00f6re) > \u00d6nek (En uzun e\u015fle\u015fme)<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Nginx&#8217;in e\u015fle\u015fme algoritmas\u0131n\u0131 test etmek i\u00e7in <code>nginx -t<\/code> komutuyla yap\u0131land\u0131rman\u0131z\u0131 do\u011frulayabilir ve hata ay\u0131klama g\u00fcnl\u00fcklerini (<code>error_log \/var\/log\/nginx\/error.log debug;<\/code>) kullanarak bir iste\u011fin hangi <code>location<\/code> blo\u011fu taraf\u0131ndan i\u015flendi\u011fini g\u00f6rebilirsiniz. Bu, \u00f6zellikle karma\u015f\u0131k yap\u0131land\u0131rmalarda \u00e7ok yard\u0131mc\u0131 olur.\n<\/div>\n<p><strong>\u00c7ak\u0131\u015fan Kurallar\u0131 D\u00fczeltme \u00d6rne\u011fi:<\/strong><\/p>\n<p>A\u015fa\u011f\u0131daki yap\u0131land\u0131rmay\u0131 g\u00f6z \u00f6n\u00fcnde bulundural\u0131m:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html;\n\n    # Blok A: T\u00fcm PNG dosyalar\u0131n\u0131 \u00f6nbellekle\n    location ~* \\.png$ {\n        expires 30d;\n        add_header X-Cache-Hit \"PNG-Cache\";\n    }\n\n    # Blok B: \/images\/ dizinindeki t\u00fcm dosyalar\u0131 do\u011frudan sun, regex'ten \u00f6nce\n    location ^~ \/images\/ {\n        alias \/opt\/static\/images\/;\n        expires 7d;\n        add_header X-Cache-Hit \"Image-Dir-Cache\";\n    }\n\n    # Blok C: Belirli bir PNG dosyas\u0131n\u0131 \u00f6zel olarak i\u015fle\n    location = \/images\/logo.png {\n        add_header X-Special-File \"Logo\";\n        # Bu dosya i\u00e7in \u00f6nbellekleme yapma\n        expires off;\n    }\n\n    # Blok D: Varsay\u0131lan\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/code><\/pre>\n<p>\u015eimdi farkl\u0131 isteklerin nas\u0131l i\u015flenece\u011fine bakal\u0131m:<\/p>\n<ul>\n<li><strong>\u0130stek: <code>\/images\/logo.png<\/code><\/strong>\n<ul>\n<li>Nginx \u00f6nce tam e\u015fle\u015fmelere bakar. <code>location = \/images\/logo.png<\/code> (Blok C) ile tam e\u015fle\u015fme bulur.<\/li>\n<li><strong>Sonu\u00e7:<\/strong> Blok C tetiklenir. <code>X-Special-File: Logo<\/code> ba\u015fl\u0131\u011f\u0131 eklenir ve \u00f6nbellekleme kapat\u0131l\u0131r. Di\u011fer bloklar de\u011ferlendirilmez.<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u0130stek: <code>\/images\/background.png<\/code><\/strong>\n<ul>\n<li>Tam e\u015fle\u015fme yok.<\/li>\n<li>Nginx <code>^~<\/code> \u00f6nek e\u015fle\u015fmelerine bakar. <code>location ^~ \/images\/<\/code> (Blok B) ile e\u015fle\u015fme bulur.<\/li>\n<li><strong>Sonu\u00e7:<\/strong> Blok B tetiklenir. <code>\/opt\/static\/images\/background.png<\/code> dosyas\u0131n\u0131 sunar, <code>X-Cache-Hit: Image-Dir-Cache<\/code> ba\u015fl\u0131\u011f\u0131 eklenir ve 7 g\u00fcnl\u00fck \u00f6nbellekleme uygulan\u0131r. D\u00fczenli ifade (Blok A) de\u011ferlendirilmez, \u00e7\u00fcnk\u00fc <code>^~<\/code> \u00f6ncelik al\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u0130stek: <code>\/assets\/icon.png<\/code><\/strong>\n<ul>\n<li>Tam e\u015fle\u015fme yok.<\/li>\n<li><code>^~<\/code> \u00f6nek e\u015fle\u015fmesi yok.<\/li>\n<li>Nginx d\u00fczenli ifade e\u015fle\u015fmelerine bakar. <code>location ~* \\.png$<\/code> (Blok A) ile e\u015fle\u015fme bulur.<\/li>\n<li><strong>Sonu\u00e7:<\/strong> Blok A tetiklenir. <code>X-Cache-Hit: PNG-Cache<\/code> ba\u015fl\u0131\u011f\u0131 eklenir ve 30 g\u00fcnl\u00fck \u00f6nbellekleme uygulan\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u0130stek: <code>\/about\/contact.html<\/code><\/strong>\n<ul>\n<li>Hi\u00e7bir \u00f6zel e\u015fle\u015fme bulunamaz.<\/li>\n<li><strong>Sonu\u00e7:<\/strong> En uzun \u00f6nek e\u015fle\u015fmesi olan <code>location \/<\/code> (Blok D) tetiklenir. <code>try_files<\/code> direktifi devreye girer.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Bu \u00f6rnek, Nginx&#8217;in e\u015fle\u015fme algoritmas\u0131n\u0131n karma\u015f\u0131k bir yap\u0131land\u0131rmada bile nas\u0131l deterministik (belirlenebilir) \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6stermektedir. Bu \u00f6ncelik s\u0131ras\u0131n\u0131 iyi anlamak, sunucu yap\u0131land\u0131rmalar\u0131n\u0131zda beklenmeyen davran\u0131\u015flar\u0131 gidermek ve istedi\u011finiz kurallar\u0131n do\u011fru \u015fekilde uygulanmas\u0131n\u0131 sa\u011flamak i\u00e7in hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda Nginx Location Direktifi Kullan\u0131m\u0131 Nas\u0131l Olur?<\/h2>\n<p>Nginx <code>location<\/code> direktifleri, sadece temel dosya sunumu veya proxy i\u015flemlerinden \u00e7ok daha fazlas\u0131n\u0131 yapabilen, olduk\u00e7a esnek ve g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, bu direktifler web uygulamalar\u0131n\u0131n performans\u0131n\u0131, g\u00fcvenli\u011fini ve kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen karma\u015f\u0131k sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in kullan\u0131l\u0131r. \u0130\u015fte birka\u00e7 pratik \u00f6rnek:<\/p>\n<h3>Statik \u0130\u00e7erik Sunumu ve Performans Optimizasyonu Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Web sitelerinin b\u00fcy\u00fck bir k\u0131sm\u0131 resimler, CSS dosyalar\u0131, JavaScript kodlar\u0131 ve yaz\u0131 tipleri gibi statik varl\u0131klardan olu\u015fur. Bu dosyalar\u0131n h\u0131zl\u0131 ve verimli bir \u015fekilde sunulmas\u0131, site performans\u0131n\u0131 ve dolay\u0131s\u0131yla kullan\u0131c\u0131 deneyimini do\u011frudan etkiler. Nginx, statik i\u00e7erik sunumu konusunda olduk\u00e7a yeteneklidir ve <code>location<\/code> direktifleri ile bu yetenekler en \u00fcst d\u00fczeye \u00e7\u0131kar\u0131labilir.<\/p>\n<p><strong>Neden \u00d6nemli?<\/strong><\/p>\n<ul>\n<li><strong>H\u0131z:<\/strong> Taray\u0131c\u0131lar, statik dosyalar\u0131 h\u0131zl\u0131 bir \u015fekilde indirerek sayfay\u0131 daha \u00e7abuk olu\u015fturur.<\/li>\n<li><strong>Sunucu Y\u00fck\u00fc:<\/strong> Uygulama sunucular\u0131n\u0131n (PHP, Node.js vb.) statik dosyalarla u\u011fra\u015fmas\u0131n\u0131 engelleyerek onlar\u0131n dinamik i\u00e7erik \u00fcretimine odaklanmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Bant Geni\u015fli\u011fi Tasarrufu:<\/strong> \u00d6nbellekleme ve s\u0131k\u0131\u015ft\u0131rma ile a\u011f trafi\u011fi azalt\u0131l\u0131r.<\/li>\n<\/ul>\n<p><strong>Nas\u0131l Yap\u0131l\u0131r?<\/strong><\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html\/mysite; # Varsay\u0131lan site k\u00f6k dizini\n\n    # Statik dosyalar i\u00e7in ayr\u0131 bir konum ve uzun s\u00fcreli \u00f6nbellekleme\n    location ~* \\.(css|js|gif|jpg|jpeg|png|webp|svg|ico|woff2|ttf|otf|eot)$ {\n        # Dosyalar\u0131n bulundu\u011fu ger\u00e7ek k\u00f6k dizin (e\u011fer root'tan farkl\u0131ysa)\n        # alias \/var\/www\/html\/mysite\/static_assets\/;\n        # root kullan\u0131l\u0131yorsa, yukar\u0131daki root direktifi yeterlidir.\n\n        expires 30d; # Taray\u0131c\u0131n\u0131n 30 g\u00fcn boyunca \u00f6nbellekte tutmas\u0131n\u0131 sa\u011flar\n        add_header Cache-Control \"public, max-age=2592000, immutable\"; # Geli\u015fmi\u015f \u00f6nbellek kontrol\u00fc\n        access_log off; # Bu t\u00fcr istekler i\u00e7in g\u00fcnl\u00fck kayd\u0131n\u0131 kapat\n        log_not_found off; # Dosya bulunamazsa hata g\u00fcnl\u00fc\u011f\u00fcne yazma\n\n        # Gzip s\u0131k\u0131\u015ft\u0131rmas\u0131 (e\u011fer dosyalar zaten gzip'lenmemi\u015fse)\n        gzip on;\n        gzip_types text\/plain text\/css application\/json application\/javascript text\/xml application\/xml application\/xml+rss text\/javascript;\n        gzip_vary on;\n\n        # \u00d6nceden s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f (pre-compressed) gzip dosyalar\u0131n\u0131 sunma\n        # E\u011fer \/var\/www\/html\/mysite\/style.css.gz varsa, Nginx onu sunar\n        gzip_static on;\n    }\n\n    # Varsay\u0131lan olarak t\u00fcm istekleri ana uygulamaya y\u00f6nlendir veya dosyalar\u0131 sun\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$query_string; # PHP uygulamas\u0131 i\u00e7in\n        # Veya tek sayfa uygulamas\u0131 i\u00e7in:\n        # try_files $uri $uri\/ \/index.html;\n    }\n}\n<\/code><\/pre>\n<p>Bu \u00f6rnekte:<\/p>\n<ul>\n<li><code>location ~* \\.(css|js|gif|jpg|jpeg|png|webp|svg|ico|woff2|ttf|otf|eot)$<\/code> blo\u011fu, yayg\u0131n statik dosya uzant\u0131lar\u0131na sahip t\u00fcm istekleri yakalar (b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z).<\/li>\n<li><code>expires 30d;<\/code> ve <code>add_header Cache-Control \"public, max-age=2592000, immutable\";<\/code> direktifleri, taray\u0131c\u0131lar\u0131n bu dosyalar\u0131 uzun s\u00fcre \u00f6nbelle\u011finde tutmas\u0131n\u0131 sa\u011flayarak tekrar tekrar indirme ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r. <code>immutable<\/code> \u00f6zelli\u011fi, dosyan\u0131n i\u00e7eri\u011finin de\u011fi\u015fmeyece\u011fini belirtir.<\/li>\n<li><code>access_log off;<\/code> ve <code>log_not_found off;<\/code>, bu y\u00fcksek hacimli statik isteklerin sunucu g\u00fcnl\u00fcklerini doldurmas\u0131n\u0131 engeller.<\/li>\n<li><code>gzip on;<\/code> ve <code>gzip_static on;<\/code>, dosyalar\u0131n s\u0131k\u0131\u015ft\u0131r\u0131larak sunulmas\u0131n\u0131 sa\u011flar. <code>gzip_static on;<\/code> \u00f6zellikle \u00f6nemlidir; Nginx&#8217;in, istenen dosyan\u0131n \u00f6nceden s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f (<code>.gz<\/code> uzant\u0131l\u0131) bir versiyonu varsa, onu do\u011frudan sunmas\u0131n\u0131 sa\u011flar. Bu, Nginx&#8217;in her istekte s\u0131k\u0131\u015ft\u0131rma yapma y\u00fck\u00fcn\u00fc azalt\u0131r.<\/li>\n<\/ul>\n<h3>G\u00fcvenlik \u0130\u00e7in Belirli \u0130stekler Nas\u0131l Engellenir veya Y\u00f6nlendirilir?<\/h3>\n<p>Nginx, <code>location<\/code> direktifleri arac\u0131l\u0131\u011f\u0131yla web sunucunuza temel g\u00fcvenlik katmanlar\u0131 eklemek i\u00e7in de kullan\u0131labilir. Belirli dosyalara veya dizinlere eri\u015fimi k\u0131s\u0131tlamak, k\u00f6t\u00fc niyetli botlar\u0131 engellemek veya hassas bilgilere eri\u015fimi kontrol etmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p><strong>Neden \u00d6nemli?<\/strong><\/p>\n<ul>\n<li><strong>Veri G\u00fcvenli\u011fi:<\/strong> Hassas yap\u0131land\u0131rma dosyalar\u0131n\u0131n veya yedeklerin genel eri\u015fime kapal\u0131 tutulmas\u0131.<\/li>\n<li><strong>DDoS Korumas\u0131:<\/strong> Belirli kaynaklara a\u015f\u0131r\u0131 istek g\u00f6nderen botlar\u0131 engelleme.<\/li>\n<li><strong>Hotlinking \u00d6nleme:<\/strong> Resimlerinizin ba\u015fka siteler taraf\u0131ndan do\u011frudan kullan\u0131lmas\u0131n\u0131 engelleme.<\/li>\n<\/ul>\n<p><strong>Nas\u0131l Yap\u0131l\u0131r?<\/strong><\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html;\n\n    # Gizli dosyalara (nokta ile ba\u015flayan) eri\u015fimi engelle\n    location ~ \/\\. {\n        deny all;\n        # return 404; # Alternatif olarak 404 d\u00f6nd\u00fcr\u00fclebilir\n    }\n\n    # Belirli bir dizine (\u00f6rn. y\u00f6netim paneli) sadece belirli IP'lerden eri\u015fim izni ver\n    location \/admin\/ {\n        auth_basic \"Admin Area\";\n        auth_basic_user_file \/etc\/nginx\/.htpasswd; # Temel kimlik do\u011frulama\n        allow 192.168.1.0\/24; # Sadece bu IP aral\u0131\u011f\u0131na izin ver\n        allow 10.0.0.1;       # Bu tek IP'ye izin ver\n        deny all;             # Di\u011fer t\u00fcm IP'leri engelle\n    }\n\n    # Hotlinking'i \u00f6nleme (resimlerin ba\u015fka sitelerden do\u011frudan kullan\u0131lmas\u0131n\u0131 engelleme)\n    location ~* \\.(jpg|jpeg|gif|png|webp|svg)$ {\n        valid_referers none blocked server_names ~\\.google\\. ~\\.bing\\. ~\\.yandex\\.;\n        if ($invalid_referer) {\n            return 403; # Referer ge\u00e7erli de\u011filse 403 Forbidden d\u00f6nd\u00fcr\n            # rewrite ^ \/images\/no-hotlink.png break; # Alternatif olarak ba\u015fka bir resme y\u00f6nlendir\n        }\n        expires 30d;\n        add_header Cache-Control \"public, max-age=2592000\";\n    }\n\n    # XML-RPC'ye (WordPress i\u00e7in) eri\u015fimi sadece belirli IP'lerden veya tamamen engelle\n    location = \/xmlrpc.php {\n        deny all;\n        # allow 123.123.123.123; # E\u011fer belirli bir IP'den izin vermek isterseniz\n    }\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/code><\/pre>\n<p>Bu \u00f6rnekte:<\/p>\n<ul>\n<li><code>location ~ \/\\.<\/code> blo\u011fu, <code>.htaccess<\/code>, <code>.env<\/code> gibi nokta ile ba\u015flayan gizli dosyalara do\u011frudan eri\u015fimi engeller.<\/li>\n<li><code>location \/admin\/<\/code> blo\u011fu, <code>\/admin\/<\/code> dizinine eri\u015fimi <code>.htpasswd<\/code> ile temel kimlik do\u011frulamas\u0131na tabi tutar ve sadece belirli IP adreslerinden eri\u015fime izin verir.<\/li>\n<li><code>location ~* \\.(jpg|jpeg|gif|png|webp|svg)$<\/code> blo\u011fu, resim hotlinking&#8217;ini \u00f6nler. <code>valid_referers<\/code> direktifi, iste\u011fin geldi\u011fi referans URL&#8217;sini kontrol eder. E\u011fer referans, izin verilen listelerde yoksa (<code>none<\/code>, <code>blocked<\/code>, <code>server_names<\/code> veya regex ile belirtilen arama motorlar\u0131 hari\u00e7), <code>$invalid_referer<\/code> de\u011fi\u015fkeni 1 olur ve <code>if ($invalid_referer) { return 403; }<\/code> ile eri\u015fim engellenir.<\/li>\n<li><code>location = \/xmlrpc.php<\/code> blo\u011fu, WordPress sitelerinde s\u0131k\u00e7a hedef al\u0131nan <code>xmlrpc.php<\/code> dosyas\u0131na eri\u015fimi tamamen engeller.<\/li>\n<\/ul>\n<h3>Mobil Cihazlara \u00d6zel \u0130\u00e7erik Sunumu Nas\u0131l Yap\u0131l\u0131r? (Media Query \u00d6rne\u011fi ile)<\/h3>\n<p>Modern web siteleri, farkl\u0131 cihaz boyutlar\u0131na uyum sa\u011flamak zorundad\u0131r. Nginx, do\u011frudan responsive HTML \u00fcretmez, ancak gelen iste\u011fin <code>User-Agent<\/code> ba\u015fl\u0131\u011f\u0131na bakarak mobil cihazlara \u00f6zel farkl\u0131 i\u00e7erikleri veya farkl\u0131 sunucular\u0131 proxy etme yetene\u011fine sahiptir. Bu, \u00f6zellikle eski veya \u00e7ok spesifik mobil site versiyonlar\u0131 i\u00e7in kullan\u0131\u015fl\u0131 olabilir.<\/p>\n<p><strong>Neden \u00d6nemli?<\/strong><\/p>\n<ul>\n<li><strong>Optimizasyon:<\/strong> Mobil cihazlara daha hafif veya \u00f6zelle\u015ftirilmi\u015f i\u00e7erik sunumu.<\/li>\n<li><strong>Deneyim:<\/strong> Farkl\u0131 cihazlar i\u00e7in en iyi kullan\u0131c\u0131 deneyimini sa\u011flama.<\/li>\n<li><strong>Kaynak Tasarrufu:<\/strong> Mobil cihazlar i\u00e7in gereksiz kaynaklar\u0131 y\u00fcklememe.<\/li>\n<\/ul>\n<p><strong>Nas\u0131l Yap\u0131l\u0131r?<\/strong><\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html\/desktop_site; # Varsay\u0131lan olarak masa\u00fcst\u00fc sitesi\n\n    # User-Agent ba\u015fl\u0131\u011f\u0131na g\u00f6re mobil cihazlar\u0131 tespit et\n    # Bu regex, yayg\u0131n mobil cihaz ve tablet User-Agent'lar\u0131n\u0131 yakalar\n    if ($http_user_agent ~* \"(android|bb\\d+|meego).+mobile|avantgo|bada\\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|rim)|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino\"|android|ipad|playbook|silk) {\n        set $mobile_device \"true\";\n    }\n\n    # E\u011fer mobil cihaz ise, mobil site dizininden veya mobil sunucuya proxy et\n    location \/ {\n        if ($mobile_device = \"true\") {\n            root \/var\/www\/html\/mobile_site; # Mobil site i\u00e7eri\u011fini sun\n            # Veya mobil uygulama sunucusuna proxy et:\n            # proxy_pass http:\/\/mobile_app_server;\n        }\n        try_files $uri $uri\/ =404;\n    }\n\n    # Mobil uyumlu CSS media query \u00f6rne\u011fi (Bu Nginx konfig\u00fcrasyonu i\u00e7inde HTML\/CSS \u00fcretmez,\n    # ancak Nginx'in mobil cihazlara farkl\u0131 CSS dosyalar\u0131 sunabilece\u011fini g\u00f6sterir)\n    location ~* \\.css$ {\n        # E\u011fer mobil cihaz ise, mobil.css'i sun, de\u011filse ana.css'i\n        if ($mobile_device = \"true\") {\n            # Bu k\u0131s\u0131m sadece bir mant\u0131k \u00f6rne\u011fidir, Nginx direkt olarak\n            # CSS dosyalar\u0131n\u0131 dinamik olarak de\u011fi\u015ftirmez.\n            # Genellikle, farkl\u0131 bir CSS dosyas\u0131n\u0131 y\u00f6nlendirmek i\u00e7in\n            # rewrite veya farkl\u0131 bir root kullan\u0131l\u0131r.\n        }\n        # \u00d6rnek: Mobil cihazlar i\u00e7in farkl\u0131 bir CSS sunumu\n        # rewrite ^\/css\/style.css$ \/css\/mobile-style.css last;\n\n        add_header Content-Type text\/css;\n        expires 30d;\n        add_header Cache-Control \"public, max-age=2592000\";\n    }\n}\n<\/code><\/pre>\n<p>Yukar\u0131daki Nginx yap\u0131land\u0131rmas\u0131, gelen iste\u011fin <code>User-Agent<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 inceleyerek bir cihaz\u0131n mobil olup olmad\u0131\u011f\u0131n\u0131 tespit eder ve <code>$mobile_device<\/code> de\u011fi\u015fkenini ayarlar. Daha sonra, <code>location \/<\/code> blo\u011fu i\u00e7inde bu de\u011fi\u015fkene g\u00f6re farkl\u0131 bir <code>root<\/code> dizini belirleyerek mobil cihazlara \u00f6zel i\u00e7eri\u011fi sunar.<\/p>\n<p><strong>Mobil Uyumlu HTML (Media Query) \u00d6rne\u011fi:<\/strong><\/p>\n<p>Nginx, do\u011frudan HTML i\u00e7inde media query yazmaz. Ancak, bir web sayfas\u0131n\u0131n HTML veya CSS&#8217;inde media query&#8217;ler kullan\u0131larak responsive tasar\u0131m sa\u011flan\u0131r. Nginx&#8217;in bu konfig\u00fcrasyonla yapt\u0131\u011f\u0131, mobil cihazlara farkl\u0131 bir HTML dosyas\u0131 veya farkl\u0131 bir CSS dosyas\u0131 sunmak olabilir. A\u015fa\u011f\u0131da, bir HTML dosyas\u0131nda kullan\u0131lan standart bir CSS media query \u00f6rne\u011fi verilmi\u015ftir. Nginx, bu HTML dosyas\u0131n\u0131 mobil cihaza sundu\u011funda, taray\u0131c\u0131 bu media query&#8217;yi yorumlayarak i\u00e7eri\u011fi cihaza uygun \u015fekilde stilize edecektir.<\/p>\n<pre><code class=\"language-html\">\n  &lt;!DOCTYPE html&gt;\n  &lt;html lang=\"tr\"&gt;\n  &lt;head&gt;\n      &lt;meta charset=\"UTF-8\"&gt;\n      &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n      &lt;title&gt;Mobil Uyumlu Sayfa&lt;\/title&gt;\n      &lt;style&gt;\n          body {\n              font-family: Arial, sans-serif;\n              margin: 20px;\n              color: #333;\n          }\n          .container {\n              max-width: 960px;\n              margin: 0 auto;\n              padding: 15px;\n              background-color: #f9f9f9;\n              border-radius: 8px;\n          }\n          h1 {\n              color: #0056b3;\n          }\n          p {\n              line-height: 1.6;\n          }\n\n          \/* Mobil cihazlar i\u00e7in stil kurallar\u0131 (max-width 768px'e kadar) *\/\n          @media screen and (max-width: 768px) {\n              body {\n                  margin: 10px;\n              }\n              .container {\n                  padding: 10px;\n                  border-radius: 0;\n              }\n              h1 {\n                  font-size: 1.8em;\n              }\n              p {\n                  font-size: 0.9em;\n              }\n              \/* Mobil cihazlarda bu eleman\u0131 gizle *\/\n              .desktop-only {\n                  display: none;\n              }\n          }\n\n          \/* K\u00fc\u00e7\u00fck mobil cihazlar i\u00e7in stil kurallar\u0131 (max-width 480px'e kadar) *\/\n          @media screen and (max-width: 480px) {\n              h1 {\n                  font-size: 1.5em;\n              }\n              p {\n                  font-size: 0.8em;\n              }\n          }\n      &lt;\/style&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n      &lt;div class=\"container\"&gt;\n          &lt;h1&gt;Nginx ve Mobil Uyumlu \u0130\u00e7erik&lt;\/h1&gt;\n          &lt;p&gt;Bu sayfa, Nginx'in mobil cihazlara \u00f6zel i\u00e7erik sunumu yetene\u011fini ve HTML\/CSS i\u00e7indeki media query'lerin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6stermektedir. Nginx, farkl\u0131 User-Agent ba\u015fl\u0131klar\u0131na g\u00f6re farkl\u0131 HTML veya CSS dosyalar\u0131 sunarak, taray\u0131c\u0131n\u0131n do\u011fru responsive kurallar\u0131 uygulamas\u0131n\u0131 sa\u011flayabilir.&lt;\/p&gt;\n          &lt;p class=\"desktop-only\"&gt;Bu paragraf sadece masa\u00fcst\u00fc cihazlarda g\u00f6r\u00fcn\u00fcr.&lt;\/p&gt;\n      &lt;\/div&gt;\n  &lt;\/body&gt;\n  &lt;\/html&gt;\n<\/code><\/pre>\n<p>Bu HTML \u00f6rne\u011fi, CSS i\u00e7inde <code>@media screen and (max-width: ...)<\/code> kurallar\u0131n\u0131 kullanarak farkl\u0131 ekran boyutlar\u0131na g\u00f6re elementlerin stilini de\u011fi\u015ftirmektedir. Nginx&#8217;in g\u00f6revi, bu HTML dosyas\u0131n\u0131 veya bu HTML dosyas\u0131n\u0131n referans verdi\u011fi CSS dosyas\u0131n\u0131 (\u00f6rne\u011fin <code>mobile.css<\/code> veya <code>desktop.css<\/code>) do\u011fru cihaza sunmakt\u0131r. Bu \u015fekilde, Nginx ve responsive tasar\u0131m birlikte \u00e7al\u0131\u015farak t\u00fcm cihazlarda optimize bir kullan\u0131c\u0131 deneyimi sa\u011flar.<\/p>\n<h2>Nginx Location Direktifi Kullan\u0131m\u0131nda \u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar Nelerdir?<\/h2>\n<p>Nginx <code>location<\/code> direktiflerinin temel kullan\u0131m\u0131n\u0131 anlad\u0131ktan sonra, daha verimli, g\u00fcvenli ve \u00f6l\u00e7eklenebilir yap\u0131land\u0131rmalar olu\u015fturmak i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 bilmek \u00f6nemlidir. Bu bilgiler, sadece sorunlar\u0131 \u00e7\u00f6zmekle kalmayacak, ayn\u0131 zamanda sunucunuzun performans\u0131n\u0131 da art\u0131racakt\u0131r.<\/p>\n<h3>1. <code class=\"language-\">try_files<\/code> Direktifi ile Esnek Dosya Sunumu<\/h3>\n<p><code>try_files<\/code> direktifi, Nginx&#8217;in bir iste\u011fi i\u015flerken belirli bir s\u0131raya g\u00f6re dosyalar\u0131 veya URI&#8217;leri denemesini sa\u011flar. Bu, \u00f6zellikle tek sayfa uygulamalar\u0131 (SPA&#8217;lar) i\u00e7in veya \u00f6zel 404 sayfalar\u0131 olu\u015ftururken \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-nginx\">location \/ {\n    # \u00d6nce $uri'yi (istenen dosya), sonra $uri\/ (istenen dizin) dene.\n    # E\u011fer ikisi de bulunamazsa, \/index.html dosyas\u0131n\u0131 sun (SPA i\u00e7in).\n    try_files $uri $uri\/ \/index.html;\n}\n\nlocation \/admin\/ {\n    # \u00d6nce $uri'yi, sonra $uri\/'yi dene.\n    # E\u011fer ikisi de bulunamazsa, =404 ile 404 hatas\u0131 d\u00f6nd\u00fcr.\n    try_files $uri $uri\/ =404;\n}\n<\/code><\/pre>\n<p>Bu direktif, Nginx&#8217;in dosya sisteminde dosya aramas\u0131 yaparken esneklik sa\u011flar ve gereksiz proxy isteklerini veya hata yan\u0131tlar\u0131n\u0131 \u00f6nler.<\/p>\n<h3>2. <code class=\"language-\">error_page<\/code> Direktifi ile \u00d6zel Hata Sayfalar\u0131<\/h3>\n<p>Kullan\u0131c\u0131lara standart Nginx hata sayfalar\u0131 yerine markan\u0131za uygun, bilgilendirici hata sayfalar\u0131 sunmak profesyonel bir yakla\u015f\u0131md\u0131r. <code>error_page<\/code> direktifi ile bunu kolayca yapabilirsiniz.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com;\n\n    root \/var\/www\/html;\n\n    # 404 hatalar\u0131 i\u00e7in \u00f6zel bir sayfa g\u00f6ster\n    error_page 404 \/404.html;\n    location = \/404.html {\n        internal; # Sadece Nginx i\u00e7inden eri\u015filebilir olsun\n    }\n\n    # 500, 502, 503, 504 hatalar\u0131 i\u00e7in \u00f6zel bir sayfa g\u00f6ster\n    error_page 500 502 503 504 \/50x.html;\n    location = \/50x.html {\n        internal;\n    }\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/code><\/pre>\n<p><code>internal;<\/code> direktifi, bu hata sayfalar\u0131na do\u011frudan URL \u00fczerinden eri\u015fimi engeller, sadece Nginx&#8217;in kendisi taraf\u0131ndan tetiklenebilirler.<\/p>\n<h3>3. Performans \u0130\u00e7in D\u00fczenli \u0130fade Optimizasyonu<\/h3>\n<p>D\u00fczenli ifadeler g\u00fc\u00e7l\u00fcd\u00fcr ancak yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda performans\u0131 etkileyebilir. Karma\u015f\u0131k veya verimsiz regex desenlerinden ka\u00e7\u0131nmak \u00f6nemlidir. M\u00fcmk\u00fcn oldu\u011funca <code>=<\/code> veya <code>^~<\/code> \u00f6nek e\u015fle\u015fmelerini tercih edin. E\u011fer regex kullanman\u0131z gerekiyorsa, en basit ve en spesifik deseni kullanmaya \u00e7al\u0131\u015f\u0131n.<\/p>\n<ul>\n<li>K\u00f6t\u00fc: <code>location ~ .*some_string.*<\/code> (<code>.*<\/code> ba\u015ftan sona t\u00fcm karakterleri tarar)<\/li>\n<li>\u0130yi: <code>location ~ \\.php$<\/code> (sadece sonu <code>.php<\/code> olanlar\u0131 arar)<\/li>\n<\/ul>\n<h3>4. Konfig\u00fcrasyonlar\u0131 Mod\u00fcler Hale Getirme (<code class=\"language-\">include<\/code>)<\/h3>\n<p>B\u00fcy\u00fck ve karma\u015f\u0131k Nginx yap\u0131land\u0131rmalar\u0131nda, t\u00fcm direktifleri tek bir dosyada tutmak y\u00f6netimi zorla\u015ft\u0131rabilir. <code>include<\/code> direktifi ile yap\u0131land\u0131rman\u0131z\u0131 mant\u0131ksal par\u00e7alara ay\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-nginx\"># nginx.conf veya sites-enabled\/default.conf i\u00e7inde\nserver {\n    listen 80;\n    server_name example.com;\n\n    # Ortak proxy ayarlar\u0131n\u0131 dahil et\n    include \/etc\/nginx\/conf.d\/proxy_params.conf;\n\n    # Statik dosyalar i\u00e7in location bloklar\u0131n\u0131 dahil et\n    include \/etc\/nginx\/conf.d\/static_assets.conf;\n\n    location \/api\/ {\n        proxy_pass http:\/\/backend_api;\n    }\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/code><\/pre>\n<p><code>\/etc\/nginx\/conf.d\/proxy_params.conf<\/code> i\u00e7eri\u011fi:<\/p>\n<pre><code class=\"language-nginx\">proxy_set_header Host $host;\nproxy_set_header X-Real-IP $remote_addr;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\n<\/code><\/pre>\n<p>Bu, yap\u0131land\u0131rmay\u0131 daha okunabilir ve y\u00f6netilebilir hale getirir, ayr\u0131ca farkl\u0131 <code>server<\/code> bloklar\u0131 aras\u0131nda ortak ayarlar\u0131 payla\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>5. Loglama ve Hata Ay\u0131klama \u0130pu\u00e7lar\u0131<\/h3>\n<p>Yap\u0131land\u0131rma hatalar\u0131n\u0131 veya beklenmeyen davran\u0131\u015flar\u0131 te\u015fhis etmek i\u00e7in Nginx&#8217;in g\u00fcnl\u00fckleri paha bi\u00e7ilmezdir.<\/p>\n<ul>\n<li><strong><code>access_log<\/code> ve <code>error_log<\/code>:<\/strong> Her <code>server<\/code> veya <code>location<\/code> blo\u011funda \u00f6zel g\u00fcnl\u00fck dosyalar\u0131 tan\u0131mlayabilirsiniz.\n<pre><code class=\"language-nginx\">location \/admin\/ {\n            access_log \/var\/log\/nginx\/admin_access.log;\n            error_log \/var\/log\/nginx\/admin_error.log warn;\n            # ...\n        }\n        <\/code><\/pre>\n<\/li>\n<li><strong>Hata Ay\u0131klama Modu:<\/strong> Geli\u015ftirme ortam\u0131nda, <code>error_log<\/code> seviyesini <code>debug<\/code> olarak ayarlayarak \u00e7ok daha detayl\u0131 bilgi alabilirsiniz.\n<pre><code class=\"language-nginx\">error_log \/var\/log\/nginx\/error.log debug;\n        <\/code><\/pre>\n<p>Bu, Nginx&#8217;in bir iste\u011fi i\u015flerken hangi <code>location<\/code> blo\u011funu se\u00e7ti\u011fini, hangi dosyalar\u0131 denedi\u011fini ve di\u011fer i\u00e7 s\u00fcre\u00e7leri g\u00f6rmenizi sa\u011flar.<\/p>\n<\/li>\n<li><strong><code>nginx -t<\/code>:<\/strong> Herhangi bir yap\u0131land\u0131rma de\u011fi\u015fikli\u011finden sonra bu komutu \u00e7al\u0131\u015ft\u0131rarak s\u00f6zdizimi hatalar\u0131n\u0131 kontrol edin.<\/li>\n<\/ul>\n<h3>6. <code class=\"language-\">if<\/code> Direktifi Kullan\u0131m\u0131na Dikkat<\/h3>\n<p>Nginx&#8217;in <code>if<\/code> direktifi g\u00fc\u00e7l\u00fcd\u00fcr ancak &#8220;If is Evil&#8221; (if k\u00f6t\u00fcd\u00fcr) kural\u0131 olarak bilinir. Yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda beklenmeyen davran\u0131\u015flara ve performans sorunlar\u0131na yol a\u00e7abilir. M\u00fcmk\u00fcnse <code>if<\/code> yerine <code>try_files<\/code>, <code>rewrite<\/code> veya farkl\u0131 <code>location<\/code> bloklar\u0131 kullanmay\u0131 tercih edin. <code>if<\/code> kullanman\u0131z gerekiyorsa, basit ko\u015fullar i\u00e7in ve dikkatli bir \u015fekilde kullan\u0131n.<\/p>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar, Nginx yap\u0131land\u0131rmalar\u0131n\u0131z\u0131 daha sa\u011flam, daha performansl\u0131 ve daha kolay y\u00f6netilebilir hale getirmenize yard\u0131mc\u0131 olacakt\u0131r. Unutmay\u0131n, her senaryo benzersizdir ve en iyi \u00e7\u00f6z\u00fcm\u00fc bulmak i\u00e7in deneme ve yan\u0131lma y\u00f6ntemini kullanmak genellikle ka\u00e7\u0131n\u0131lmazd\u0131r.<\/p>\n<h2>Sonu\u00e7: Nginx Location Direktifleri ile Web Sunucunuzu Ustaca Y\u00f6netin<\/h2>\n<p>Bu makalede, Nginx&#8217;in web sunucusu y\u00f6netimindeki en temel ve g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131ndan biri olan <code>location<\/code> direktifini ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceledik. G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, <code>location<\/code> direktifi sadece bir istek y\u00f6nlendirme mekanizmas\u0131 olmaktan \u00e7ok daha fazlas\u0131d\u0131r; web uygulamalar\u0131n\u0131z\u0131n performans\u0131n\u0131, g\u00fcvenli\u011fini ve \u00f6l\u00e7eklenebilirli\u011fini do\u011frudan etkileyen stratejik bir bile\u015fendir.<\/p>\n<p>Tam e\u015fle\u015fme (<code>=<\/code>) ile belirli dosyalar i\u00e7in y\u00fcksek \u00f6ncelikli ve h\u0131zl\u0131 yan\u0131tlar sa\u011flarken, \u00f6nek e\u015fle\u015fmeleri (operat\u00f6rs\u00fcz veya <code>^~<\/code>) ile dizin tabanl\u0131 i\u00e7erik y\u00f6netimini kolayla\u015ft\u0131rd\u0131k. D\u00fczenli ifadeler (<code>~<\/code> ve <code>~*<\/code>) sayesinde ise dinamik ve karma\u015f\u0131k URL desenlerini esnek bir \u015fekilde ele almay\u0131 \u00f6\u011frendik. Ayr\u0131ca, <code>proxy_pass<\/code> direktifiyle Nginx&#8217;i g\u00fc\u00e7l\u00fc bir ters proxy ve API a\u011f ge\u00e7idi olarak nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131, uygulama sunucular\u0131n\u0131 koruyarak ve y\u00fck dengeleyerek sistemlerimizi nas\u0131l daha sa\u011flam hale getirece\u011fimizi ke\u015ffettik.<\/p>\n<p>\u00d6ncelik s\u0131ras\u0131n\u0131 anlaman\u0131n, yap\u0131land\u0131rma \u00e7at\u0131\u015fmalar\u0131n\u0131 \u00e7\u00f6zmenin ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda (statik i\u00e7erik optimizasyonu, g\u00fcvenlik k\u0131s\u0131tlamalar\u0131, mobil i\u00e7erik sunumu) Nginx&#8217;i nas\u0131l uygulayaca\u011f\u0131m\u0131z\u0131 g\u00f6steren vaka analizleriyle bilgimizi peki\u015ftirdik. Son olarak, <code>try_files<\/code>, <code>error_page<\/code>, mod\u00fcler yap\u0131land\u0131rmalar ve hata ay\u0131klama ipu\u00e7lar\u0131 gibi ileri d\u00fczey tekniklerle Nginx uzmanl\u0131\u011f\u0131m\u0131z\u0131 bir ad\u0131m \u00f6teye ta\u015f\u0131d\u0131k.<\/p>\n<p>Nginx <code>location<\/code> direktiflerinde ustala\u015fmak, web sunucunuz \u00fczerinde tam kontrol sahibi olman\u0131z\u0131 ve modern web&#8217;in zorluklar\u0131na kar\u015f\u0131 dayan\u0131kl\u0131, y\u00fcksek performansl\u0131 ve g\u00fcvenli altyap\u0131lar kurman\u0131z\u0131 sa\u011flar. Bu bilgilerle, web projelerinizi bir sonraki seviyeye ta\u015f\u0131yacak g\u00fcce sahipsiniz.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>1. <code class=\"language-\">root<\/code> ve <code class=\"language-\">alias<\/code> direktifleri aras\u0131ndaki temel fark nedir?<\/h3>\n<p><strong>Cevap:<\/strong> Her ikisi de dosya sistemindeki bir dizini belirtmek i\u00e7in kullan\u0131l\u0131r, ancak farkl\u0131 \u015fekillerde \u00e7al\u0131\u015f\u0131rlar:<\/p>\n<ul>\n<li><strong><code>root<\/code>:<\/strong> Genellikle <code>server<\/code> blo\u011funda veya bir <code>location<\/code> blo\u011funda tan\u0131mlan\u0131r. Nginx, gelen URI&#8217;yi <code>root<\/code> dizininin sonuna ekleyerek dosya yolunu olu\u015fturur. \u00d6rne\u011fin, <code>root \/var\/www\/html;<\/code> ve istek <code>\/images\/logo.png<\/code> ise, Nginx <code>\/var\/www\/html\/images\/logo.png<\/code> dosyas\u0131n\u0131 arar.<\/li>\n<li><strong><code>alias<\/code>:<\/strong> Sadece <code>location<\/code> bloklar\u0131nda kullan\u0131l\u0131r ve genellikle \u00f6nek e\u015fle\u015fmeleriyle birlikte tercih edilir. Nginx, <code>location<\/code> blo\u011funda e\u015fle\u015fen URI k\u0131sm\u0131n\u0131 kald\u0131r\u0131r ve kalan k\u0131sm\u0131 <code>alias<\/code> dizininin sonuna ekler. \u00d6rne\u011fin, <code>location \/static\/ { alias \/opt\/web\/assets\/; }<\/code> ve istek <code>\/static\/css\/style.css<\/code> ise, Nginx <code>\/opt\/web\/assets\/css\/style.css<\/code> dosyas\u0131n\u0131 arar. K\u0131sacas\u0131, <code>root<\/code> tam URI&#8217;yi eklerken, <code>alias<\/code> e\u015fle\u015fen \u00f6neki \u00e7\u0131kar\u0131r ve kalan\u0131n\u0131 ekler.<\/li>\n<\/ul>\n<h3>2. <code class=\"language-\">location \/<\/code> blo\u011fu neden \u00f6nemlidir?<\/h3>\n<p><strong>Cevap:<\/strong> <code>location \/<\/code> blo\u011fu, Nginx&#8217;teki varsay\u0131lan (catch-all) <code>location<\/code> blo\u011fudur. Di\u011fer t\u00fcm daha spesifik <code>location<\/code> bloklar\u0131yla e\u015fle\u015fmeyen istekler bu blok taraf\u0131ndan i\u015flenir. Bu nedenle, genel bir yedekleme mekanizmas\u0131 sa\u011flar ve genellikle site k\u00f6k dizinini belirtmek, <code>try_files<\/code> ile varsay\u0131lan dosyalar\u0131 sunmak veya bir uygulama sunucusuna proxy yapmak i\u00e7in kullan\u0131l\u0131r. Her <code>server<\/code> blo\u011funda bir <code>location \/<\/code> blo\u011funun bulunmas\u0131 iyi bir pratiktir.<\/p>\n<h3>3. Nginx&#8217;te <code class=\"language-\">location<\/code> e\u015fle\u015fmesi \u00f6nceli\u011fi nas\u0131l belirlenir?<\/h3>\n<p><strong>Cevap:<\/strong> Nginx, <code>location<\/code> bloklar\u0131n\u0131 belirli bir \u00f6ncelik s\u0131ras\u0131na g\u00f6re de\u011ferlendirir:<\/p>\n<ol>\n<li><code>=<\/code> (Tam e\u015fle\u015fme) &#8211; En y\u00fcksek \u00f6ncelik, e\u015fle\u015fme bulunursa arama durur.<\/li>\n<li><code>^~<\/code> (\u00d6nek e\u015fle\u015fmesi, d\u00fczenli ifadelerden \u00f6nce) &#8211; E\u015fle\u015fme bulunursa arama durur.<\/li>\n<li><code>~<\/code> veya <code>~*<\/code> (D\u00fczenli ifade e\u015fle\u015fmesi) &#8211; Yap\u0131land\u0131rma dosyas\u0131nda tan\u0131mland\u0131\u011f\u0131 ilk e\u015fle\u015fen kullan\u0131l\u0131r.<\/li>\n<li>Operat\u00f6rs\u00fcz \u00f6nek e\u015fle\u015fmesi &#8211; En uzun e\u015fle\u015fen \u00f6nek se\u00e7ilir.<\/li>\n<\/ol>\n<p>Bu s\u0131ray\u0131 anlamak, beklenmeyen y\u00f6nlendirmeleri veya kural \u00e7at\u0131\u015fmalar\u0131n\u0131 \u00e7\u00f6zmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>4. <code class=\"language-\">try_files<\/code> direktifi ne i\u015fe yarar ve ne zaman kullan\u0131lmal\u0131d\u0131r?<\/h3>\n<p><strong>Cevap:<\/strong> <code>try_files<\/code> direktifi, Nginx&#8217;in belirli bir s\u0131raya g\u00f6re dosyalar\u0131 veya URI&#8217;leri denemesini sa\u011flar. \u0130lk bulunan ge\u00e7erli dosya veya URI sunulur. E\u011fer hi\u00e7biri bulunamazsa, son arg\u00fcman (genellikle bir dosya veya bir HTTP durum kodu, \u00f6rne\u011fin <code>=404<\/code>) kullan\u0131l\u0131r. Tek sayfa uygulamalar\u0131nda (SPA) t\u00fcm yollar\u0131n <code>index.html<\/code>&#8216;e y\u00f6nlendirilmesi veya \u00f6zel 404 sayfalar\u0131 olu\u015fturulmas\u0131 gibi senaryolarda \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. \u00d6rne\u011fin: <code>try_files $uri $uri\/ \/index.html;<\/code><\/p>\n<h3>5. <code class=\"language-\">location<\/code> bloklar\u0131 i\u00e7inde <code class=\"language-\">if<\/code> kullanmak iyi bir pratik midir?<\/h3>\n<p><strong>Cevap:<\/strong> Nginx&#8217;in <code>if<\/code> direktifi &#8220;If is Evil&#8221; (if k\u00f6t\u00fcd\u00fcr) kural\u0131 olarak bilinir \u00e7\u00fcnk\u00fc karma\u015f\u0131k veya yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda beklenmeyen davran\u0131\u015flara ve performans sorunlar\u0131na yol a\u00e7abilir. Nginx&#8217;in kendi e\u015fle\u015fme algoritmas\u0131 ve di\u011fer direktifleri (<code>try_files<\/code>, <code>rewrite<\/code>, <code>map<\/code> mod\u00fcl\u00fc) \u00e7o\u011fu durumda <code>if<\/code>&#8216;ten daha g\u00fcvenli ve verimli alternatifler sunar. M\u00fcmk\u00fcnse <code>if<\/code> kullan\u0131m\u0131ndan ka\u00e7\u0131n\u0131lmal\u0131 ve Nginx&#8217;in di\u011fer ara\u00e7lar\u0131 tercih edilmelidir. Ancak, basit ko\u015fullar (\u00f6rne\u011fin <code>$invalid_referer<\/code> kontrol\u00fc gibi) i\u00e7in dikkatli bir \u015fekilde kullan\u0131labilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Nginx Location Direktifi: Tam E\u015fle\u015fme, Regex ve Proxy Ayarlar\u0131 Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131&hellip;","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-33662","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>Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?<\/title>\n<meta name=\"description\" content=\"Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131 veya hangi uygulamaya y\u00f6nlendirece\u011fini kontrol etmekte zorlan\u0131yor musunuz? Nginx Location direktifi ile web sunucunuzun istekleri nas\u0131l i\u015fleyece\u011fini, tam e\u015fle\u015fme, regex ve proxy ayarlar\u0131yla performans\u0131 nas\u0131l optimize edece\u011finizi \u00f6\u011frenin.\" \/>\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\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?\" \/>\n<meta property=\"og:description\" content=\"Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131 veya hangi uygulamaya y\u00f6nlendirece\u011fini kontrol etmekte zorlan\u0131yor musunuz? Nginx Location direktifi ile web sunucunuzun istekleri nas\u0131l i\u015fleyece\u011fini, tam e\u015fle\u015fme, regex ve proxy ayarlar\u0131yla performans\u0131 nas\u0131l optimize edece\u011finizi \u00f6\u011frenin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-05T13:22:50+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=\"40 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?\",\"datePublished\":\"2025-11-05T13:22:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/\"},\"wordCount\":5807,\"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\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/\",\"name\":\"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-05T13:22:50+00:00\",\"description\":\"Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131 veya hangi uygulamaya y\u00f6nlendirece\u011fini kontrol etmekte zorlan\u0131yor musunuz? Nginx Location direktifi ile web sunucunuzun istekleri nas\u0131l i\u015fleyece\u011fini, tam e\u015fle\u015fme, regex ve proxy ayarlar\u0131yla performans\u0131 nas\u0131l optimize edece\u011finizi \u00f6\u011frenin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?\"}]},{\"@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":"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?","description":"Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131 veya hangi uygulamaya y\u00f6nlendirece\u011fini kontrol etmekte zorlan\u0131yor musunuz? Nginx Location direktifi ile web sunucunuzun istekleri nas\u0131l i\u015fleyece\u011fini, tam e\u015fle\u015fme, regex ve proxy ayarlar\u0131yla performans\u0131 nas\u0131l optimize edece\u011finizi \u00f6\u011frenin.","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\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/","og_locale":"tr_TR","og_type":"article","og_title":"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?","og_description":"Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131 veya hangi uygulamaya y\u00f6nlendirece\u011fini kontrol etmekte zorlan\u0131yor musunuz? Nginx Location direktifi ile web sunucunuzun istekleri nas\u0131l i\u015fleyece\u011fini, tam e\u015fle\u015fme, regex ve proxy ayarlar\u0131yla performans\u0131 nas\u0131l optimize edece\u011finizi \u00f6\u011frenin.","og_url":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-05T13:22:50+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"40 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?","datePublished":"2025-11-05T13:22:50+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/"},"wordCount":5807,"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\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/","url":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/","name":"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-05T13:22:50+00:00","description":"Web sunucunuzun istekleri nas\u0131l i\u015fledi\u011fini, hangi i\u00e7eri\u011fi nerede bulaca\u011f\u0131n\u0131 veya hangi uygulamaya y\u00f6nlendirece\u011fini kontrol etmekte zorlan\u0131yor musunuz? Nginx Location direktifi ile web sunucunuzun istekleri nas\u0131l i\u015fleyece\u011fini, tam e\u015fle\u015fme, regex ve proxy ayarlar\u0131yla performans\u0131 nas\u0131l optimize edece\u011finizi \u00f6\u011frenin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/nginx-location-direktifi-neden-bu-kadar-onemli-ve-nasil-bir-rol-oynar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Nginx Location Direktifi Neden Bu Kadar \u00d6nemli ve Nas\u0131l Bir Rol Oynar?"}]},{"@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\/33662","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=33662"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33662\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}