เราได้รับคำขอจากลูกค้าที่ต้องการโฮสต์เว็บไซต์ WordPress ภายในเว็บไซต์ของเรา ภายในนั้น ฉันหมายความว่าไซต์ไม่สามารถอยู่ในโดเมนย่อยได้ เช่น https://blog.example.com แต่จะต้องอยู่ในเส้นทาง/โฟลเดอร์ย่อยของตัวเองแทน เช่น https://www.example.com/blog< /ก>. นี่เป็นเพราะการจัดอันดับหน้า (เห็นได้ชัดว่าการจัดอันดับหน้าจะถูกลงโทษหากใส่ไว้ในโดเมนย่อย)
ปัญหาคือ เว็บไซต์ของเราไม่ทำงานใน PHP (เขียนด้วยภาษา Scala ที่ทำงานบน Jetty) นอกจากนี้ ไซต์หลักของเรายังเรียกใช้จากคอนเทนเนอร์ Docker ที่สนับสนุนโดย Nginx
ตามหลักการแล้ว ฉันต้องการโฮสต์ Wordpress บนเซิร์ฟเวอร์เดี่ยวของตัวเอง (ไม่ว่าจะเป็น Docker ที่เก็บคอนเทนเนอร์หรือไม่ก็ตาม ไม่ใช่ปัญหาใหญ่) และในการกำหนดค่า nginx สำหรับไซต์หลักของเรา ให้ย้อนกลับไปยังเซิร์ฟเวอร์ภายนอกนั้นสำหรับ URL ที่ระบุ (เช่น https://www.example.com/blog จะชี้ไปที่ IP/โฮสต์ของเซิร์ฟเวอร์ภายนอกที่ ใช้เวิร์ดเพรส)
คุณจะบรรลุเป้าหมายนี้/เป็นไปได้อย่างไร? นี่คือ nginx.conf
ปัจจุบันสำหรับเซิร์ฟเวอร์หลักของเรา
server {
listen 80;
listen [::]:80;
listen 443 default_server ssl;
server_name www.example.com.au;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED";
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
location / {
proxy_pass http://localhost:8080;
proxy_redirect http://www.example.com.au /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_read_timeout 600s;
port_in_redirect off;
}
}
นี่คือตัวอย่างของ nginx.conf
ปัจจุบันของเรา ดังที่คุณเห็น เว็บไซต์จริงโฮสต์อยู่บน localhost:8080
และเราเป็นเพียงการเปลี่ยนเส้นทางพร็อกซีสำหรับไซต์หลัก