簡體   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