ฉันมีแอป Django ที่ทำงานกับ Gunicorn/Uvicorn ได้สำเร็จ ภายใต้พาธย่อยของโดเมนของฉัน (example.com/myapp)
Nginx vhost มีลักษณะดังนี้:
เซิร์ฟเวอร์ {
server_name example.com;
ตำแหน่ง /myapp/ {
proxy_pass http://myapp_gunicorn/;
proxy_set_header โฮสต์ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
ตำแหน่ง /myapp/static/ {
นามแฝง /home/www/myapp/static/;
}
ฟัง 443 ssl; # จัดการโดย Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}
ต้นน้ำ myapp_gunicorn {
เซิร์ฟเวอร์ 127.0.0.1:8002;
}
เซิร์ฟเวอร์ {
ถ้า ($host = example.com) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
server_name example.com;
ฟัง 80;
กลับ 404; # จัดการโดย Certbot
}
นี่คือบริการ systemd พร้อมคำสั่ง start ของ Gunicorn:
[หน่วย]
คำอธิบาย=myapp gunicorn daemon
หลังจาก = network.target
[บริการ]
ผู้ใช้ = www-ข้อมูล
Group=www-ข้อมูล
WorkingDirectory=/home/www/myapp
ExecStart=/home/venvs/myapp/bin/gunicorn myapp.asgi:application -b 0.0.0.0:8002 -w 8 -k uvicorn.workers.UvicornWorker --log-file /home/www/myapp.log
[ติดตั้ง]
WantedBy=multi-user.target
กำลังอ่านอยู่ ดังนั้นเกี่ยวกับ Django ในโฟลเดอร์ย่อยด้วย Nginxฉันได้เพิ่มการตั้งค่าต่อไปนี้ใน Django settings.py ของฉันแล้ว:
FORCE_SCRIPT_NAME = '/myapp'
USE_X_FORWARDED_HOST = จริง
# เพื่อให้ Django เชื่อถือ https จากพร็อกซี Nginx
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
ฉันสามารถเข้าถึงแอปและเส้นทางย่อยของแอปได้สำเร็จ https://example.com/myapp/endpoint และหน้าผู้ดูแลระบบ Django https://example.com/myapp/admin (เขียนใหม่สำเร็จเป็น https://example.com/myapp/admin/login/?next=/admin/) ตัวอย่างเช่น.
อย่างไรก็ตาม เมื่อคลิกที่ปุ่มยืนยันหน้าผู้ดูแลระบบ Django ฉันถูกเปลี่ยนเส้นทางไปยังเส้นทางฐานอย่างไม่ถูกต้อง (https://example.com/admin/login/?next=/admin/).
นอกจากนี้ ฉันยังได้รับ 404 สำหรับไฟล์สแตติกทั้งหมด พวกมันยังให้บริการภายใต้พาธพื้นฐานอีกด้วย https://example.com/static/xxx แทนเส้นทางย่อย https://example.com/myapp/static/xxxแม้ว่าฉันคิดว่ามีการตั้งค่าอย่างถูกต้องใน vhost
ฉันได้ดูปัญหาที่คล้ายกันใน SO (รวมถึง อันนี้คล้ายกันมาก) แต่ก็ไม่ได้ช่วยอะไรฉันเลย
ความคิดใด ๆ