Местоположение nginx совпадает несколько раз - PullRequest
0 голосов
/ 23 декабря 2018

Мой nginx.conf выглядит примерно так

server {
  listen 443 ssl;
  server_name test.com;
  client_max_body_size 100M;

  # test.com/ should be a static page
  location = / {
    root /var/www/
    try_files $uri $uri/ /index.html;
    break;
  }

  # everything else should go to the upstream app server
  location / {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_pass http://127.0.0.1:3000;
  }
}

Моя проблема в том, что при посещении test.com nginx, похоже, также оценивает блок location /, потому что он передает запрос на мой вышестоящий сервера не останавливаться на блоке location = /.Я пытался включить break; в блок location = /, и это совсем не изменило поведение.Я знаю, что он соответствует первому блоку location = /, потому что запрос, который я вижу на моем сервере приложений, относится к /index.html, который, предположительно, переписывается директивой try_file (если я изменяю это на /foo.html, я вижу, что он отражаетсяна моем сервере приложений).

Я пробовал инструменты тестирования местоположения nginx, такие как https://nginx.viraptor.info, и в нем говорилось, что окончательное совпадение должно быть только "точным соответствием", описанным блоком location = /.

И да, я перезапускаю nginx после каждого изменения конфигурационного файла.

Кто-нибудь знает, почему это происходит?Любая помощь будет оценена!

1 Ответ

0 голосов
/ 24 декабря 2018

Nginx обрабатывает два URI, сначала /, а затем внутренне переписанный /index.html.Ваша конфигурация обрабатывает второй URI в блоке location /.

Либо добавьте точное совпадение location для второго URI, например:

root /var/www;
location = / { ... }
location = /index.html { }
location / { ... }

Или вы можете организоватьtry_files для обработки URI в том же месте:

root /var/www;
location = / { 
    try_files /index.html =404;
}
location / { ... }

Подробнее см. в этом документе .

...