如何设置子目录nginx的和Django(How do I set subdirectory in

2019-08-02 11:38发布

环境:

  • uwsgi
  • nginx的
  • Django的1.3

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

这是nginx的的c​​onf文件:

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

Answer 1:

按照uWSGI上Nginx的文档,你只需要通过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 ,它会为您的网站的网址不正确,没有您的链接会工作。



Answer 2:

现在uwsgi_modifier1 30中的Nginx和uWSGI的最新版本被删除 ,我不得不用新的方法来得到它的工作:

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的,然后再重新安装uwsgi与pip install -I --no-cache-dir uwsgi 。 uWSGI的内部路由子系统需要之前 uWSGI编译/安装要安装的PCRE库。 在uWSGI和PCRE的更多信息。



文章来源: How do I set subdirectory in nginx with Django