Назад | Перейти на главную страницу

Обслуживание определенного удаленного пути, если удаленный путь не существует через proxy_pass

Я устранял это почти полдня. :(

На Nginx, запущенном на моем ноутбуке, где я не использую proxy_pass, файлы try работают отлично. Написанное мною веб-приложение Javascript выполняет маршрутизацию клиентов при загрузке страницы. Однако, если веб-страница обновляется, запрос получает сервер.

У меня есть эта конфигурация в моем Nginx, работающем на моем ноутбуке

location /viewer {
  try_files $uri /viewer/index.html;
}

С конфигурацией выше, если я запрошу http: // локальный / просмотрщик / getservice которого нет в моей файловой системе, мне будет предоставлен /viewer/index.html. Отлично работает!

Однако у нас работает другая конфигурация. Все наши статические файлы / html-страницы хранятся в восходящей корзине S3.

Это наша рабочая конфигурация

location /viewer {
  proxy_pass http://s3-bucket-server/viewer;
  add_header 'Access-Control-Allow-Credentials' 'true';
  add_header 'Access-Control-Allow-Origin' $cors_header;
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,Origin,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

Конфигурация выше отлично работает, когда я получаю к ней доступ вот так: http://internal-app.docs.svr/viewer. Я могу нажать на нашу левую навигацию, которая меняет путь к местоположению на стороне клиента на понравившийся

http://internal-app.docs.svr/viewer/settings
http://internal-app.docs.svr/viewer/docs
http://internal-app.docs.svr/viewer/permissions
etc

Однако, если предположить, что я был в http://internal-app.docs.svr/viewer/permissions и я щелкнул браузер, что обычно происходит, так это то, что он выполняет вызов GET для / viewer / permissions на нашем веб-сервере internal-app.docs.svr. К сожалению, в nginx нет правила расположения, которое с этим справится.

Я бы хотел добиться того, чтобы при выполнении описанного выше сценария (404) nginx serve /viewer/index.html. Я не хочу перенаправления, так как хочу сохранить последний путь, по которому я был. В данном случае это было /viewer/permissions. Написанное мной приложение javascript будет обрабатывать /viewer/permissions в конце концов.

Наконец-то он заработал, используя конфигурацию ниже

error_page 404 @proxy;

затем

location @proxy {
  rewrite ^ /viewer/index.html break;
  proxy_pass http://s3-bucket-server;
}