Debian
無論訪問什麼 url,Django 應用程序都會顯示相同的頁面
我有一個簡單的 Django 應用程序,我用它來測試使用 Nginx、FastCGI(在撰寫本文時使用最新版本的 Flup)和 daemontools 的新部署策略。
基本上問題是如果我訪問 domain.com 首頁顯示正確,但如果我訪問 domain.com/example/ 它仍然顯示首頁。這對我來說似乎是 FastCGI 的一個問題,但我完全被難住了。無論我訪問哪個頁面,它總是顯示首頁。沒有錯誤,什麼都沒有。就像它總是默默地返回相同的頁面,無論 url 是什麼。
nginx 錯誤日誌中完全沒有顯示任何內容,因此無濟於事。該項目使用開發伺服器 100% 完美執行,但在伺服器上失敗。
我的 daemontools 執行文件如下:
#!/usr/bin/env bash source /envs/domain.com/bin/activate PROJ_DIR=/project exec envuidgid simon python $PROJ_DIR/manage.py \ runfcgi method=threaded minspare=1 maxspare=2 host=127.0.0.1 \ port=9001 pidfile=$PROJ_DIR/proj.pid daemonize=false
我的 nginx 配置:
server { listen 80; server_name domain.com; rewrite ^/(.*) http://www.domain.com/$1 permanent; } server { listen 80; server_name www.domain.com; access_log /domain.com/logs/access.log; error_log /domain.com/logs/error.log; root /domain.com/public_html; index index.html; location / { try_files $uri @django; } location /static { alias /project/static; } location /media { alias /project/media; } location @django { include /opt/nginx/conf/fastcgi_params; fastcgi_pass 127.0.0.1:9001; fastcgi_pass_header Authorization; fastcgi_intercept_errors off; } }
任何幫助將不勝感激:)。
你有
fastcgi_params
什麼?你應該有類似的東西:fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param PATH_INFO $fastcgi_script_name;
還設置在
settings.py
:FORCE_SCRIPT_NAME = ''
這是一種方法。您也可以保留
FORCE_SCRIPT_NAME
預設設置並通過 nginx 配置所有內容。