通过子域访问站点时重写URI

时间:2016-02-04 17:10:49

标签: nginx

我有一个域名bar.org及其子域名foo.bar.org。在这两个域后面运行一个Django网站,可通过gunicorn访问。

bar.org的配置是经典的,如下所示:

server {
listen       80;
server_name  bar.org;
client_max_body_size 4G;

root   /home/bar/dev/bar/;

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_connect_timeout 10;
    proxy_read_timeout 60;
    proxy_pass http://127.0.0.1:8001/;
    proxy_set_header REMOTE_ADDR $remote_addr;

}
}

我的问题涉及子域名foo.bar.org。我希望foo.bar.org/XXX的每个请求都被重写到我的Django网站的/ foo / XXX,并且从foo.bar.org/foo/XXX重写到/ foo / XXX。我尝试了一些URL重写命令,但它没有用。有没有人做过类似的nginx配置?

1 个答案:

答案 0 :(得分:1)

一种可能的实现方式是:

server {
    ...
    server_name foo.bar.org;

    location / {
        rewrite ^ /foo$request_uri last;
    }

    location /foo/ {
        proxy_pass http://127.0.0.1:8001;
        ...
    }
}

foo.bar.org服务器块应该透明地代理/foo的请求。请注意,我们从/指令中删除了尾随proxy_pass,以防止重写URI。

location /块可确保重写未/foo的URI。