如何在维护模式下使用Nginx提供静态资产(503)

时间:2014-07-02 14:20:39

标签: nginx

我在我的网站服务器上使用Nginx作为前端代理。 我希望用它在用户现场时将用户重定向到我的网络应用程序,或者当我处于维护模式时将其重定向到维护php页面。

这是我的服务器指令:

server {
    listen               443;

    return 503;
    error_page           503 @maintenance;
    root                /usr/maintenance;
    location @maintenance {
        fastcgi_pass     php-fpm;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include          /etc/nginx/fastcgi_params;
    }

    location / {
        proxy_pass       https://webapp;
    }
}

如果我取消注释return 503,则会向客户端发送503响应,否则会发送该网络应用。

我的PHP 503错误页面按预期显示,但问题是它有静态资源(css,images,js),当Chrome尝试加载它时,我得到503返回代码。资产位于根目录中。

我该如何解决这个问题? 有没有比评论/取消注释return 503更好的方法来处理维护和实时模式?

谢谢

1 个答案:

答案 0 :(得分:2)

经过一番研究,我发现了一种优雅的方式。 资料来源:http://blog.mythictechnologies.com/2011/02/10/setting-a-maintenance-page-with-nginx/

所以这是我的新配置

server {
    listen               443;

    error_page           503 @maintenance;
    root                /usr/maintenance;
    location @maintenance {
        fastcgi_pass     php-fpm;
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include          /etc/nginx/fastcgi_params;
    }

    location ~* \.(css|png|js|jpg|jpeg) {
        # The file will be returned
    }

    location / {
        return           503;
        proxy_pass       https://webapp;
    }
}

您可以根据需要随意调整正则表达式\.(css|png|js|jpg|jpeg),但白名单文件似乎是个好主意。