Ana içeriğe geç

NGINX Sunucu Yapılandırması

Bu dokümanda yalnızca vm-app-dev sunucusundaki NGINX yapılandırmasına odaklanılmıştır. Çünkü vm-app-prod üzerindeki ayarlar neredeyse aynıdır ve buradaki mantığı ve yapıyı kavramak yeterli olacaktır.

Klasör Yapısı

NGINX yapılandırma dizini /etc/nginx altındadır. Burada iki önemli klasör bulunur:

  • sites-available: Tüm sanal host (virtual host) tanımlarının tutulduğu klasör.
  • sites-enabled: Aktif olan ve NGINX tarafından yüklenen sanal host'ların bulunduğu klasör. Burada genellikle sites-available içerisindeki dosyalara sembolik linkler bulunur.

Mevcut klasör ve dosya yapısı şu şekildedir:

sites-available
├── default
├── dev-admin.wastelog.co
├── dev-api-v2.wastelog.co
├── dev-collector.wastelog.co
└── dev-external.wastelog.co

sites-enabled
├── default -> /etc/nginx/sites-available/default
├── dev-admin.wastelog.co -> /etc/nginx/sites-available/dev-admin.wastelog.co
├── dev-api-v2.wastelog.co -> /etc/nginx/sites-available/dev-api-v2.wastelog.co
├── dev-collector.wastelog.co -> /etc/nginx/sites-available/dev-collector.wastelog.co
└── dev-external.wastelog.co -> /etc/nginx/sites-available/dev-external.wastelog.co

Yeni bir domain (sanal host) eklemek veya mevcut bir domaini kaldırmak için sites-available ve sites-enabled klasörlerinin nasıl kullanılacağı aşağıda açıklanmıştır:

Yeni Bir Domain Ekleme

  1. Konfigürasyon Dosyasını Oluşturun: sites-available dizininde yeni bir dosya oluşturun, örnek:

    sudo nano /etc/nginx/sites-available/yeni-domain.wastelog.co

    İçeriği ihtiyaca göre doldurun.

  2. Symlink Oluşturun: Aşağıdaki komut ile, yeni dosyayı etkinleştirmek için sembolik link (symlink) oluşturun:

    sudo ln -s /etc/nginx/sites-available/yeni-domain.wastelog.co /etc/nginx/sites-enabled/
  3. Yapılandırmayı Test Edin ve NGINX’i Yenileyin:

    sudo nginx -t
    sudo systemctl reload nginx

Mevcut Domaini Kaldırma

  1. Symlink’i Silin: Domain’i devre dışı bırakmak için ilgili symlink’i sites-enabled klasöründen silin:

    sudo rm /etc/nginx/sites-enabled/eski-domain.wastelog.co
  2. (Opsiyonel) Asıl Dosyayı Silin: Konfigürasyon dosyasına artık ihtiyaç yoksa, sites-available altından da silebilirsiniz:

    sudo rm /etc/nginx/sites-available/eski-domain.wastelog.co
  3. Yapılandırmayı Test Edin ve NGINX’i Yenileyin:

    sudo nginx -t
    sudo systemctl reload nginx

Not: Symlink (sembolik link) kullanmak, domainleri kolayca ekleyip kaldırmanıza ve konfigürasyon yönetimini basitleştirmenize olanak tanır. ln -s ile kolayca ekleyebilir, rm ile kaldırabilirsiniz.

Sanal Host Yapılandırmaları

1. dev-admin.wastelog.co

React tabanlı admin paneli için yapılandırılmıştır. Dosya yolu: /var/www/admin/build

Örnek içerik:

server {
listen 80;
server_name dev-admin.wastelog.co;

root /var/www/admin/build;

index index.html;
server_tokens off;

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

location / {
try_files $uri $uri/ /index.html;
}
}
  • Modern frontend frameworklerinde gerekli olan try_files özelliğiyle SPA yönlendirme desteklenir.
  • Gzip ve temel güvenlik ayarları mevcuttur.

2. dev-api-v2.wastelog.co

Backend API servisi için yapılandırılmıştır. API uygulaması İçin port 5001'e yönlendirme yapar (/var/www/backend dizininde çalışan uygulama).

Örnek içerik:

server {
listen 80;
server_name dev-api-v2.wastelog.co;

# Security: Hide Nginx version
server_tokens off;

location / {
# Forward Traffic to the Backend App
proxy_pass http://127.0.0.1:5001;

# Standard Proxy Headers
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;

# WebSocket Support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

# Cloudflare / Real IP Handling
proxy_set_header X-Real-IP $http_cf_connecting_ip;
proxy_set_header X-Forwarded-For $http_cf_connecting_ip;
}
}
  • API isteği gelen tüm trafiği 127.0.0.1:5001 portundan çalışan backend sunucuya yönlendirir.
  • Cloudflare ile doğru istemci IP'sini uygulamaya yansıtmak için ek başlık (header) yapılandırmaları uygulanmıştır.
  • WebSocket desteği eklenmiştir.

3. dev-collector.wastelog.co

Vue/React tabanlı ayrı bir uygulama olan Collector için yapılandırma. Dosya yolu: /var/www/collector/dist

Örnek içerik:

server {
listen 80;
server_name dev-collector.wastelog.co;

root /var/www/collector/dist;

index index.html;
server_tokens off;

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

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

4. dev-external.wastelog.co

Dışarı açık uygulama veya landing-page gibi servisler için. Dosya yolu: /var/www/external

Örnek içerik:

server {
listen 80;
server_name dev-external.wastelog.co;

root /var/www/external;

index index.html;
server_tokens off;

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

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

Uygulamaların Sunucudaki Dizini

Her uygulamaya ait dosyalar /var/www altındaki ilgili klasörlerde barındırılır:

/var/www/
├── admin # Admin Panel (React)
├── backend # API uygulamanız (NestJS)
├── collector # Collector uygulaması (React)
├── external # External uygulaması (React)
├── html # (NGINX varsayılan dizini)

SSL, HTTPS, Cloudflare

  • SSL, Azure Gateway üzerinde sonlandırılmaktadır.
  • Bu nedenle NGINX sunucusunda yapılan tüm konfigürasyonlar sadece 80 numaralı port (HTTP) üzerinden dinlenmektedir.
  • SSL ve HTTPS ile ilgili işlemlerin tamamı bulut tarafında (Azure Gateway ve Cloudflare) yürütülmektedir.
  • SSL sertifikaları ve anahtarları Cloudflare üzerinde oluşturulmuş ve burada yönetilmektedir.
  • Sunucu üzerinde (NGINX) ek bir SSL kurulumu veya ayarı gerekmemektedir.