我试图让nginx,ASP.NET 5,Docker和Docker Compose在我的开发环境中一起工作,但到目前为止我看不到它的工作原理.
This是我现在的状态,让我在这里简要解释一下.
我有以下docker-compose.yml文件:
webapp:
build: .
dockerfile: docker-webapp.dockerfile
container_name: hasample_webapp
ports:
- "5090:5090"
nginx:
build: .
dockerfile: docker-nginx.dockerfile
container_name: hasample_nginx
ports:
- "5000:80"
links:
- webapp:webapp
docker-nginx.dockerfile文件:
FROM nginx
COPY ./nginx.conf /etc/nginx/nginx.conf
和docker-webapp.dockerfile文件:
FROM microsoft/aspnet:1.0.0-rc1-update1
COPY ./WebApp/project.json /app/WebApp/
COPY ./NuGet.Config /app/
COPY ./global.json /app/
WORKDIR /app/WebApp
RUN ["dnu", "restore"]
ADD ./WebApp /app/WebApp/
EXPOSE 5090
ENTRYPOINT ["dnx", "run"]
nginx.conf文件:
worker_processes 4;
events { worker_connections 1024; }
http {
upstream web-app {
server webapp:5090;
}
server {
listen 80;
location / {
proxy_pass http://web-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
一切都很好,当我运行docker-compose时,它会启动并运行两个容器,这也很不错.从主机,当我点击localhost:5000时,请求只是挂起,当我终止请求时,nginx通过docker compose写出一个日志,指示499 HTTP响应.
知道我在这里可能缺少什么吗?
更新:
我在ASP.NET 5应用程序中添加了一些日志记录,当我点击localhost:5000时,我可以验证请求是否正在发送到ASP.NET 5,但它会立即终止,从200响应中判断出健康的响应.然后,nginx坐在它上面我通过客户端终止请求.
最佳答案 这是Kestrel RC1:
https://github.com/aspnet/KestrelHttpServer/issues/341中的已知错误
你可以通过强制连接来解决它:keep-alive:
proxy_set_header Connection keep-alive;