环境:
我正在使用带有Django和nginx的域www.example.com
,我想通过 www.example.com/abc/
访问Django,但我不知道如何设置的子目录
这是nginx conf文件:
server {
listen 80;
server_name www.example.com;
error_log /var/log/nginx/xxx.error_log info;
root /home/web/abc; # this is the directory of the django program
location ~* ^.+\.(jpg|jpeg|png|gif|css|js|ico){
root /home/web/abc;
access_log off;
expires 1h;
}
location ~ /abc/ { # I want to bind the django program to the domian's subdirectory
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
}
}
当我打开网站www.example.com/abc/
时,django urls.py
不匹配,只会匹配^index$
等网站。
如何修改nginx位置以将django设置为www.example.com/abc
?
答案 0 :(得分:6)
根据uWSGI on Nginx文档,您只需将SCRIPT_NAME
传递给django。
location /abc {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
uwsgi_param SCRIPT_NAME /abc;
}
Django仍会"看到" /abc
,但它应该处理它,以便在您的网址匹配之前将其删除。您希望这种情况发生,如果django没有看到/abc
,它会为您的网站生成不正确的网址,并且您的链接都不起作用。
答案 1 :(得分:0)
现在,在最新版本的Nginx和uWSGI中uwsgi_modifier1 30
被删除,我不得不使用更新的方法来实现它:
uWSGI config:
[uwsgi]
route-run = fixpathinfo:
Nginx配置:
location /abc {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9000;
uwsgi_param SCRIPT_NAME /abc; # Pass the URL prefix to uWSGI so the "fixpathinfo:" route-rule can strip it out
}
如果它修复了它:尝试安装libpcre和libpcre-dev,然后用pip install -I --no-cache-dir uwsgi
重新安装uwsgi。 uWSGI的内部路由子系统要求在编译/安装uWSGI之前安装 PCRE库。 More information on uWSGI and PCRE.