Nginx Web Server Kurulumu ve Yönetimi

Nginx web server kurulumu, yapılandırması, SSL sertifikası kurulumu ve performans optimizasyonu. Web sunucu yönetimi için kapsamlı rehber.

5 min read
852 words

Nginx Web Server Kurulumu ve Yönetimi#

Nginx, yüksek performanslı web sunucusu ve reverse proxy olarak yaygın kullanılan açık kaynak bir yazılımdır. Bu rehberde Nginx kurulumu, yapılandırması ve yönetimi konularını ele alacağız.

Nginx Kurulumu#

Ubuntu/Debian Sistemlerde Kurulum#

# Paket listesini güncelle sudo apt update # Nginx kurulumu sudo apt install nginx # Nginx servisini başlat ve otomatik başlatmayı etkinleştir sudo systemctl start nginx sudo systemctl enable nginx # Nginx durumunu kontrol et sudo systemctl status nginx

CentOS/RHEL Sistemlerde Kurulum#

# EPEL repository'sini ekle sudo yum install epel-release # Nginx kurulumu sudo yum install nginx # Nginx servisini başlat sudo systemctl start nginx sudo systemctl enable nginx

Temel Nginx Yapılandırması#

Ana Yapılandırma Dosyası#

Nginx ana yapılandırma dosyası /etc/nginx/nginx.conf konumundadır:

user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; use epoll; multi_accept on; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Gzip sıkıştırma gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; # Virtual host yapılandırmaları include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }

Virtual Host Yapılandırması#

Yeni bir site için virtual host oluşturma:

# /etc/nginx/sites-available/example.com server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html index.htm index.php; # Access ve error logları access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; # Ana lokasyon location / { try_files $uri $uri/ =404; } # PHP dosyaları için FastCGI location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } # Statik dosyalar için cache location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control "public, immutable"; } }

Site yapılandırmasını etkinleştirme:

# Symbolic link oluştur sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ # Yapılandırmayı test et sudo nginx -t # Nginx'i yeniden yükle sudo systemctl reload nginx

SSL Sertifikası Kurulumu#

Let's Encrypt ile Ücretsiz SSL#

# Certbot kurulumu sudo apt install certbot python3-certbot-nginx # SSL sertifikası al sudo certbot --nginx -d example.com -d www.example.com # Otomatik yenileme testi sudo certbot renew --dry-run

SSL Yapılandırması#

server { listen 80; server_name example.com www.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name example.com www.example.com; root /var/www/example.com; # SSL sertifikaları ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # SSL güvenlik ayarları ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # HSTS header add_header Strict-Transport-Security "max-age=63072000" always; location / { try_files $uri $uri/ =404; } }

Reverse Proxy Yapılandırması#

Node.js Uygulaması için Reverse Proxy#

upstream nodejs_backend { server 127.0.0.1:3000; server 127.0.0.1:3001; server 127.0.0.1:3002; } server { listen 80; server_name app.example.com; location / { proxy_pass http://nodejs_backend; 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; proxy_cache_bypass $http_upgrade; } }

Performans Optimizasyonu#

Worker Process Ayarları#

# CPU çekirdek sayısına göre ayarla worker_processes auto; # Worker bağlantı sayısı events { worker_connections 2048; use epoll; multi_accept on; }

Buffer ve Timeout Ayarları#

http { # Client buffer ayarları client_body_buffer_size 128k; client_max_body_size 10m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; output_buffers 1 32k; postpone_output 1460; # Timeout ayarları client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; keepalive_timeout 65; }

Gzip Sıkıştırma#

gzip on; gzip_vary on; gzip_min_length 1024; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/atom+xml image/svg+xml;

Güvenlik Yapılandırması#

Temel Güvenlik Headers#

# Güvenlik headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; # Server bilgisini gizle server_tokens off;

Rate Limiting#

# Rate limiting zone tanımla limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m; server { # Login sayfası için rate limiting location /login { limit_req zone=login burst=5 nodelay; try_files $uri $uri/ =404; } }

Log Yönetimi#

Custom Log Format#

log_format detailed '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '$request_time $upstream_response_time'; access_log /var/log/nginx/detailed.log detailed;

Log Rotation#

# /etc/logrotate.d/nginx /var/log/nginx/*.log { daily missingok rotate 52 compress delaycompress notifempty create 644 nginx adm postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }

Monitoring ve Troubleshooting#

Nginx Status Modülü#

server { listen 127.0.0.1:80; server_name localhost; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } }

Yaygın Sorunlar ve Çözümleri#

  1. 502 Bad Gateway Hatası
# Upstream servisleri kontrol et sudo systemctl status php7.4-fpm sudo netstat -tlnp | grep :9000
  1. 413 Request Entity Too Large
# Client max body size artır client_max_body_size 50M;
  1. Yavaş Yükleme Sorunları
# Access loglarını analiz et sudo tail -f /var/log/nginx/access.log | grep "slow"

Sonuç#

Nginx, doğru yapılandırıldığında yüksek performanslı ve güvenli web servisi sağlar. Bu rehberde ele aldığımız konular:

  • Temel kurulum ve yapılandırma
  • SSL sertifikası kurulumu
  • Reverse proxy yapılandırması
  • Performans optimizasyonu
  • Güvenlik ayarları
  • Log yönetimi ve monitoring

Düzenli bakım ve monitoring ile Nginx sunucunuzun optimal performansta çalışmasını sağlayabilirsiniz.

Related Posts