Nginx SSL 从内部位置重定向
Nginx SSL redirect from internal location
我正在用 nginx 做一些非常讨厌的事情。这是鸟瞰图。
nginx 扮演着无数 S3 存储桶之间的代理角色。为了确定正确的桶,我在 OpenResty 平台上使用 Lua 脚本。
因此,首先请求进入 /
位置并由 Lua 脚本处理。
location / {
listen 8001;
server_name $hostname;
access_by_lua_file '/srv/hostingrouter/live/hostingrouter/storerouter.lua';
proxy_pass http://$remote;
}
location ~ /s3/(?<s3_key>.+) {
internal;
proxy_pass $s3;
rewrite .* /$s3_key break;
}
由于 NDA,我无法向您展示完整的 Lua 脚本(希望您 killaz 理解我),但它会在条件之间的某处进行下一次调用:
return ngx.exec(
'/s3/' .. s3_key
)
棘手的部分是 Lua 脚本也做一些其他的重定向。但只有在上面显示的特定情况下,我才需要将 URL 从 HTTP 重写为 HTTPS。
我相信rewrite http:// https:// break;
不会工作,因为匹配的路径没有方案(我也试过但没有工作)。此外,我尝试进行条件重定向:
if ($scheme = http) {
return 301 https://$host$request_uri;
}
但它导致了循环重定向。
如何从内部位置从 HTTP 重定向到 HTTPS?
好的,答案是在 ngx.exec
之前创建一个 ngx.redirect
(即在 Lua 文件中)。 nginx.conf
内部无需特殊处理。
我正在用 nginx 做一些非常讨厌的事情。这是鸟瞰图。
nginx 扮演着无数 S3 存储桶之间的代理角色。为了确定正确的桶,我在 OpenResty 平台上使用 Lua 脚本。
因此,首先请求进入 /
位置并由 Lua 脚本处理。
location / {
listen 8001;
server_name $hostname;
access_by_lua_file '/srv/hostingrouter/live/hostingrouter/storerouter.lua';
proxy_pass http://$remote;
}
location ~ /s3/(?<s3_key>.+) {
internal;
proxy_pass $s3;
rewrite .* /$s3_key break;
}
由于 NDA,我无法向您展示完整的 Lua 脚本(希望您 killaz 理解我),但它会在条件之间的某处进行下一次调用:
return ngx.exec(
'/s3/' .. s3_key
)
棘手的部分是 Lua 脚本也做一些其他的重定向。但只有在上面显示的特定情况下,我才需要将 URL 从 HTTP 重写为 HTTPS。
我相信rewrite http:// https:// break;
不会工作,因为匹配的路径没有方案(我也试过但没有工作)。此外,我尝试进行条件重定向:
if ($scheme = http) {
return 301 https://$host$request_uri;
}
但它导致了循环重定向。
如何从内部位置从 HTTP 重定向到 HTTPS?
好的,答案是在 ngx.exec
之前创建一个 ngx.redirect
(即在 Lua 文件中)。 nginx.conf
内部无需特殊处理。