django - Django 一个域下的两个独立项目作为子目录
问题描述
我正在尝试将一个域名下的两个单独的 Django 项目配置为子目录,因此我可以将 project1 打开为https://mycompany.example.com/project1并将项目 2 打开为https://mycompany.example.com/project2
这是我的 Nginx 配置
server {
server_name mycompany.example.com;
location ~/project1/static {
alias /home/username/project1/static;
}
location ~/project1/media {
alias /home/username/project1/media;
}
location /project1/ {
rewrite ^/project1/(.*)$ /$1 break;
proxy_set_header X-Script-Name /project1;
proxy_pass http://unix:/run/project1.sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
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-Host $server_name;
}
location ~/project2/static {
alias /home/username/project2/static;
}
location ~/project2/media {
alias /home/username/project2/media;
}
location /project2/ {
rewrite ^/project2/(.*)$ /$1 break;
proxy_set_header X-Script-Name /project2;
proxy_pass http://unix:/run/project2.sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
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-Host $server_name;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mycompany.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mycompany.example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
这个配置有效,我可以像上面提到的那样打开它,这里的问题是静态的,媒体位置不起作用,是否有任何解决方法使它起作用,我请求你指导我实现它。这对我很有帮助。提前致谢。
解决方案
找到我的问题的解决方案
Nginx 配置
server {
server_name mycompany.example.com;
location /project1/static {
alias /home/username/project1/static;
}
location /project1/media {
alias /home/username/project1/media;
}
location /project1/ {
rewrite ^/project1/(.*)$ /$1 break;
proxy_set_header X-Script-Name /project1;
proxy_pass http://unix:/run/project1.sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
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-Host $server_name;
}
location /project2/static {
alias /home/username/project2/static;
}
location /project2/media {
alias /home/username/project2/media;
}
location /project2/ {
rewrite ^/project2/(.*)$ /$1 break;
proxy_set_header X-Script-Name /project2;
proxy_pass http://unix:/run/project2.sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
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-Host $server_name;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mycompany.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mycompany.example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
在Django中,完整的url必须是{% url '<URL>' %}
,静态url必须是{% static '<path>' %}
项目1设置.py
STATIC_URL = '/project1/static/'
MEDIA_URL = '/project1/media/'
FORCE_SCRIPT_NAME = '/project1/'
项目2设置.py
STATIC_URL = '/project2/static/'
MEDIA_URL = '/project2/media/'
FORCE_SCRIPT_NAME = '/project2/'
这对我有用,所以现在我可以在一个域名下配置两个或多个不同的 Django 项目作为子目录。希望它会帮助某人...谢谢
推荐阅读
- html - Flexbox 内边框和负边距
- opengl - 如何返回采样像素的掩码
- java - 如何使用 Java 中的 InputStream 从目录中获取文件名
- r - 跨组比较样本对的所有迭代(来自未配对的数据)
- python - 如何将熊猫数据透视表显示为seaborn barplot?
- python - 有没有办法避免这种重复的代码?
- python - 为什么我需要一个字典数据类型用于 TensorFlow 中的输入数据
- android - 在android studio中运行时随机应用图像
- node.js - 更新子文档中的数组 - mongoose mongodb
- loopbackjs - Loopback 4:通过 POST 方法上传 multipart/form-data