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

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,

“NGINX – Tüm Trafiği HTTPS’ye Yönlendirme” için 3 yorum

  1. MESUT ERDEN

    Hocam merhaba. Size nginx ile ilgili sorum olacaktı. Nginx’i kurduğumuz server diyelim ki VLAN 20 de. load balance yapacağımız serverlar başka VLAN’da olsun.

    F5’de yaptığımız gibi virtual IP’ye gidip web sitesini görüntüleyemiorum.

    Karşılaştığım örneklerin hepsi localhostta yapılmış örnekler ve server hep 80i dinliyor. IP verilmiyor.
    Aşağıda verdiğim örnek komutlarda ;
    Virtual server IP:172.22.92.112 80 portundan çalışacak.

    Hizmet veren sunucular nginx ile 80 portundan konuşacak. ve SNAT grekli mi? Bu komutlarda hatam nerade? Teşekkürler .İyi çalışmalar…
    server 172.22.52.113:80;
    server 172.22.52.114:80;
    server 172.22.52.115:80;

    upstream TEST_POOL {
    server 172.22.52.113:80;
    server 172.22.52.114:80;
    server 172.22.52.115:80;

    }

    server {
    listen 172.22.92.112:80;
    location / {
    proxy_pass http://TEST_POOL;
    }

    }

    1. Merhaba,

      Farklı vlanların nginx konfigurasyonu üzerinden belirtmiş olduğunuz portlara erişimi mevcut olduğu süre bir sorun yaşamamanızı bekliyorum. Nginx A vlanında, nginx konfigurasyonuna tanımladığınız host bilgileri b c d vlanlarında ve xx portları olacak şekilde tanımlandıysa b c d ve a vlanlarının xx portları ile iletişime geçmesinde engel olmayacak şekilde yetkilerinin verilmesi gerekmekte. Burada ki yetki network segmantasyon kapsmında vlanlar arası iletişim kesildiyse, ilgili portlar için bir kural tanımlanması gerektigi gibi.

      Teşekkürler,
      İyi çalışmalar

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top