Https с двумя docker контейнерами, используя Nginx и AspCore - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть два проекта, которые я хочу развернуть, давайте назовем их APP и API.

Оба имеют файлы docker, следуя указаниям, описанным ниже. Я хочу развернуть их в рабочей среде (linux host) в виде контейнеров docker, работающих под HTTPS. Однако я не могу понять, как правильно настроить порты и перенаправления.

Либо ASP Ядро продолжает перенаправлять (307) или NGINX (301) в зависимости от того, как я его настроил. Как показано в приведенных ниже файлах, это 307.

Как настроить два docker контейнера на одном сервере в разных поддоменах с HTTPS, используя NGINX


AppSettings. json (Production)

{
  "https_port": 443,
  "ConnectionStrings": {
    ....
  },
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Dockerfile (почти то же самое для APP и API)

WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["APP/APP.csproj", "APP/"]
RUN dotnet restore "APP/APP.csproj"
COPY . .
WORKDIR "/src/APP"
RUN dotnet build "APP.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "APP.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENTRYPOINT ["dotnet", "APP.dll"]

Затем я запускаю докеры на сервере, используя

sudo docker build -f ./API/Dockerfile -t api .
sudo docker build -f ./APP/Dockerfile -t app .

sudo docker run --network="mynetwork" -d -p 5001:443 -p 5000:80 --name api api
sudo docker run --network="mynetwork" -d -p 5003:443 -p 5002:80 --name app app

Тогда по моему NGINX

upstream app{
        server 127.0.0.1:5002;
}

upstream api{
        server 127.0.0.1:5000;
}

server {
        server_name www.dev.myserver.nl;
        location / {
            proxy_pass         http://app;
            proxy_redirect     off;
            proxy_set_header   Host $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-Host $server_name;

       }
    listen 443 ssl; # managed by Certbot
    listen [::]:443 ssl;
    [CERTBOT STUFF]
}


server {
        server_name dev.myserver.nl;
        location / {
            proxy_pass         http://app;
            proxy_redirect     off;
            proxy_set_header   Host $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-Host $server_name;

       }

    listen 443 ssl; # managed by Certbot
    listen [::]:443 ssl;
    [CERTBOT STUFF]
}

server {
        server_name www.api.myserver.nl;
        location / {
            proxy_pass         http://api;
            proxy_redirect     off;
            proxy_set_header   Host $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-Host $server_name;

        }

    listen 443 ssl; # managed by Certbot
    listen [::]:443 ssl;

    [CERTBOT STUFF]
}

server {
        server_name api.mysite.nl;
        location / {
            proxy_pass         http://api;
            proxy_redirect     off;
            proxy_set_header   Host $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-Host $server_name;

        }

    listen 443 ssl; # managed by Certbot
    listen [::]:443 ssl;
    [CERTBOT STUFF]
}


server {
    if ($host = www.api.myserver.nl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = api.myserver.nl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    listen [::]:80;
    server_name www.api.myserver.nl api.myserver.nl;
    return 404; # managed by Certbot
}


server {
    if ($host = www.dev.myserver.nl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = dev.myserver.nl) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        listen 80;
    listen [::]:80;
        server_name www.dev.myserver.nl dev.myserver.nl;
    return 404; # managed by Certbot
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...