Как настроить директиву Location для URI другого контекста

что происходит:

Я использую следующий файл nginx.conf для балансировки нагрузки. веб-приложение запущено и работает на порту nginx 8080 и может получить доступ к целевой странице. однако при переходе с целевой страницы на страницу «подписки» возникает ошибка.

что ожидается:

Балансировщик нагрузки nginx должен перенаправлять нагрузку на страницу, как указано в директиве Location. но этого не происходит.

файл nginx:

events {

}

http {

upstream 3.121.253.126 {
    server 3.121.253.126:8080;
    server 3.121.253.126:8080;
    server 3.121.253.126:8080;
 }
  error_log /etc/nginx/error_log.log warn;
  client_max_body_size 20m;

  proxy_cache_path /etc/nginx/cache keys_zone=one:500m max_size=1000m;

  server {
    listen 8080;
    server_name 3.121.253.126;
    root /etc/nginx/html;
    index index.html;

    location /signup {
      root /etc/nginx/html;
      index add-user.html;

    #  proxy_pass http://localhost:8080/signup;
    #  proxy_set_header Host $host;
   #   rewrite ^/welcome(.*)$ $1 break;
    }

  }

}

вот журнал ошибок:

2019/02/21 09:07:42 [ошибка] 6 # 6: * 510 recv () не удалось (104: сброс соединения одноранговым узлом) при чтении заголовка ответа от восходящего потока, клиент: 127.0.0.1, сервер: 3.121.253.126, запрос: «GET / регистрация HTTP / 1.0», восходящий поток: «http://127.0.0.1:8080/signup ", хост:" localhost: 8080 ", реферер:" http://3.121.253.126:8080/ "2019/02/21 09:07:42 [предупреждение] 6 # 6: * вышестоящий сервер 510 временно отключен при чтении заголовка ответа из восходящего потока, клиент: 127.0.0.1, сервер: 3.121.253.126, запрос:" GET / signup HTTP / 1.0 ", восходящий поток:" http://127.0.0.1:8080/signup " , хост: "localhost: 8080", реферер: "http://3.121.253.126:8080/" 2019/02/21 09:13:10 [ошибка] 6 # 6: * 1 open () "/ etc / nginx / html / signup" не удалось (2: нет такого файла или каталога ), клиент: 157.33.175.127, сервер: 3.121.253.126, запрос: "GET / signup HTTP / 1.1", хост: "3.121.253.126:8080", реферер: "http://3.121.253.126:8080/" 21.02.2019 09:15:57 [ошибка] 6 # 6: * 3 open () "/ etc / nginx / html / signup "не удалось (2: нет такого файла или каталога), клиент: 157.33.175.127, сервер: 3.121.253.126, запрос:" GET / signup HTTP / 1.1 ", хост:" 3.121.253.126:8080 ", реферер:" http://3.121.253.126:8080/ "

согласно журналу, ожидается файл html регистрации. однако я поручаю ему использовать файл add-user.html. не уверен, почему этого не происходит.

пожалуйста предложите


person user2315104    schedule 21.02.2019    source источник
comment
Для ясности, вы указываете Nginx использовать файл, расположенный по адресу: /etc/nginx/html/signup/add-user.html. Где находится файл?   -  person Richard Smith    schedule 21.02.2019
comment
файл находится по адресу: /etc/nginx/html/add-user.html. Итак, что же должно быть в директиве Location?   -  person user2315104    schedule 21.02.2019
comment
файл находится по адресу: /etc/nginx/html/add-user.html. Итак, что же должно быть в директиве Location? почему я упомянул / signup, потому что в веб-URL приложения / signup - это контекстный URL   -  person user2315104    schedule 21.02.2019


Ответы (1)


Вы хотите указать URI /signup на файл, расположенный в /etc/nginx/html/add-user.html

Есть несколько способов добиться этого с помощью Nginx, включая директивы rewrite и try_files.

Например:

location /signup {
    try_files /add-user.html =404;
}

Директиву root не нужно повторять в этом блоке location, поскольку она унаследует то же значение из окружающего блока.

=404 ничего не делает, поскольку add-user.html всегда существует, но try_files требует двух параметров. Дополнительные сведения см. В этом документе.

Вышеупомянутое местоположение будет обрабатывать любой запрос, который начинается с /signup (например, /signup/ или /signups).

Чтобы ограничить его одним URI /signup, используйте модификатор =. Дополнительные сведения см. В этом документе.

Например:

location = /signup {
    try_files /add-user.html =404;
}
person Richard Smith    schedule 21.02.2019
comment
Спасибо, Ричард. Но будет ли эта логика применяться к URL-адресам PostMapping ?? (например: @PostMapping (/ adduser))? - person user2315104; 21.02.2019