3

环境:

  • uwsgi
  • nginx
  • django 1.3

我正在使用www.example.com带有 Django 和 nginx 的域,我想通过 访问 Django www.example.com/abc/,但我不知道如何设置子目录

这是 nginx 配置文件:

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/时,djangourls.py不匹配,它只匹配^index$.

如何修改 nginx 位置以将 django 设置为www.example.com/abc

4

2 回答 2

8

根据Nginx 文档上的 uWSGI,您只需将 django 传递SCRIPT_NAME给 django。

location /abc {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_param SCRIPT_NAME /abc;            
}

Django 仍然会“看到” /abc,但它应该处理它,以便在您的 url 匹配之前将其剥离。您希望这种情况发生,如果 django 没有看到/abc,它会为您的网站生成不正确的 url,并且您的任何链接都不起作用。

于 2012-11-08T06:11:25.200 回答
2

现在在最新版本的 Nginx 和 uWSGIuwsgi_modifier1 30删除了它,我不得不使用更新的方法来让它工作:

uWSGI 配置:

[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之前安装 PCRE 库。有关 uWSGI 和 PCRE 的更多信息。

于 2018-05-29T15:41:12.800 回答