У меня есть два проекта, которые я хочу развернуть, давайте назовем их 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
}