Nginx
Flask 應用程序的根位置在 nginx 伺服器上返回 403
我看過其他文章說文件權限或缺少索引指令是原因。但是,我的 Flask 應用程序根本沒有索引文件,而且大多數網站的工作方式都像一個魅力。
nginx.conf
server { listen 80; server_name localhost; charset utf-8; client_max_body_size 5M; root /srv/www/cc/app; location / { try_files $uri $uri/ @cc; } location /uploads/ { # root /srv/www/cc/app; expires max; } location /static/ { # root /srv/www/cc/app; expires max; } location @cc { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; } }
來自views.py的片段
@app.route('/', methods = ['GET']) def client(): return render_template("/client/index.html") #-----------------CLIENT ABOVE, ADMIN BELOW------------------# @app.route('/admin/', methods = ['GET']) @login_required def admin(): submissions = Campaign.query.all() return render_template("admin.html", title = 'Admin', submissions = submissions)
所以我基本上只有一個views.py,裡面有很多路線。所有的 /admin/ 都像魅力一樣工作,但只是 / 的卻沒有。
正如我所說,我沒有索引。我嘗試將 nginx.conf 中的 index 指令設置為“app”,因為這就是魔法發生的地方……但沒有骰子。
這是我的文件結構:
/cc/ app/ __init__.py views.py etc uploads/ static/ config.py
從 nginx 日誌:
“/srv/www/cc/app/”的目錄索引被禁止
我在網上從其他人那裡發現了類似的問題,並且我已經驗證了 nginx 使用使用者 www-data 執行,並且這個使用是目錄的所有者。
所以顯然我沒有完全理解 try_files 是如何工作的。
在閱讀它之後,它沒有找到任何不是“/”但它與“/”匹配的請求的匹配項,並試圖列出目錄。一旦我將 error_page 403 = @cc 添加到根位置塊中,它就會正確重定向到我的 cc 位置並顯示首頁。