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 genelliklesites-availableiç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
Sanal Host Ekleme ve Kaldırma (Symlink ve Bash Kullanımı)
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
-
Konfigürasyon Dosyasını Oluşturun:
sites-availabledizininde yeni bir dosya oluşturun, örnek:sudo nano /etc/nginx/sites-available/yeni-domain.wastelog.coİçeriği ihtiyaca göre doldurun.
-
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/ -
Yapılandırmayı Test Edin ve NGINX’i Yenileyin:
sudo nginx -t
sudo systemctl reload nginx
Mevcut Domaini Kaldırma
-
Symlink’i Silin: Domain’i devre dışı bırakmak için ilgili symlink’i
sites-enabledklasöründen silin:sudo rm /etc/nginx/sites-enabled/eski-domain.wastelog.co -
(Opsiyonel) Asıl Dosyayı Silin: Konfigürasyon dosyasına artık ihtiyaç yoksa,
sites-availablealtından da silebilirsiniz:sudo rm /etc/nginx/sites-available/eski-domain.wastelog.co -
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 -sile kolayca ekleyebilir,rmile 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.