Nginx可以用于搭建静态网站,也可以实现反向代理(将客户端的请求转发到其他后端应用)。本文将指引您使用SAE部署Nginx服务。
方案概览
如下图所示,Nginx能够根据客户端请求的路径,返回应用自身包含的静态资源(如HTML页面),或者将请求转发到其他后端应用,并将处理结果返回给客户端。
如果您期望仅搭建静态网站,也可以通过部署Nginx服务来实现。这种情况下,您无需部署后端应用,Nginx配置中也无需包含转发规则。
1. 准备静态网站资源
本文使用以下示例文件:nginx-demo.zip。
其中,html/
路径下包含本例中使用的静态网站资源:
index.html
:默认首页。error.html
:默认404错误页面。
实际环境中,请根据您的需求创建静态网站资源(如HTML页面、图片、CSS样式等)。
2. 编写Nginx配置文件
示例中的conf/
路径下包含Nginx的配置文件nginx.conf
,相关说明如下。
实际环境中,请根据您的需求修改Nginx配置文件。更多信息,请参考Nginx官方文档。
配置静态资源访问规则
...
server {
listen 80 default_server; # 设置Web服务的监听端口为80
...
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
# 客户端访问根路径时需要返回的页面
location / {
root /usr/share/nginx/html; # 容器中存放静态网站资源的路径。制作镜像时会将本地的静态网站资源复制到镜像内的这个路径中。
index index.html;
}
# 客户端访问出现404错误时需要返回的页面
error_page 404 /error.html;
location = /error.html {
root /usr/share/nginx/html;
}
}
...
配置转发规则
本文假定您已部署后端应用,并可以从公网访问后端应用。
示例中,后端应用的访问地址和端口是121.40.xx.xx:80
,期望将请求路径匹配/api/*
的请求转发到后端应用,并且转发时将请求路径重定向为/*
,则配置如下:
...
# 配置请求转发规则
location /api/ {
proxy_pass http://121.40.xx.xx:80/;
}
...
如果您期望仅搭建静态网站,则无需配置转发规则。
如果部署后的Nginx服务可以通过VPC网络访问到后端应用,则转发规则中可以使用私网IP。
3. 制作镜像并上传到镜像仓库
您可以在本地环境或ECS环境中制作镜像,前提是环境中已安装Docker工具。
编写Dockerfile文件。示例中Dockerfile文件的说明如下:
# 指定Nginx基础镜像 FROM nginx:1.20.2 # 复制本地的Nginx配置文件到容器环境的指定路径 COPY conf/nginx.conf /etc/nginx/nginx.conf # 复制本地的静态资源文件到容器环境的指定路径 COPY html /usr/share/nginx/html
构建镜像。在Dockerfile文件所在路径执行以下命令:
docker build . -t my-nginx:1.0 # .:表示在当前目录中构建镜像 # -t:指定镜像名称、镜像tag
测试镜像。
# 运行镜像 docker run -d -p 80:80 my-nginx:1.0 # 需要环境中已安装curl命令 # 测试静态资源访问 curl localhost:80/ # 测试将请求转发到后端应用(仅适用于Nginx服务通过公网IP转发到后端应用的场景) curl localhost:80/api/
将制作成功的镜像推送至阿里云ACR镜像仓库。具体操作,请参考推送拉取镜像(企业版)或推送拉取镜像(个人版)。
4. 通过镜像部署Nginx并配置网络访问
通过已推送到ACR中的镜像部署Nginx服务。具体操作,请参考通过镜像部署应用。
如果希望Nginx服务能够将请求转发到后端应用的公网地址,需要为Nginx服务所在的VPC配置NAT网关(默认情况下,部署在SAE的应用是无法访问公网的)。具体操作,请参考配置NAT网关使SAE应用能访问公网。
如果Nginx服务转发请求时使用后端应用的私网地址,则无需配置NAT网关。
为Nginx服务配置公网访问地址,使客户端可以通过公网IP访问Nginx服务。具体操作,请参考为应用绑定CLB,容器端口需要设置为
80
。如果您希望客户端通过域名访问Nginx服务,则需要为公网IP配置域名解析。
通过浏览器访问Nginx服务,进行测试。
5. (可选)应用部署后修改Nginx配置文件
修改Nginx配置文件无需重新构建镜像,您可以通过ConfigMap向容器中注入配置文件的方式实现配置管理,提高效率。
通过ConfigMap注入到容器中的配置文件会覆盖容器中的原始配置文件。