Nginx gunicorn konfigürasyonu (Python ASGI uygulamaları ile) nasıl yapılır? (proxy_pass, WebSocket desteği)

Giriş

Nginx ile Gunicorn kombinasyonu, Python tabanlı ASGI (Asynchronous Server Gateway Interface) uygulamalarını dağıtmak için yaygın bir yöntemdir. Bu konfigürasyon, HTTP isteklerini etkin bir şekilde yönetirken aynı zamanda WebSocket desteği sunar. Nginx, ters proxy olarak işlev görerek istemci isteklerini Gunicorn’a yönlendirir ve uygulama yanıtlarını istemcilere iletir.

Nginx ve Gunicorn Kurulumu

Nginx ve Gunicorn’un sistemde kurulu olduğu varsayılmaktadır. Kurulum adımları işletim sistemine göre farklılık gösterebilir. Örneğin, Ubuntu üzerinde aşağıdaki komutlar kullanılabilir:

“`bash
sudo apt update
sudo apt install nginx
pip install gunicorn
“`

Gunicorn ile ASGI Uygulaması Çalıştırma

Gunicorn, ASGI uygulamalarını çalıştırmak için `uvicorn` gibi bir ASGI sunucusuyla birlikte kullanılabilir. Örneğin:

“`bash
pip install uvicorn
“`

Bir Python dosyasında ASGI uygulaması tanımlandıktan sonra, Gunicorn ile aşağıdaki gibi başlatılabilir:

“`bash
gunicorn -k uvicorn.workers.UvicornWorker myapp:app –bind 0.0.0.0:8000
“`

Burada, `myapp` modülü içindeki `app` değişkeni ASGI uygulamasını temsil eder.

Nginx Konfigürasyonu

Nginx konfigürasyonu, genellikle `/etc/nginx/sites-available/` dizininde oluşturulur. Aşağıdaki örnek, ASGI uygulamalarını yönetmek için gereken temel konfigürasyonu gösterir:

“`nginx
server {
listen 80;
server_name example.com; Sunucu adı buraya yazılmalıdır.

location / {
proxy_pass http://127.0.0.1:8000; Gunicorn’un dinlediği port.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

location /ws/ {
proxy_pass http://127.0.0.1:8000; WebSocket bağlantıları için yönlendirme.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
“`

Bu konfigürasyon, temel HTTP isteklerini ve WebSocket bağlantılarını yönetmek için gerekli ayarları sağlar. `proxy_pass` direktifi, istekleri Gunicorn’un dinlediği adrese yönlendirir. WebSocket desteği için gerekli olan `Upgrade` ve `Connection` başlıkları, WebSocket bağlantılarını başarıyla yönetmek için tanımlanmalıdır.

SSL/TLS Desteği

Güvenli bağlantılar sağlamak için Nginx üzerinde SSL/TLS kurulumu gerçekleştirilmelidir. Bunun için bir SSL sertifikası edinmek ve Nginx konfigürasyonuna dahil etmek gerekir. Let’s Encrypt gibi bir hizmet kullanılarak SSL sertifikası kolayca alınabilir.

Aşağıdaki örnek, SSL ile güncellenmiş bir Nginx konfigürasyonunu göstermektedir:

“`nginx
server {
listen 443 ssl;
server_name example.com;

ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;

location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

location /ws/ {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
“`

Uygulamanın Çalıştırılması ve Nginx’in Yeniden Başlatılması

Nginx konfigürasyonu yapıldıktan sonra, Nginx’in yeniden başlatılması gerekmektedir. Bunun için şu komut kullanılabilir:

“`bash
sudo systemctl restart nginx
“`

Gunicorn’un arka planda çalıştığından emin olunmalıdır. Ayrıca, Nginx’in log dosyaları kontrol edilerek herhangi bir hata olup olmadığı tespit edilebilir. Log dosyaları genellikle `/var/log/nginx/access.log` ve `/var/log/nginx/error.log` yollarında bulunur.

Performans ve Güvenlik Ayarları

Nginx ve Gunicorn konfigürasyonu optimize edilmelidir. Örneğin, `worker_processes` ve `worker_connections` gibi ayarların, sistem kaynaklarına göre belirlenmesi önerilmektedir. Ayrıca, uyku durumu ve timeout süreleri ayarlanarak bağlantıların zamanında kesilmesi sağlanabilir.

Güvenlik açısından, Nginx üzerinde erişim kısıtlamaları ve rate limiting gibi ek önlemler almak faydalıdır. Bu önlemler, kötü niyetli erişimleri engellemeye yardımcı olur.

Sonuç

Nginx ve Gunicorn kullanarak Python ASGI uygulamaları dağıtımı, iyi yapılandırılmış bir sistemle yüksek performans ve güvenlik sunar. WebSocket desteği sayesinde gerçek zamanlı uygulama geliştirilmesi kolaylaşır. Uygulama gereksinimlerine uygun şekilde iyileştirmeler yapmak, sistemin dayanıklılığını arttırır ve kullanıcı deneyimini olumlu yönde etkiler.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

SON İÇERİKLER

İLGİNİZİ ÇEKEBİLİR