Пропуск прокси-сервера Nginx - код возврата статуса с сайта, расположенного выше

Как мне вернуть HTTP STATUS CODE с http://127.0.0.1:8080/

Пример:

  • http://127.0.0.1:8080/api/example возвращает 500, затем при доступе к ttp://127.0.0.1/api/example также должно возвращаться 500,

и так далее для любого другого кода состояния, пожалуйста, помогите??? провел несколько часов с этим...

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    gzip  on;
    server {
        listen       80;
        server_name  127.0.0.1;

        location / {
            proxy_pass http://127.0.0.1:8888;
            proxy_http_version  1.1;
            proxy_pass_request_headers on;
            gzip_static on;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_redirect off;
            proxy_set_header        Host            $host;
            proxy_set_header        Status          $status;
        }

        location /api/ {
            proxy_pass http://127.0.0.1:8080;
            proxy_http_version  1.1;
            proxy_pass_request_headers on;
            gzip_static on;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_redirect off;
            proxy_set_header        Host            $host;
            proxy_set_header        Status          $status;
        }
    }

}

1 ответ

Решение

Кажется, у вас есть 3 комбинации хоста: порта в игре здесь:

  • 127.0.0.1:80 или просто 127.0.0.1 - какой нгинкс обслуживает
  • 127.0.0.1:8888 - первый сервер приложений с конечной точкой /
  • 127.0.0.1:8080 - второй сервер приложений с конечной точкой /api/

http://127.0.0.1:8080/api/example возвращает 500, затем при доступе к ttp://127.0.0.1/api/example также должно возвращаться 500,

Я не совсем уверен, что вы имеете в виду здесь.

Если вы нажимаете на прежний URL-адрес, вы подключаетесь непосредственно ко второму серверу приложений и получаете ответ 500.

Если вы переходите по последнему URL-адресу, вы подключаетесь к nginx, который передает запрос на второй сервер приложений и должен возвращать тот же ответ.

передать различные STATUS_CODE в браузер, когда запрос достигает вызова API, я возвращаю объект json, и если, например, я хочу сказать, что для запроса требуется токен аутентификации, предоставленный через куки, я бы затем отправил объект json с сообщением и 403 и так далее...

Это похоже на функциональность, которая должна быть реализована на сервере приложений (будь то Flask, Node.JS или что-то еще), а не на уровне nginx. У nginx есть возможность вернуть коды состояния, но это будет сделано в статических блоках местоположения (например, чтобы вернуть 404 в случае, если статический файл не найден).

Если ваш сервер приложений возвращает код состояния, он должен быть передан обратно в браузер. Если вы не говорите, что этого не происходит.

Возможно, немного отредактируйте расположение блоков. Вот то, что я использую и которое также работает с куки. Обратите внимание на косую черту в конце proxy_pass линия как это поймала меня в прошлом:

location  / {
    proxy_set_header Host $http_host;
    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_pass http://localhost:8888/;
}
Другие вопросы по тегам