在 nginx 而不是上游服务器上处理 404

在 nginx 而不是上游服务器上处理 404

为了提高性能,我们希望允许 nginx 在将 404 错误传递给上游 apache 服务器之前捕获它。两个服务器都有相同的文件。

更多信息

我们有一个流行的设置,即在 nginx 上提供静态内容,并使用 apache 上游提供动态内容。我们目前将 php 和静态文件从上游 apache 节点同步到 nginx 节点。相同的文件位于两个层上。我们只是从 nginx 提供静态文件。

目前,所有非静态请求都会向上游发送到 Apache 服务器(如先前所预期的那样)。但是,我意识到 nginx 应该能够在决定将 .php 文件传递​​到上游之前检查该文件是否存在。这意味着可以更有效地处理请求。

我一直在尝试使用 try_files 组合,然后最终使用 if 块来寻找解决方案,但尚未成功。请提供意见。

谢谢!

答案1

有一个非常简单的解决方案:

server {
    listen      0.0.0.0;
    server_name fooo.org;
    access_log  /var/log/nginx/access.log main;

    root /var/www/fooo.org;

    location / {
        # If the file exists as a static file serve it directly without
        # running all the other rewite tests on it
        if (-f $request_filename) { 
            break; 
        }

        proxy_pass http://127.0.0.1:8080;
    }
}

如果有帮助请+1;)谢谢

相关内容