У меня есть nginx в качестве обратного прокси, который делает некоторые вещи proxy_pass
. Прокси находится перед angular SPA с включенной HTML5 маршрутизацией + другие уродливые вещи вокруг, поэтому я не могу обработать 404 на сервере, который доставляет страницу.
На данный момент у меня есть следующая конфигурация:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 3000;
location /int {
proxy_pass http://localhost:9131/int;
proxy_set_header X-Forwarded-For "127.0.0.1";
}
location /app/static {
proxy_pass http://localhost:9131/int/static;
proxy_set_header X-Forwarded-For "127.0.0.1";
}
location /app/api {
proxy_pass http://localhost:9131/int/api;
proxy_set_header X-Forwarded-For "127.0.0.1";
}
location / {
proxy_set_header Accept-Encoding "";
proxy_pass https://example.com/;
sub_filter 'https://example.com/int' 'http://$host:$server_port/int';
sub_filter '<base />' '<base href="/app/" />';
proxy_intercept_errors on;
error_page 404 = @fallback;
}
# EDIT: after comment, but got the following Error:
# "proxy_pass" cannot have URI part in location given by regular
# expression, or inside named location, or inside "if" statement,
# or inside "limit_except" block in ...\nginx-1.14.2/conf
# /nginx.conf:37
location @fallback {
proxy_pass http://localhost:3000/app;
}
}
}
Когда я go на example.com/app/foobar
, я получил перенаправление на example.com/app
. Что я хочу, так это пересылка, чтобы я получил содержимое example.com/app
без изменения URL-адреса или кода состояния. Тогда SPA может обработать маршрутизацию.
Редактировать:
Добавлена конфигурация с именованным местоположением (@fallback
}