Nginx Proxy

เมื่อ webman ต้องการให้เข้าถึงจากเครือข่ายภายนอกโดยตรง แนะนำให้เพิ่ม nginx proxy ไว้ด้านหน้าของ webman ซึ่งให้ประโยชน์ดังนี้:

  • ทรัพยากรสถิตย์จัดการโดย nginx ทำให้ webman โฟกัสที่การประมวลผลตรรกะธุรกิจ
  • หลาย webman สามารถใช้พอร์ต 80 และ 443 ร่วมกัน แยกแยะไซต์ตามชื่อโดเมน ทำให้มีหลายไซต์บนเซิร์ฟเวอร์เดียว
  • สามารถให้สถาปัตยกรรม php-fpm และ webman ทำงานร่วมกันได้
  • nginx proxy พร้อม SSL สำหรับ https ทำได้ง่ายและมีประสิทธิภาพกว่า
  • สามารถกรองคำขอที่ผิดกฎหมายจากเครือข่ายภายนอกอย่างเข้มงวด

ตัวอย่าง Nginx Proxy

upstream webman {
    server 127.0.0.1:8787;
    keepalive 10240;
}

server {
  server_name โดเมนของไซต์;
  listen 80;
  access_log off;
  # สำคัญ: root ต้องชี้ไปที่โฟลเดอร์ public ภายใต้ webman ไม่ใช่โฟลเดอร์รากของ webman
  root /your/webman/public;

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://webman;
  }

  # ปฏิเสธการเข้าถึงไฟล์ทั้งหมดที่ลงท้ายด้วย .php
  location ~ \.php$ {
      return 404;
  }

  # อนุญาตการเข้าถึงโฟลเดอร์ .well-known
  location ~ ^/\.well-known/ {
    allow all;
  }

  # ปฏิเสธการเข้าถึงไฟล์หรือโฟลเดอร์ทั้งหมดที่ขึ้นต้นด้วย .
  location ~ /\. {
      return 404;
  }

}

โดยทั่วไป นักพัฒนาต้องกำหนดค่า server_name และ root ด้วยค่าจริงเท่านั้น ส่วนฟิลด์อื่นๆ ไม่จำเป็นต้องกำหนดค่า

หมายเหตุ
สิ่งสำคัญอย่างยิ่งคือตัวเลือก root ต้องชี้ไปที่โฟลเดอร์ public ภายใต้ webman ห้ามตั้งค่าเป็นโฟลเดอร์รากของ webman มิฉะนั้นไฟล์ทั้งหมดของคุณอาจถูกดาวน์โหลดและเข้าถึงได้จากอินเทอร์เน็ต รวมถึงไฟล์สำคัญ เช่น การตั้งค่าฐานข้อมูล