使用nginx将`example.com / foo / bar`重写为`foo.example.com / bar`。重定向循环

时间:2016-01-24 19:23:19

标签: django nginx gunicorn

我有一个django应用程序,用于在iframe中提供一些用户内容。为了避免会话劫持,我想从不同的子域提供服务。

我目前在RecyclerView托管的网站上的特定iframe内容位于subdomain.example.com。我现在正尝试设置nginx,以便通过subdomain.example.com/foo/bar/ID访问特定内容。

我的nginx设置:

foo.example.com/bar/ID

这在nginx server { listen 80; server_name subdomain.example.com; location / { include proxy_params; #Served with gunicorn: proxy_pass http://unix:/home/example/example.sock; } } server { listen 80; server_name foo.example.com; location / { include proxy_params; #This is key: rewrite ^/(.*?) /foo$request_uri last; #Served with gunicorn: proxy_pass http://unix:/home/example/example.sock; } } 中给出了以下错误:

  

2016/01/24 14:10:41 [错误] 24286#0:* 17处理“/ foo / bar / 66”时重写或内部重定向循环,客户端:xx.xx.xx.xx,服务器: foo.example.com,请求:“GET / bar / 66 HTTP / 1.1”,主持人:“foo.example.com”

哪个有意义;重定向正在反复重定向,因为它与重写正则表达式匹配。

我尝试添加

error.log

无济于事。

如果没有重定向,它会正确托管,但我想避免将网址设为proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off;

有没有不同的方法来解决这个问题会更好?还是一种阻止重定向的方法?

PS:奖金问题?接下来会阻止subdomain.example.com/foo/bar,从而强制通过foo.example.com/bar进行访问

编辑:我通过放弃重写并使用foo.example.com/foo/bar/ID django-subdomainshttps://django-subdomains.readthedocs.org

处理django中的子域来解决了这个问题

1 个答案:

答案 0 :(得分:1)

这可能是您的奖金问题的解决方案(即如何阻止/ foo / bar来自www.example.com): https://stackoverflow.com/a/4677893/2319697

如果模式/位置匹配,基本上只返回404