Reverse proxy sunucusu, web sunucularının önünde bulunan ve istemcinin (örneğin, web tarayıcısı) isteklerini bu web sunucularına ileten bir sunucu türüdür. Reverse proxy’ler genellikle güvenliği, performansı ve güvenilirliği artırmak için yüklenir. Bu eğitim, yüksek performanslı ve yüksek düzeyde ölçeklenebilir bir web sunucusu olan Nginx’i, Ubuntu veya Debian çalıştıran bir sistemde reverse proxy olarak kurma sürecinde size rehberlik edecektir.
Kurulum ve İlk Yapılandırma
Nginx’i reverse proxy olarak yapılandırmadan önce diğer gerekli paketlerle birlikte yüklenmesi gerekir. Bu bölümde kurulum süreci anlatılacaktır.
- Sisteminizi Güncelleyin: Paket listelerinizi ve sisteminizi güncelleyerek başlayın.
$ sudo apt update && sudo apt upgrade
Sisteminizi güncellemek, Nginx için gereken en son güvenlik yamalarına ve bağımlılıklara sahip olmanızı sağlar.
- Nginx’i yükleyin: Nginx’i paket yöneticisini kullanarak yükleyin.
$ sudo apt install nginx
Kurulduktan sonra Nginx hizmeti otomatik olarak başlamalıdır. Durumunu sudo systemctl status nginx ile kontrol edebilirsiniz.
Nginx’i Reverse Proxy Olarak Yapılandırma
Nginx yüklendiğinde bir sonraki adım, istekleri bir veya daha fazla arka uç web sunucusuna iletmek için onu reveres proxy olarak yapılandırmaktır.
- Proxy Ayarlarını Yapılandırma: Reverse proxy ayarlarını oluşturmak için Nginx yapılandırma dosyasını düzenleyerek başlayın.
$ sudo nano /etc/nginx/sites-available/default
Aşağıdaki yapılandırma pasajını sunucu bloğunun içine ekleyin. Bu kurulum, gelen istekleri 3000 numaralı bağlantı noktasında çalışan bir arka uç sunucusuna iletir:
location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
Bu konfigürasyon, tüm isteklerle eşleşen bir konum bloğunu tanımlar (“/” ile gösterilir). proxy_pass yönergesi bu istekleri belirtilen arka uç sunucusuna gönderir. proxy_http_version 1.1 yönergesi, proxy sunucuya bağlantı için HTTP/1.1’i belirtir. proxy_set_header satırları, proxy sunucusuna iletilen istek başlıklarını değiştirir: Yükseltme ve Bağlantı başlıkları, websocket’ler gibi yükseltilmiş bağlantıları desteklerken Ana Bilgisayar başlığı, istemci tarafından talep edilen orijinal ana bilgisayarı korur. proxy_cache_bypass yönergesi, $http_upgrade değişkeninin değerinin boş olmaması durumunda önbelleğin atlanmasını sağlayarak yükseltmelerin bütünlüğünü korur ve doğrudan sunucu iletişimini sağlar.
Aşağıda, güvenli bir HTTPS kurulumunda bu yapılandırmayı içeren /etc/nginx/sites-available/default dosyanızın nasıl görünebileceğine dair tam bir örnek verilmiştir:
server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name yourdomain.com www.yourdomain.com; ssl_certificate /etc/ssl/certs/your_ssl_certificate.crt; ssl_certificate_key /etc/ssl/private/your_private_key.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } access_log /var/log/nginx/yourdomain_access.log; error_log /var/log/nginx/yourdomain_error.log; }
Let’s Encrypt kullanarak bu yapılandırmaya yönelik bir SSL sertifikası oluşturmak için Certbot aracını kullanabilirsiniz. Certbot’u yüklemek ve sertifikalar oluşturmak için aşağıdaki komutları çalıştırın:
$ sudo apt install certbot python3-certbot-nginx $ sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Bu komutları çalıştırmak, Certbot’un Nginx yapılandırmanızı otomatik olarak değiştirmesini, SSL sertifikasına ve anahtarın yollarını, oluşturduğu yeni sertifikaların yollarıyla değiştirmesini isteyecektir. Bu, Nginx kurulumunuzu Let’s Encrypt sertifikalarını kullanacak şekilde ayarlayan ve bunların süreleri dolmadan otomatik olarak yenilenmelerini sağlayan otomatik bir işlemdir. Yapılandırmanızda kendinden imzalı sertifikalar veya diğer SSL sertifikaları için önceden yollar belirlediyseniz Certbot, yeni, güvenilir sertifika yollarını bunların üzerine yazacaktır.
Let’s Encrypt’ten sertifika almak yerine kendinden imzalı bir SSL sertifikası kullanmayı tercih ederseniz OpenSSL ile bir sertifika oluşturabilirsiniz. Bu yaklaşım özellikle test etme veya dahili kullanım için kullanışlıdır. Kendinden imzalı bir sertifika ve anahtar oluşturmak için aşağıdaki komutu yürütün:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/your_private_key.key -out /etc/ssl/certs/your_ssl_certificate.crt -subj "/CN=*.yourdomain.com"
Bu komut, alan adınızın tüm alt alan adlarını kapsayacak şekilde “*.alanadiniz.com” ortak adıyla bir RSA anahtarı ve 365 gün geçerli bir sertifika oluşturur. Sertifika ve anahtar belirlenen yerlerde saklanır. Bu sertifika kendinden imzalı olduğundan, kullanıcılar sitenize eriştiğinde tarayıcıların sertifikanın güvenilirliğine ilişkin bir uyarı verebileceğini unutmayın.
- Nginx yapılandırmanızı doğrulayın:
$ sudo nginx -t
Bu komut, sözdizimi hatalarını kontrol eder ve yapılandırma dosyasının doğru olup olmadığını, hizmetin yeniden yüklenmesine hazır olup olmadığını onaylar.
- Nginx’i Yeniden Yükle: Yapılandırma testi başarılı olursa değişiklikleri uygulamak için Nginx’i yeniden yükleyin.
$ sudo systemctl reload nginx
Yeniden yükleme, devam eden bağlantıları kesintiye uğratmadan tüm yapılandırma değişikliklerini uygular.
- Yapılandırmanızı Test Edin: Alanınıza bir web tarayıcısından erişerek veya curl gibi bir araç kullanarak reverse proxy’nin düzgün çalıştığını doğrulayın.
$ curl -I http://yourdomain.com
Bu komut, ters proxy’nin etkin ve çalışır durumda olduğunu doğrulamak için arka uç sunucusundan HTTP başlıklarını döndürmelidir.
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.