Nginx'te tek bir sunucu birden fazla alan adına hizmet verebilir. Her site için ayrı bir server block (diğer sunucularda "sanal host") tanımlanır; Nginx gelen isteğin Host başlığına bakarak hangi bloğun yanıt vereceğini seçer.
Kurulum
sudo apt update
sudo apt install nginxDebian ve Ubuntu paketinde site yapılandırmaları /etc/nginx/sites-available/ altında tutulur ve etkinleştirilenler /etc/nginx/sites-enabled/ içine sembolik bağ olarak eklenir. Diğer dağıtımlarda dizin düzeni farklı olabilir (conf.d/ gibi).
Site dizini
sudo mkdir -p /var/www/ornek.com/html
echo "merhaba" | sudo tee /var/www/ornek.com/html/index.htmlDosya sahipliği ve izinleri, web sunucusunun dosyaları okuyabileceği şekilde ayarlanmalı; yazma izni gerekmeyen yerlerde vermeyin.
Server block
/etc/nginx/sites-available/ornek.com dosyası:
server {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/ornek.com.access.log;
error_log /var/log/nginx/ornek.com.error.log;
}Etkinleştirme, sınama ve yeniden yükleme:
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxnginx -t yapılandırma hatasını yeniden yüklemeden önce yakalar. Hata varsa mevcut çalışan yapılandırma etkilenmez, ancak hatayı düzeltmeden yeniden yükleme çalışmaz.
Varsayılan sunucu
Hiçbir server_name ile eşleşmeyen istekler, ilgili port için ilk tanımlanan ya da default_server işaretli bloğa gider. Bilinmeyen adlara bağlantıyı kapatmak için:
server {
listen 80 default_server;
server_name _;
return 444;
}444, Nginx'e özgü bir koddur; yanıt göndermeden bağlantıyı kapatır.
Ters vekil (reverse proxy)
Bir uygulamayı (örneğin 3000. portta çalışan bir Node.js servisi) yayına almak için location bloğu:
location / {
proxy_pass http://127.0.0.1:3000;
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;
}Uygulama yalnızca 127.0.0.1 üzerinde dinlerse dışarıdan doğrudan erişilemez; bu istenen bir durumdur.
HTTPS
Sertifika almak için Let's Encrypt ve Certbot makalesine bakın. 80 ve 443 portlarının güvenlik duvarında açık olması gerekir: UFW rehberi.
Sorun giderme
- 403 Forbidden: Dizin izinleri ya da
indexdosyası eksik. - 404 Not Found:
rootyolu yanlış ya da dosya yok. - 502 Bad Gateway: Ters vekilin ilettiği uygulama çalışmıyor ya da yanlış portta.
- Ayrıntı için hata günlüğüne bakın:
sudo tail -n 50 /var/log/nginx/error.log.