如何在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/;
}
最终用户仍然应该看到这些子域,这与服务器是否返回301
和位置如project.org/www/
无关。
对于每个子域,您必须编写一个nginx服务器配置
server {
server_name api.project.org;
location / {
rewrite ^/api/(.*)$ /api/$1 break;
rewrite ^(.*)$ /api$1 break;
uwsgi_pass 127.0.0.1:8080;
include uwsgi_params;
}
}
第二个重写前缀/ api /到每个URL,并将其传递给uwsgi脚本。
第一次重写是为了使Django重定向正常工作。因为当您返回HttpResponseRedirect时django不了解您的系统配置,因此您的URL如下所示:
http://api.project.org/api/subdomain
所以当达到这种类型的请求时,我们必须防止将api添加到url的开头。