Nginx:301返回的简单try_files不会重定向

时间:2018-10-28 10:35:16

标签: nginx redirect

我想让Nginx在本地找不到资源时重定向到外部URL。这是我的配置:

server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html;

    location / {
       try_files $uri @redirect;
       if ($request_method = 'GET') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        }
    }

    location @redirect {
        return 301 https://myfallbacksite.net$request_uri;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

当我尝试访问不存在的资源时,我仅收到404,并且请求未重定向到后备网站。

我认为它以前有用,所以在某处可能有一个愚蠢的错字。 Nginx错误日志显示:

2018/10/28 10:22:35 [error] 9#9: *11 open() "/usr/share/nginx/html/picture.png" failed (2: No such file or directory), client: 172.19.0.1, server: localhost, request: "GET /picture.png HTTP/1.1", host: "myvhost", referrer: "https://www.originwebsite.com"

...是正确的(资源不存在),但我希望重定向请求,而不是发回404。

1 个答案:

答案 0 :(得分:0)

正如@ ben5556和@Richard Smith所暗示的,if语句在这里是有原因的。 Nginx文档实际上has a page建议尽可能不要使用它。当我移除if指令周围的add_header包裹时,一切再次正常运行。