nginx error_page вперед вместо перенаправления - PullRequest
1 голос
/ 27 февраля 2020

У меня есть 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}

...