Почему мой обратный прокси-сервер Nginx выполняет перенаправление 301 вместо прокси? - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть обратный прокси-сервер Nginx внутри док-контейнера, который прослушивает порт 3000 и получает доступ к 3002: docker run -p "3002:3000" ....

Идея состоит в том, что этот обратный прокси-сервер будет прокси /my-app к экземпляруработает в моем ноутбуке через порт 8080;и /my-app/api для экземпляра облака, в https://my-domain.

Вот конфигурация:

upstream my-laptop {
  server host.docker.internal:8080; # this is a magic hostname for the laptop's IP address.
  keepalive 64;
}

upstream cloud {
  server my-domain.com:443;
  keepalive 64;
}

server {
    listen       3000;

    include ssl/ssl-certs.conf;
    include ssl/ssl-params.conf;

    location /my-app {
        proxy_pass http://my-laptop;
        proxy_set_header Host            $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /my-app/api {
        proxy_pass https://cloud;
        proxy_set_header Host            $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    ...
}

Проблемы:

  1. , когда я нажимаю https://localhost:3002/my-app Я получаю ответ 301 на /my-app/ (косая черта).Я не знаю, почему это так.Экземпляр локального приложения отображается в браузере, так что, думаю, я могу позволить ему на мгновение скользить?
  2. когда я нажимаю https://localhost:3002/my-app/api/students, я получаю ответ 301 на https://cloud/my-app/api/students.Конечно, это вызывает проблемы с CORS, и конечная точка не возвращает данные.

Теперь я настроил обратные прокси-серверы пару раз, поэтому я совершенно шокирован тем, что не вижу, чтонеправильно, это не мой первый раз.

Я попытался настроить с помощью upstreams, proxy_set_headers, по сравнению с другим обратным прокси, который у меня есть для другого приложения;У меня нет идей.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Проблема была в моем Host заголовке в облаке вверх по течению, у меня было

proxy_set_header Host $http_host;

Но это должно было быть

proxy_set_header Host my-domain.com;
0 голосов
/ 15 декабря 2018

Вот пример конфигурации для nginx в качестве обратного прокси, который работает для меня, я упростил его и удалил ненужные части.Я надеюсь, что это поможет.

upstream OAUTH {
    server remote_oauth;
}



server {
    listen  80;
    server_name example.com;

    client_header_timeout       300;


    location = /servies/oauth {
      return 301 /services/oauth/;
    }


    location /services/oauth/ {
        proxy_pass_request_headers on;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://OAUTH/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-ROOT-URI /services/oauth;
        proxy_set_header Accept-Encoding "gzip";
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_http_version 1.1;
        proxy_intercept_errors on;
        proxy_redirect default;
        client_max_body_size 4M;
    }


}

Я думаю, что вы пропустили эту часть: proxy_pass_request_headers на

...