"Enter"a basıp içeriğe geçin

NGINX – Tüm Trafiği HTTPS’ye Yönlendirme

Last updated on 10 Eylül 2020

HTTPS inanılmaz derecede önemlidir çünkü iletilen verilerin güvenliğini sağlamamıza yardımcı olur. Aslında, kullanıcı HTTP aracılığıyla bağlanmışsa tarayıcıların siteleri “Güvenli Değil” olarak etiketlemeye başlaması çok önemlidir. Tüm trafiği HTTP yerine HTTPS üzerinden yönlendirmek için sunucu yapılandırmamızı değiştirelim.

HTTP ve HTTPS Sunucularını Ayırma

HTTPS üzerinden gitmek için tüm trafiği yeniden yönlendirmeden önce, iki ayrı server bloğu oluşturarak sunucumuz için HTTP ve HTTPS işlemlerini ayıracağız. Biri 80 numaralı bağlantı noktasını dinleyecek ve hiçbir içerik göstermeyecektir. Diğeri mevcut yapılandırmamızı tutacak ancak yalnızca 443 numaralı bağlantı noktasını dinleyecektir. Onlara bölünmüş haldeyken yapılandırmamız şu şekildedir:

/etc/nginx/conf.d/default.conf

server {
    listen 80 default_server;
    server_name _;
    return 404;
}

server {
    listen 443 ssl default_server;
    server_name _;
    root /usr/share/nginx/html;

ssl_certificate /etc/nginx/ssl/public.pem;
ssl_certificate_key /etc/nginx/ssl/private.key;

rewrite ^(/.*)\.html(\?.*)?$ $1$2 redirect;
rewrite ^/(.*)/$ /$1 redirect;

location / {
    try_files $uri/index.html $uri.html $uri/ $uri =404;
}

location = /admin {
    auth_basic "Login Required";
    auth_basic_user_file /etc/nginx/.htpasswd;
    try_files $uri/index.html $uri.html $uri/ $uri =404;
}

error_page 404 /404.html;
error_page 500 501 502 503 504 /50x.html;
}

Bir sunucu yeniden yüklemesinden sonra, IP adresimizi http:// ile ziyaret edersek, 404 hatası almalıyız, ancak aynı sayfayı https:// ile ziyaret edersek beklediğimiz içeriği görürüz.

Tamamen Farklı URL’ye Yönlendirme

Artık HTTP trafiğini kabul etmediğimize göre, kullanıcıyı HTTPS aracılığıyla uygun sayfaya yönlendirmeye başlamak istiyoruz. Neyse ki, dönüş yönergesini kullanarak daha önce yaptığımız şeyle olmak istediğimiz yere %95 oradayız. return nasıl çalıştığına baktığımızda, tamamen farklı bir URL’ye yönlendirmek için iki şey belirtmemiz gerekiyor:

return STATUS_CODE URL;

Yönlendirme yaptığımız için 301 durum kodunu kullanacağız. İfadenin URL kısmına gelince, uygun noktaya gittiğimizden emin olmak için isteği işlerken mevcut değişkenleri kullanacağız. Doğru sunucuya gittiğinden emin olmak için, hedef URL’mizdeki $ host değişkenini alan adını iletmek için kullanacağız. $host kullanmak, birden fazla HTTPS, virtual hosta sahip olduktan sonra bu sunucunun uygun sunucuya yönlendirilmesini sağlayacaktır. Ayrıca, isteğin yol kısmını temsil eden $ request_uri değişkenini kullanacağız. Yapmamız gereken diğer tek şey URL’yi https: // ile başlatmaktır. Şimdi iade direktifimizi değiştirelim:

/etc/nginx/conf.d/default.conf

server {
    listen 80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl default_server;
    server_name _;
    root /usr/share/nginx/html;

ssl_certificate /etc/nginx/ssl/public.pem;
ssl_certificate_key /etc/nginx/ssl/private.key;

rewrite ^(/.*)\.html(\?.*)?$ $1$2 redirect;
rewrite ^/(.*)/$ /$1 redirect;

location / {
    try_files $uri/index.html $uri.html $uri/ $uri =404;
}

location = /admin {
    auth_basic "Login Required";
    auth_basic_user_file /etc/nginx/.htpasswd;
    try_files $uri/index.html $uri.html $uri/ $uri =404;
}

error_page 404 /404.html;
error_page 500 501 502 503 504 /50x.html;

}

http gitiğimiz url sayfalarımız otomatik şekilde https’e yönlendirildiğini testleriniz esnasında görebilirsiniz,

Başka bir yazımızda görüşmek üzere,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir