gpt4 book ai didi

nginx 维护页面有内容问题

转载 作者:行者123 更新时间:2023-12-02 18:21:47 25 4
gpt4 key购买 nike

为了在部署期间显示维护页面,我总是在 nginx 中使用下一个配置:

if (-f /home/shared/system/maintenance.html) {
return 503;
}

error_page 503 @maintenance;

location @maintenance {
root /home/shared/errors;
rewrite ^(.*)$ /maintenance.html break;
}

一切都很好,直到我需要向维护页面添加静态内容(图像、样式表等)

错误日志中没有静态内容可与此类日志一起使用:

2011/05/05 02:47:20 [notice] 13760#0: *6 "^(.*)$" matches "/some.jpg", client: x.x.x.x, server: server.com, request: "GET /some.jpg HTTP/1.1", host: "server.com"
2011/05/05 02:47:20 [notice] 13760#0: *6 rewritten data: "/maintenance.html", args: "", client: x.x.x.x, server: server.com, request: "GET /some.jpg 2 HTTP/1.1", host: "server.com"

这是合乎逻辑的 - 如果我将所有内容重写为maintenance.html,则意味着不排除静态内容。

但是我找不到任何正确的解决方案来重定向到每个文件,除了物理上存在于 root/home/shared/errors 文件夹中的文件。

PS。 /home/shared/errors 不与公共(public)项目文件夹共享任何资源 - 这是完全独立的文件夹(即使项目没有任何指向 /current 的符号链接(symbolic link)。

最佳答案

抱歉,弗兰克·法默,但这行不通。

什么有效但不那么简洁:

以及请求如何工作 ->

  1. 我使用规则#1

    if (-f /home/shared/system/maintenance.html) {
    return 503;
    }

    此规则支持命名位置 location @maintenance 以及常见重定向到 /maintenance.html 位于 root/home/shared/errors 一切正常。

  2. 此页面包含图像 some.jpg - 为了接收此图像,浏览器启动新请求,并且此新请求再次符合规则 #1

    所有这些都在最初的问题中进行了描述,但是

    如果我使用像 Frank Farmer 的答案中那样的 if 魔法,我可以将服务器指向请求的文件,但 HTTP 答案将是 503,并且浏览器(在我的测试中,除了 Safari 之外的所有浏览器)都会在调试中抛出错误控制台并显示图像,但在相同情况下不处理 CSS 文件。

    这一点至关重要。

  3. 我尝试使用位置魔法来解决我的新内容请求 - 这意味着我必须:

    1. 请勿针对内容请求返回 503,并完全跳过指定位置。

    2. 请更改root/home/shared/errors,因为维护内容仍然存在。

  4. 最后,我有了下一个解决方案:

    1. 为所有静态内容创建 maintenance-static 文件夹,并更改 maintenance.html 文件和维护静态样式表中的路径

    2. 接下来使用这些规则(我相信它们是 self 描述的)来替换初始问题中的单个 if (-f/home/shared/system/maintenance.html):

      set $can503 0;
      if (-f /home/shared/system/maintenance.html) {
      set $can503 1;
      }
      if ($uri ~* /maintenance-static/) {
      set $can503 0;
      }
      location /maintenance-static/ {
      root /home/shared/errors;
      }
      if ($can503 = 1) {
      return 503;
      }

此解决方案在所有浏览器中以及 shared/errors 文件夹中的许多页面中都可以正常工作,例如。 Maintenance.html、error.html、overload.html 等

这个解决方案并不是很清楚 - 也许你可以暗示我如何让它变得更整洁,但请记住我们正在处理单独的请求(以及在高负载等情况下为每个文件/请求单独的 nginx 进程)初始 html 及其内容我们不能对所有文件使用相同的 503 重定向规则。

关于nginx 维护页面有内容问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com