Nginx

Flask 應用程序的根位置在 nginx 伺服器上返回 403

  • August 21, 2015

我看過其他文章說文件權限或缺少索引指令是原因。但是,我的 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 位置並顯示首頁。

引用自:https://serverfault.com/questions/715412