Nginx son zamanlarda Apache’ye göre oldukça yükselişte olan bir http, https web sunucusu. Özellikle node, python gibi yazılım dilleri ile geliştirilmiş diller için reverse proxy olarak tercih ediliyordu. PHP7 ile beraber php performansı opcode cache sistemini kendi içinde barındırmasından dolayı artınca Nginx her yerde kullanılmaya başladı. Çünkü artık Apache’nin kendine özel php eklentisi olan mod_php’nin ciddi bir avantajı kalmadı. Nginx hem yüksek yükte Apache’den daha dayanıklı bir ortam sağlıyor hem de oldukça etkili bir php desteği barındırıyor.
Buradaki tek sorun artık htaccess gibi web’in önemi bir parçası olan apache ayar dosyalarını kullanamıyor olmamız. Bunun yerine nginx yapılandırma dosyaları hazırlamamız ve her ayar değişikliğinde sunucuyu yeniden başlatmamız gerekiyor. Bu apache’ye göre ciddi bir dezavantaj ama bence bizi nginx’in esnekliğinden vazgeçirmemeli.
Nginx 301 Yönlendirme Örnekleri
Öncelikle ayar dosyamızın /etc/nginx/sites-enabled
dizininde olduğundan ve düzgün bir şekilde çalıştığından emin olalım. Bunun için nginx -t
komutunu da kullanabiliriz. HTTP 301 yönlendirmeyi ise nginx’te aşağıdaki örneklerdeki gibi yapabiliyoruz.
nginx domain yönlendirme
server { listen 80; listen [::]:80; server_name eskiadresimiz.com www.eskiadresimiz.com; if ($host = www.eskiadresimiz.com) { return 301 https://yeniadresimiz.com/$request_uri; } if ($host = eskiadresimiz.com) { return 301 https://yeniadresimiz.com/$host$request_uri; }
Bu örnekte eskiadresimiz.com ve www.eskiadresimiz.com üzerinde yayın yapan sitemizi yeniadresimiz.com a yönlendirdik. 301 yönlendirmesinde
nginx ssl yönlendirme işlemi
Letsencrypt ile yapılan certbot ssl kurulumu için gerekli ayarları seçtiğimizde http isteklerimiz https ye otomatik olarak yönlendiriliyor. Bunu seçeneği kullanmadıysak bu 301 yönlendirme işlemini kendimiz yapmamız gerekiyor. Bunun için alttaki örnekten faydalanabiliriz:
server { listen 80; listen [::]:80; server_name siteadresimiz.com www.siteadresimiz.com; if ($host = www.siteadresimiz.com) { return 301 https://siteadresimiz.com/$request_uri; } if ($host = siteadresimiz.com) { return 301 https://$host$request_uri; } }
Bu örnekte siteadresimiz.com a gelen istekleri aynı adresin ssl destekli yani https haline yönlendirdik. Https için ayrı bir server bloğu açıp 443 üzerinden listen yapmayı unutmayın.
nginx ile htaccess gibi rewrite yapma
Bilindiği gibi nginx sunucusunda apache htaccess dosyası desteği yok ama benzer yönlendirme işlemini yine rewrite komutu ile yapabiliyoruz. Alttaki örnekleri inceleyebilirsiniz:
location / { try_files $uri @rewrites; } location @rewrites { rewrite ^/((.)[^/]+)$ /post.php?url=$1; rewrite ^/(.)/$ /index.php?cat=$1; rewrite ^/(.)/(.)/$ /index.php?cat=$1&page=$2 break; }