Nginx:将子域重新路由到 Django

Nginx: Reroute Subdomains to Django

如何在 Nginx 中捕获子域 内部 并将其重新路由到 Django 的 URL 调度程序?

api.project.org/ -> /api/
www.project.org/ -> /www/
project.org/ -> /www/

我想得到这样的东西:

location api.project.org/ {
    uwsgi_pass 127.0.0.1:8080/api/;
}    

最终用户仍然应该看到那些子域,而不是像服务器 return 301project.org/www/.

这样的位置

您必须为每个子域编写一个 nginx 服务器配置

server {
    server_name api.project.org;

    location / {
        rewrite ^/api/(.*)$ /api/ break;
        rewrite ^(.*)$ /api break;
        uwsgi_pass  127.0.0.1:8080;
        include     uwsgi_params;
    }
}

第二次重写将 /api/ 添加到每个 urls 并将其传递给 uwsgi 脚本。

第一次重写是为了让 django 重定向工作。因为当你 return HttpResponseRedirect 你的 URL 时 django 不知道你的系统配置是这样的:

http://api.project.org/api/subdomain

因此我们必须防止在达到此类请求时将 api 添加到 url 的开头。