ASP.NET Core Docker容器中的Nginx

时间:2018-06-07 07:14:19

标签: azure docker nginx asp.net-core

不幸的是,没有太多关于如何将Nginx或Apache代理注入ASP.NET Core Docker容器的文档。 这是一个很好的手册,但它有单独的图像用于ASP.NET核心应用程序和Nginx。

ASP.NET Core API behind the Nginx Reverse Proxy with Docker.

我想在Azure上托管我的Docker镜像,所以我需要在Docker容器中安装Nginx。

基于这篇文章Nginx Reverse Proxy to ASP.NET Core – Same Docker Container我创建了这个配置:

nginx.conf

worker_processes 4;

events { worker_connections 1024; }

http {
sendfile on;

proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;
large_client_header_buffers 4 16k;

upstream app_servers {
    server 127.0.0.1:5000;
}

server {
    listen 80;

    location / {
        proxy_pass         http://app_servers;
        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;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
    }
  }
}

Dockerfile

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build

RUN apt-get update
RUN apt-get install -y apt-utils

RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y nginx

WORKDIR /src

COPY MyApp.csproj MyApp.csproj
RUN dotnet restore
COPY . .
WORKDIR /src
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

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

RUN rm -f /app/startup.sh
COPY startup.sh /app
RUN chmod 755 /app/startup.sh

RUN rm -f /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx

ENV ASPNETCORE_URLS http://+:5000
EXPOSE 5000 80

CMD ["sh", "/app/startup.sh"]

Startup.sh

#!/bin/bash
service nginx start
dotnet /app/MyApp.dll

仍然收到“服务不可用” 可能是因为我有Azure AAD身份验证。 有人可以推荐一些东西或提供其他工作配置吗?

2 个答案:

答案 0 :(得分:0)

曾俊是正确的评论。无法或不建议在同一容器中同时托管nginx和应用程序。

我最终从Nginx图像创建了Ingress
已使用Helm安装它。
由于我的Kubernetes群集位于Azure中,因此我使用了下一本手册:
Create an HTTPS ingress controller on Azure Kubernetes Service

答案 1 :(得分:0)

我有一些使用docker-compose的Azure Linux WebApp,以Nginx作为反向代理来提供Asp.Net Core 3.1应用程序(它们也运行着WebJob)。这些WebApp在GitHub,Docker注册表和Azure Pipelines都有公共存储库。

https://pdf.ricardogaefke.com/

https://webjobs.ricardogaefke.com/

您可以在How it works页上查看公共存储库。