繁体   English   中英

如何在nginx中提供静态文件而又不影响我的gunicorn / django服务器?

[英]How to serve static files in nginx without hitting my gunicorn/django server?

通过遵循本指南的第一部分和第二部分,我已经设置了nginx / gunicorn / django,并且工作正常。 现在,我尝试做的是包含自己的静态文件,这些文件是通过构建VueJS项目创建的。 现在,我的静态文件夹包含一个admin文件夹(按照指南第二部分的步骤自动放置在此处)和一个登录文件夹。 我的文件结构如下所示:

- myproject
    - myproject
        - __pycache__
        - __init.py__
        - settings.py
        - urls.py
        - wsgi.py
    - static
        - admin
            - css
            - fonts
            - img
            - js
        - login
            - index.html
            - static
                - css
                - img
                - js
    -db.sqlite3
    - manage.py

我的nginx配置文件的最新迭代如下所示:

server {
    listen 8000;
    server_name 0.0.0.0;

    rewrite_log on;
    error_log /home/vagrant/debug.log debug;

    root /sync/genetesis/github/cardioflux-webapp/myproject;

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

    location /static {
        alias /sync/genetesis/github/cardioflux-webapp/myproject/static;
        autoindex on;
    }

    location / {
        include proxy_params;
        proxy_pass http://0.0.0.0:8030;
    }
}

这些是我输入各种URL的结果:-当我输入http://0.0.0.0:8000时 ,我看到了Django“恭喜!”。 页面与火箭飞船。 -当我点击http://0.0.0.0:8000/admin时 ,我会看到admin页面,其中包含所有样式。 -当我点击http://0.0.0.0:8000/login时 ,我得到一个Django 404页面,其中说:

Using the URLconf defined in myproject.urls, Django tried these URL patterns, in this order:
    1. admin/
The current path, login, didn't match any of these.

据我了解,nginx仅应在无法找到与请求相关的静态文件的情况下才将请求传递给gunicorn / django,但事实并非如此。 看起来像在管理请求上,它仍在传递给Django,在登录请求上,它找不到我的文件,因此正在Django应用程序中尝试作为GET进行操作。

在这一点上,我已经阅读了太多的指南,教程等,以致于我对如何做一无所知。 我希望应用程序在我单击0.0.0.0:8000/login时提供“ login”文件夹中的静态文件,即index.html文件和相关的CSS / js。 我真的不需要管理部分才能工作,但这就是我可以工作的全部。 当没有index.html时,我也不太了解admin的工作方式; 它一定是从Django得到的,但这完全颠覆了我的想法(如果可能的话,只能从nginx获取静态文件,否​​则其他请求将发送至gunicorn / Django)。

谁能向我解释如何实现这一目标,或向我指出可以解释这一点的资源? 如果需要更多信息,请告诉我

您误解了该教程的内容。 您已将nginx配置为通过URL“ yourwebsite.com/static/”提供文件。 所有其他路径(从“ /”开始,即所有路径)都将直接路由到Django,因为这就是您告诉nginx要做的 如果显示“如果用户正在访问静态文件”,则表示“如果用户正在/ static /下访问URL”。

现在,您可能可以将nginx配置为首先使用try_files指令在“ /”下查找静态文件。 但这将是错误的事情。 您不希望您的登录页面是静态HTML页面。 Django应该处理您的整个网站。

例如,您可能希望登录页面看起来像站点的其余部分,这很可能涉及菜单和侧栏之类的东西,这些东西是通过Django从数据库中动态生成的。 而且,您将要确保已经登录的用户不会进入登录页面-Django处理该逻辑。 而且,如果用户输入错误的用户名/密码组合,您将希望在登录表单本身上显示这些错误-同样,这将由Django完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM