如何将新的 django 应用程序添加到已部署的 django 项目(使用 nginx、gunicorn)?

Posted

技术标签:

【中文标题】如何将新的 django 应用程序添加到已部署的 django 项目(使用 nginx、gunicorn)?【英文标题】:how to add new django app to deployed django project (using nginx,gunicorn)? 【发布时间】:2019-04-20 14:49:36 【问题描述】:

在本地运行 django 项目时,我可以访问我的 home、admin、app1、app2 目录(即 localhost:portnum , localhost:portnum/admin , localhost:portnum/app1 , localhost:portnum/app2)

当我在服务器中部署应用程序时问题就开始了(我在guide 的帮助下使用 nginx 和 gunicorn 进行 django 部署)

问题:- 我无法访问 example.com/admin、example.com/app1、example.com/app2。 无论如何,我都可以访问我的主页 example.com。

当我尝试访问 example.com/app1/ 页面时出现错误 403 禁止

2018/11/17 18:00:55 [error] 28459#28459: *8 directory index of "/home/ubuntu/project/app/" is forbidden, client: 172.68.146.88, server: example.com, request: "GET /events/ HTTP/1.1", host: "www.example.com"
2018/11/17 18:00:58 [error] 28459#28459: *13 open() "/usr/share/nginx/html/app" failed (2: No such file or directory), client: 172.68.146.10, server: example.com, request: "GET /events HTTP/1.1", host: "www.example.com"

我在这个问题之前尝试遵循的一些解决方案::-

Django: when trying domain.com/admin gives 404 with an old unexisting urls file

Nginx 403 error: directory index of [folder] is forbidden

我的 nginx 配置

server        
    listen 80;
    listen     443;

    ssl        on;
    ssl_certificate         /home/ubuntu/certs/cert.pem;
    ssl_certificate_key     /home/ubuntu/certs/cert.key;    
    server_name example.com;

    location = /favicon.ico 
        access_log off;
        log_not_found off;
     

    location = /static/ 
        root /home/ubuntu/example_project/app1;    
    

    location = / 
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/example_project/exampl_project.sock;
    

感谢您尝试解决我的问题。

【问题讨论】:

你需要显示你的nginx配置。 @DanielRoseman 用我的 nginx 配置更新了我的问题 【参考方案1】:

当您在位置指令中使用= 时,它仅适用于该确切路径。相反,您应该删除两个位置的那些,并让 nginx 匹配所有前缀。

 location /static/ 
   root /home/ubuntu/example_project/app1;    
 

 location / 
   include proxy_params;
   proxy_pass http://unix:/home/ubuntu/example_project/exampl_project.sock;
 

【讨论】:

谢谢 现在我成功获得了对 example.com/admin 的访问权限。但是我的应用程序仍然被禁止(即 example.com/app1 产生禁止错误)。

以上是关于如何将新的 django 应用程序添加到已部署的 django 项目(使用 nginx、gunicorn)?的主要内容,如果未能解决你的问题,请参考以下文章

将新线程注册到已定义的屏障

如何将新的支付网关与 django-payments 集成?

SIC / XE我可以将新值添加到已具有其自身值的值吗?

如何将新的 Lambda 函数部署到现有 Rest Api 的 Stage?

如何将节点添加到 mnesia 集群?

如何使用 jQuery 将新的 HTML 添加到顶部?