Tôi có một ứng dụng django-admin duy nhất có tên là myapp
mà tôi muốn triển khai nhiều phiên bản trên các hộp vật lý khác nhau, một cho mỗi khách hàng. Tuy nhiên, tôi muốn tất cả chúng được truy cập từ một miền tương tự, mydomain.com/customer1/myapp
.nhiều ứng dụng django với nginx proxy_pass và viết lại
Tôi đã bỏ qua các cài đặt proxy cụ thể và thử nhiều thứ được đề xuất trên SO, nhưng không có trường hợp nào phù hợp với trường hợp sử dụng của tôi ... và vì tôi biết rất ít về cả hai nginx
và django
Tôi đang thua lỗ!
nginx.conf hiện tại của tôi là:
server {
listen 80;
server_name myserver.com
location ^~ /static {
alias /path/to/static/files/;
}
# location/{
# proxy_pass http://127.0.0.1:8001;
# }
location ^~ /customer1/myapp/static {
alias /path/to/static/files/;
}
location /customer1/myapp {
rewrite ^/customer1/myapp/(/?)(.*) /$2 break;
proxy_pass http://127.0.0.1:8001;
}
}
tôi có thể nhận được màn hình đăng nhập như mong đợi qua myserver.com/customer1/myapp/admin
. Tuy nhiên khi tôi cố gắng đăng nhập, nginx viết lại url của tôi tới myserver.com/admin
không phải là url hợp lệ. Làm cách nào để giữ nginx thực sự viết lại url và chỉ thay đổi url được chuyển đến 127.0.0.1:8001
?
FWIW, tôi đang sử dụng gunicorn để phục vụ với gunicorn -b 127.0.0.1:8001 -n myapp
. Nếu tôi bỏ ghi chú vị trí /
và xóa hai khối vị trí cuối cùng, ứng dụng sẽ hoạt động tuyệt vời.
Tôi sắp đặt cách tiếp cận này nếu có các giải pháp thay thế. Mục tiêu là để tránh sửa đổi mã django cho mỗi triển khai và thay vào đó chỉ cần thêm mã tối thiểu vào nginx.conf để triển khai mới.
Câu hỏi về việc triển khai có thể phù hợp hơn cho serverfault.com –
Tôi không hiểu, bạn chỉ đang cố gắng tạo url django ngược lại để tạo/customerX/myapp/admin/thay vì/admin /? – jpic
@jpic Không, tôi muốn django chỉ nhìn thấy url gốc. ví dụ. '127.0.0.1: 8001/admin'. Tôi cho rằng tôi có thể làm điều này với nginx, nhưng tôi không chắc chắn như thế nào. Và lưu ý về 'serverfault.com', tôi sẽ đăng ở đó nếu tôi không tìm ra bất cứ điều gì ở đây, cảm ơn. – Justin