【问题标题】:Nginx SSL redirect from internal locationNginx SSL 从内部位置重定向
【发布时间】:2019-03-01 18:04:49
【问题描述】:

我正在用 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 脚本(希望您能理解我),但它会在条件之间的某处进行下一次调用:

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?

【问题讨论】:

    标签: nginx lua openresty


    【解决方案1】:

    好的,答案是在ngx.exec 之前创建一个ngx.redirect(即在Lua 文件中)。 nginx.conf内部无需特殊处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多