Я устранял это почти полдня. :(
На 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;
}