【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【Azure 应用服务】App Service For Container 配置Nginx,设置/home/site/wwwroot/目录为启动目录,并配置反向代理

问题描述

通过Docker Desktop for Linux,配置Nginx镜像后,自定义nginx.conf文件,修改启动目录和对 /out 路径的反向代理到博客园的博文地址 (https://www.cnblogs.com/lulight/p/15180884.html), 然后部署到Azure App Service中的整体实现方案。

 

操作步骤(共5步)

第 0 步:启动本地 Docker Desktop,并拉取Nginx 镜像

# 1. pull nginx image ... need docker for linux

docker pull nignx

注意:必须切换为 Linux Container,避免在拉去 Nginx 镜像时候出现如下错误:

C:\Users\bu>docker pull nginx

Using default tag: latest

latest: Pulling from library/nginx

no matching manifest for windows/amd64 10.0.19043 in the manifest list entries

 

第一步:创建Dockerfile 文件

FROM nginx

COPY appnginx.html  /home/site/wwwroot/index.html

COPY . /home/site/wwwroot

COPY nginx.conf /etc/nginx/nginx.conf

RUN  .

注意:

  • 这里Dockerfile的名字必须为Dockerfile
  • 第一行 FROM nginx 表示这次构建的image是以nginx的镜像为基础
  • 第二行 表示把本地目录中的一个appnginx.html静态文件复制到 /home/site/wwwroot/下的index.html文件中
  • 第三行 表示把本地当前与Dockerfile同级目录中的所有内容都复制到 /home/site/wwwroot 中
  • 第四行 表示把自定义的nginx.conf文件复制到linux下的nginx的安装目录中 /etc/nginx/nginx.conf,代替默认的nginx.conf

 

第二步:定义nginx.conf文件,其中包含修改启动路径,配置方向代理路径

worker_processes 1;
events{
    worker_connections 1024;
}
http{
    include mime.types;
    default_type application/cotet-stream;
    sendfile on;
    keepalive_timeout 65;
    server {
        listen   80 default;
        server_name  localhost;
        access_log  /var/log/nginx/localhost.access.log;
        location / {
                root   /home/site/wwwroot/;
                index  index.html index.htm;
        }
        location /out {
            proxy_pass https://www.cnblogs.com/lulight/p/15180884.html;
        }
    } 
    
}

注意:

  • 在Server节点中,配置了两种路径处理,当访问的是 / 根目录时,路径修改为  /home/site/wwwroot/, 默认的启动页面时 index.html 或者时 index.htm
  • 当请求路径时 localhost:80/out 时,反向代理请求发送到博客园博文地址  https://www.cnblogs.com/lulight/p/15180884.html

 

第三步:创建镜像后,Push到ACR中

使用az指令来创建ACR并通过docker登录到ACR中,然后push mynginx镜像到ACR中,为第四步准备。全文参考文档:https://docs.microsoft.com/zh-cn/azure/app-service/tutorial-custom-container?pivots=container-linux#create-a-resource-group

# 1. pull nginx image ... need docker for linux
docker pull nignx
# 2. build image 
docker build -t mynginx:latest .
# 3. run images 
docker run --name mynginxtest3 -p 8081:80 mynginx:v4
# 4. Push to ACR 
az cloud set --name AzureChinaCloud
az login
# az group create 命令创建资源组
az group create --name appacr-rg --location chinanorth2
# az acr create 命令创建 Azure 容器注册表
az acr create --name lbacr01 --resource-group appacr-rg --sku Basic --admin-enabled true
# az acr show 命令以检索注册表的凭据
az acr credential show --resource-group appacr-rg --name lbacr01
# docker login 命令登录到容器注册表
docker login lbacr01.azurecr.cn --username lbacr01
# 为ACR 标记本地 Docker 映像
docker tag mynginx lbacr01.azurecr.cn/mynginx:latest
# docker push 命令将映像推送到为ACR
docker push lbacr01.azurecr.cn/mynginx:latest
#az acr repository list 命令验证推送是否成功
az acr repository list -n lbacr01
# 5. 创建 app service  门户或者是CLI指令

注意:

  • 以上指令中 lbacr01 为测试demo中的ACR名称,实际需要根据情况修改

上传成功后结果为:

 

第四步:Azure门户中创建App Service,选择Docker并从ACR中获取镜像

注意:整个操作根据Azure门户提示一步一步进行。 https://portal.azure.cn/#create/Microsoft.WebSite, 如要使用AZ命令,则同样参考第三步链接(将应用服务配置为从注册表部署映像:https://docs.microsoft.com/zh-cn/azure/app-service/tutorial-custom-container?pivots=container-linux#configure-app-service-to-deploy-the-image-from-the-registry)

 

第五步:验证App Service的访问及反向代理结果

 

 

 

附录:方案中的静态页面内容

appnginx.html

<html>
    <body>
        <h1>Hello docker + nginx from china azure app service /home/site/wwwroot/ !</h1>
        <h2>Hello docker + nginx  from china azure app service /home/site/wwwroot/ !</h2>
        <h3>Hello docker + nginx   from china azure app service /home/site/wwwroot/ !</h3>
        <h4>Hello docker + nginx    from china azure app service /home/site/wwwroot/ !</h4>
        <h5>Hello docker + nginx     from china azure app service /home/site/wwwroot/ !</h5>
        <h6>Hello docker  + nginx     from china azure app service /home/site/wwwroot/ !</h6>
    </body>
</html>

 

update.html

<html>
    <body>
        <h1>update page ....... !</h1>
         
        <h5>China azure app service /home/site/wwwroot/ !</h5>
    </body>
</html>

 

 

参考资料

nginx反向代理配置两个不同服务器https://www.cnblogs.com/momjs/p/10615088.html

使用自定义容器将自定义软件迁移到 Azure 应用服务: https://docs.microsoft.com/zh-cn/azure/app-service/tutorial-custom-container?pivots=container-linux

 

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
API
【Azure Logic App】使用Logic App来定制Monitor Alert邮件内容遇见无法获取SearchResults的情况
Log search alert rules from API version 2020-05-01 use this payload type, which only supports common schema. Search results aren't embedded in the log search alerts payload when you use this version.
21 10
|
1月前
|
缓存 容器 Perl
【Azure Container App】Container Apps 设置延迟删除 (terminationGracePeriodSeconds) 的解释
terminationGracePeriodSeconds : 这个参数的定义是从pod收到terminated signal到最终shutdown的最大时间,这段时间是给pod中的application 缓冲时间用来处理链接关闭,应用清理缓存的;并不是从idel 到 pod被shutdown之间的时间;且是最大时间,意味着如果application 已经gracefully shutdown,POD可能被提前terminated.
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
1月前
|
Java 开发工具 Windows
【Azure App Service】在App Service中调用Stroage SDK上传文件时遇见 System.OutOfMemoryException
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
|
1月前
|
安全 Apache 开发工具
【Azure App Service】在App Service上关于OpenSSH的CVE2024-6387漏洞解答
CVE2024-6387 是远程访问漏洞,攻击者通过不安全的OpenSSh版本可以进行远程代码执行。CVE-2024-6387漏洞攻击仅应用于OpenSSH服务器,而App Service Runtime中并未使用OpenSSH,不会被远程方式攻击,所以OpenSSH并不会对应用造成安全风险。同时,如果App Service的系统为Windows,不会受远程漏洞影响!
|
1月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
79 7
|
2月前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
3天前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
30 5
|
27天前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?