我想使用Nginx作为我的ASP.NET Core 2.x项目的web服务器
this tutorial
作为基地。我只是省略了服务器名(对于即将在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
然后创建一个文件并命名为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;
}
}
}
然后将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
使用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
当我试图浏览
https://localhost
,它说它无法到达服务器另外,当我试图检查Docker容器列表时,Nginx服务器仍然使用端口80,而我的web应用程序项目有以下端口:
some-random-port(currently 32771)->80, some-other-random-port(32770 for now)->443