我正在尝试在一个域名下配置两个单独的Django项目作为子目录, 所以我可以将项目1打开为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
}
此配置有效,如上所述,我可以将其打开,这里的问题是静态的,媒体位置不起作用,是否有任何解决方法可以使其正常工作,请您指导我以实现它。这将对我非常有帮助。预先感谢。
答案 0 :(得分:0)
为我的问题找到了解决方案
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>' %}
project1 settings.py
STATIC_URL = '/project1/static/'
MEDIA_URL = '/project1/media/'
FORCE_SCRIPT_NAME = '/project1/'
project2 settings.py
STATIC_URL = '/project2/static/'
MEDIA_URL = '/project2/media/'
FORCE_SCRIPT_NAME = '/project2/'
这对我有用,所以现在我可以在一个域名下将两个或多个不同的Django项目配置为子目录。希望能对某人有所帮助...谢谢