@Dest0re

Как проксировать /.+, но не /?

есть сервис скажем на порту 8082, есть какая-то веб-страничка. Я хочу, чтобы при отправке запроса на / nginx выдавал в ответ веб-страничку, простой index.html, но запрос по пути вида /.+ проксировал на сервис на порту 8082.

Конфиг сервера
server {
        listen 8083;

        location / {
            root /www;
        }

        location ~ ^/.+$ {
            proxy_pass http://localhost:8082;

            proxy_http_version 1.1;

            proxy_set_header        Host $host:8082;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
            proxy_set_header        Access-Control-Allow-Origin *;

        }
    }

при попытке гета на / почему-то пытается вернуть 127.0.0.1:8082/index.html, хотя ясно указано, что после / должен быть хотя бы один символ. Если вместо ~ в начале регекса указать ^~, что, как я понял, должно указывать, что путь должен именно начинаться с указанного шаблона, то nginx напротив отказывается проксировать что бы то ни было и пытается искать указанную после / строку в /www/.
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Использовать флаг =:

server {
  listen 8083;

  root /www;

  location = / {
    # отдаём файл index.html
    rewrite ^ /index.html break;
  }

  # всё остальное проксируем
  location / {
    proxy_pass http://localhost:8082;
    ...
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы