หมวดหมู่: Nginx

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

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


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

แทนที่จะเขียน Config ชุดเดิมซ้ำ ๆ ในทุกไฟล์ ให้แยกมันออกมาเป็นไฟล์เล็ก ๆ ใน /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

นำ 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/livepitt.plusmagi.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/livepitt.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;
}