Как внутренне переписать в NGINX

#nginx

Вопрос:

Я хочу переписать URL-адрес /private/ping в другое место /ping , как только я выполню некоторые проверки basic_auth.

Когда я звоню http://localhost:8080/ping , со мной все в порядке. Когда я звоню http://localhost:8080/private/ping , у меня все в порядке только с #3 настройкой. Остальные 2 конфигурации возвращают 404.

Я знаю, что NGINX успешно переписывается /private/ping /ping , потому #3 что конфигурация возвращается OK , но это создает дополнительный ненужный HTTP-запрос.

Почему NGINX не обрабатывает свои собственные перезаписи, сверяя их с существующими местоположениями, или как я могу это сделать?

 server {

  listen 8080;

  location = /ping {
    return 200 'OK';
  }

  location /private/ {
    # basic_auth stuff here
    #rewrite ^/private/(.*) /$1 break; #1 No
    rewrite ^/private/(.*) /ping break; #2 No
    #proxy_pass http://localhost:8080/; #3 Yes
  }
 

Комментарии:

1. Попробуйте использовать last вместо break

2. Вот и все! Спасибо! Пожалуйста, опубликуйте ответ.

Ответ №1:

Используйте rewrite ... last для перезапуска поиска другого location на основе перезаписанного URI.