Docker使用HTTPS/SSL在ASP.NET Core 2.x和Nginx上进行构建

eSP*_*iYa 8 nginx docker docker-compose visual-studio-2017 asp.net-core-2.1

我想使用Nginx作为我的ASP.NET Core 2.x项目的Web服务器,使用本教程作为基础.我刚刚省略了server_name(用于将在web项目中实现的多租户).所有HTTP/80请求都将重定向到HTTPS/443.

我使用Angular项目创建了一个ASP.NET Core 2.x并启用了"Configure for HTTPS",然后添加了Docker支持,它为项目创建了默认的Dockerfile,并为Docker-compose创建了一个项目.

在Dockerfile中,我删除了自动生成的端口号,而是暴露了端口80和443:

#EXPOSE 61876
#EXPOSE 44340
EXPOSE 80
EXPOSE 443
Run Code Online (Sandbox Code Playgroud)

然后创建一个文件并将其命名为nginx.conf:

worker_processes 4;

events { worker_connections 1024; }

http {
    sendfile on;    

    server {
        listen 443;

        location / {
            proxy_pass         $scheme://erp.web;
            proxy_http_version 1.1;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将docker-compose.yml(版本3.4)修改为:

services:
  erp.web:
    image: ${DOCKER_REGISTRY}erpweb
    build:
      context: .
      dockerfile: Erp.Web/Dockerfile

  proxy:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)

与docker-comspoe.override.yml这样:

services:
  erp.web:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_HTTPS_PORT=443
    ports:
      - "80" #"61876:80"
      - "443" #"44340:443"
    volumes:
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
Run Code Online (Sandbox Code Playgroud)

当我尝试浏览https:// localhost时,它说它无法访问服务器.此外,当我尝试检查Docker容器列表时,Nginx服务器仍然使用端口80,而我的Web应用程序项目具有以下端口:

some-random-port(currently 32771)->80, some-other-random-port(32770 for now)->443
Run Code Online (Sandbox Code Playgroud)