Nginx x-accel 重定向命名位置 uri
Nginx x-accel redirect named location uri
我使用 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;
}
既然这里没有人回答,我想postnginx论坛的回答补全
https://forum.nginx.org/read.php?2,271448,271549#msg-271549
嗨,
这是您的工作。因为你不能使用 X-Accel-Redirect 来设置不同的
位置,你应该用位置设置其他 header 并在 nginx 配置中做
像这样:
location @resources {
set $stored_real_location $upstream_http_x_real_location;
proxy_pass http://resources-backend$stored_real_location;
}
在上面的示例中 Python 代码应设置以下 headers:
X-Accel-Redirect: @resources
X-Real-Location: /some/other/path...
我使用 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;
}
既然这里没有人回答,我想postnginx论坛的回答补全
https://forum.nginx.org/read.php?2,271448,271549#msg-271549
嗨,
这是您的工作。因为你不能使用 X-Accel-Redirect 来设置不同的 位置,你应该用位置设置其他 header 并在 nginx 配置中做 像这样:
location @resources {
set $stored_real_location $upstream_http_x_real_location;
proxy_pass http://resources-backend$stored_real_location;
}
在上面的示例中 Python 代码应设置以下 headers:
X-Accel-Redirect: @resources
X-Real-Location: /some/other/path...