使用nginx在localhost后面的子域后面的django

时间:2014-08-18 19:50:01

标签: python django nginx localhost subdomain

我有一个django项目,我希望根据所访问的子域显示不同的内容,例如,当用户输入url时:http://e1.example.com/它显示«欢迎来到e1站点»< / b>,当用户输入:http://e2.example.com时,会显示«欢迎使用e2网站»等等。

所以我有这个nginx配置:

upstream example_project{
    server localhost:8200;
}

server {
    listen  80;
    server_name ~^(?<event>.+)\.example\.com;

    location / {
        proxy_pass http://example_project/$event$request_uri;
    }
}

我的/etc/hosts文件如下:

127.0.0.1   example.com
127.0.0.1   e1.example.com
127.0.0.1   e2.example.com

当我转到http://localhost:8200/e1/时,它有效,但当我转到http://e1.example.com/时,它显示 400错误

在django控制台输出上我有:

[18/Aug/2014 14:33:31] "GET /e1/ HTTP/1.1" 200 39 <-- this when going localhost:8200/e1/
[18/Aug/2014 14:33:33] "GET /e1/ HTTP/1.0" 400 26 <-- this when going e1.example.com

所以我可以看到e1.example.com正在调用我的项目正确的网址,但为什么浏览器会向我显示400错误?

1 个答案:

答案 0 :(得分:0)

好的,我意识到我必须为nginx添加更多代理参数,现在我的nginx配置为:

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_pass http://example_project/$event$request_uri;
}

结束everythnig工作就像期望的那样。 也许这可以帮助任何打算做类似事情的人。 :)