ป้ายกำกับ: Headers

Nginx: set modular เป็น JigsawNginx: set modular เป็น Jigsaw

การปรับปรุง Nginx ให้เป็น Modular จะช่วยให้คุณจัดการ Config ได้ง่ายขึ้นมาก ลดความซ้ำซ้อน และลดโอกาสเกิด Error เวลาแก้ไข


สร้างโฟลเดอร์สำหรับ Global Snippets

แทนที่จะเขียน Config ชุดเดิมซ้ำๆ ในทุกไฟล์ ( เช่น HTTP/3 Headers, SSL Settings, หรือ Security Headers ) ให้แยกมันออกมาเป็นไฟล์เล็ก ๆ ใน /etc/nginx/snippets/

ตัวอย่างไฟล์ที่ควรแยก

  • /etc/nginx/snippets/http3.conf
    http2 on;
    add_header Alt-Svc 'h3=":443"; ma=86400';
    
  • /etc/nginx/snippets/php-fpm.conf
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.5-fpm.sock;
    fastcgi_read_timeout 300;
    
  • /etc/nginx/snippets/proxy-params.conf
    # /etc/nginx/snippets/proxy-params.conf
    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;
    
    # WebSocket Support (จำเป็นสำหรับ Webmin / Terminal)
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    
    # Timeouts & Buffering
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
    proxy_connect_timeout 300s;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
    
  • /etc/nginx/snippets/security.conf
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    server_tokens off;
    

ทำความสะอาดไฟล์ Virtual Host ( sites-enabled )

นำ Snippets ที่สร้างไว้มา include ในไฟล์ Config ของแต่ละโดเมนแทน
ตัวอย่าง: plusmagi.com.wordpress.conf ( เวอร์ชันใหม่ )

server {
    listen 443 ssl;
    listen 443 quic reuseport;
    server_name pitt.plusmagi.com;

    root /var/www/plusmagi.com/pitt;
    index index.php index.html;

    # --- Use Snippets ---
    include snippets/http3.conf;
    include snippets/security.conf;
    
    # SSL (Let's Encrypt)
    ssl_certificate /etc/letsencrypt/live/pitt.plusmagi.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pitt.plusmagi.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/php-fpm.conf;
        fastcgi_param PHP_VALUE "open_basedir=/proc/:/tmp/:/var/www/plusmagi.com/pitt";
    }
    
    # Caching assets
    include snippets/static-assets.conf;
}