13

我希望 nginx 首先在我的本地主机上搜索该文件,并在出现 404 错误时搜索服务器 1.1.1.1。

我能够获取位于本地主机上的文件,但无法从服务器 1.1.1.1 获取。

server {
    listen 80;
    server_name  localhost;

    access_log /var/log/nginx/access.log main;

    location /products/ {
        proxy_next_upstream http_404;

        root /var/foo;
    }
}

server {
    listen 80;
    server_name  1.1.1.1;
    location /products/ {
        #########
    }
}

我猜 proxy_next_upstream 没有切换到服务器。

对此的任何帮助将不胜感激。

4

1 回答 1

41

proxy_next_upstream指令是一个配置指令,用于控制来自一组上游服务器的重新请求,proxy_pass如果对其中一个服务器的请求失败。没有定义块是没有意义proxy_passupstream。如果您像这样代理到多个上游服务器,则可以使用它:

upstream backends {
    server 192.2.0.1;
    server 192.2.0.2;
    ...
}

server {
    ...

    location / {
        proxy_pass http://backends;
        proxy_next_upstream error timeout http_404;
    }
}

如果您希望 nginx 在磁盘上搜索文件,并且如果找不到 - 代理请求到另一台服务器,请配置它,例如使用try_files回退代替:

location / {
    root /path/to/root;
    try_files $uri @fallback;
}

location @fallback {
    proxy_pass http://...
}

有关该指令的更多信息,请参阅http://nginx.org/r/try_files 。try_files

于 2012-10-14T00:36:01.523 回答