我想在用户访问https时重定向到我的网站的http版本,该版本托管在Docker群中。
我正在尝试使用ngnix执行此操作,但是我正在使用的设置无效。我已经创建了一个新的Core 2.0 Web App,试图让它在最简单的环境中工作。除了Web App,我还有我的Dockerfile:
FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build nginx image to redirect http to https
FROM nginx:alpine
EXPOSE 80
COPY nginx.conf /etc/nginx/nginx.conf
# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "RedirectService.dll"]
和我的nginx文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://www.google.co.uk;
}
构建我的图片后,我使用docker run -p 8006:80 redirectservice
运行它。我期待发生的是,当我导航到http://localhost:8006
时,它会将我重定向到Google,但不会发生重定向。
任何人都能看到我做错的事吗?任何帮助都会受到大力赞赏。
答案 0 :(得分:1)
它没有重定向您,因为nginx进程没有运行。 看一下nginx图像Dockerfile(https://github.com/nginxinc/docker-nginx/blob/590f9ba27d6d11da346440682891bee6694245f5/mainline/alpine/Dockerfile) - 最后一行是:
CMD ["nginx", "-g", "daemon off;"]
在您的Dockerfile中,您将其替换为:
ENTRYPOINT ["dotnet", "RedirectService.dll"]
因此nginx永远不会启动。
你需要创建一个sh脚本,你将运行nginx和dotnet并等到它们都结束(即崩溃)。