Nginx: простые файлы try_file с возвратом 301 не перенаправляют - PullRequest
0 голосов
/ 28 октября 2018

Я бы хотел, чтобы 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 голосов
/ 01 ноября 2018

Как намекнули @ ben5556 и @Richard Smith, здесь высказывается утверждение if.На самом деле в документации Nginx есть страница , в которой рекомендуется не использовать ее, если это возможно.Когда я удалил оболочку if вокруг add_header инструкций, все снова заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...