Nginx местоположение / переопределяет все другие местоположения - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь написать простой nginx конфиг. Что мне нужно:

  1. , если файл существует в root, обслуживать этот файл
  2. Если url равен / default / url, то показать /some/path2/index.html
  3. В противном случае перенаправить на / default / url

моя конфигурация выглядит следующим образом

    server {
    listen 127.0.0.1:80;
    server_name my.domain.com;

    root /some/path/html;

    location / {
            return 302 /default/url; 
    }

    location = /default/url {
            rewrite ^/(.*)$/some/path2/index.html;
    }

    location /default/e_schema {
            proxy_pass http://other.host.com;
            proxy_http_version 1.1;
            proxy_set_header Host $http_host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
    }
}

Он перенаправляет на / default / url мгновенно независимо URL Я пытался поместить блок location / внизу и сверху. Я пытался использовать location ~ /.* для снижения приоритета, но ничего не помогает. Если я удаляю location / , то все в порядке, мои требования 2 и 3 в порядке.

Согласно этому ответу https://serverfault.com/questions/656628/nginx-catch-all-other-locations-than-given/656634 это должно работать.

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Проблема была здесь

location = /default/url {
        rewrite ^/(.*)$/some/path2/index.html;
}

это делает внутреннее перенаправление на / some / path2 / index. html, который находится в / path, поэтому он вызывает местоположение / блок, который перенаправляет на / default / url и т. Д.

Мое решение состояло в том, чтобы создать пустой блок, чтобы исключить путь из location /

location /some/path2/index.html {}
0 голосов
/ 17 января 2020

Вы поставили "=" в блоке местоположения

location = /default/url {

Не могли бы вы попытаться удалить это? Я считаю, что это может быть установка URL

...