Nginx x-accel重定向命名位置uri

时间:2016-12-12 16:30:10

标签: python nginx falcon x-accel-redirect

我使用nginx x-accel-redirect作为外部资源的身份验证前端。

在我的python代码中,我会执行以下操作:

/ getresource /

def view(self, req, resp): 
    name = get_name(req.user.id) # authenticates request.
    resp.set_header('X-Accel-Redirect', '/resource/%s/' %name ) 

这也将转发HTTP方法,直到nginx 1.10。 由于nginx 1.10所有x-accel-redirects都作为GET方法转发。

从这个帖子: https://forum.nginx.org/read.php?2,271372,271380#msg-271380

我知道转发HTTP方法的正确方法是使用命名位置。 我无法找到有关如何完成此操作的文档。 我尝试了以下方法:

def view(self, req, resp): 
    name = get_name(req.user.id) 
    resp.set_header('X-Accel-Redirect', '@resource' ) 

但是这会重定向到" @resource /"。

我想重定向到" @resource / name"。

我也在nginx论坛上问了这个问题: https://forum.nginx.org/read.php?2,271448

但还没有回复。

修改

为nginx发布配置

location /getresource {
   proxy_pass http://127.0.0.1:8000;
}

location /resource {
    internal;
    proxy_pass http://127.0.0.1:8888;
}

location @resource {
    internal;
    proxy_pass http://127.0.0.1:8888;
}

1 个答案:

答案 0 :(得分:2)

由于没有人在这里回答,我想在nginx论坛上发布答案以便完成。

https://forum.nginx.org/read.php?2,271448,271549#msg-271549

您好,

你在这做什么。因为你不能使用X-Accel-Redirect来设置不同的 location,你应该设置其他标题的位置和在nginx配置中 像这样的东西:

location @resources {
    set $stored_real_location $upstream_http_x_real_location;
    proxy_pass http://resources-backend$stored_real_location;
}

在上面的示例中,Python代码应设置以下标头:

X-Accel-Redirect: @resources
X-Real-Location: /some/other/path...