亚马逊云科技

广告

安信SSL证书

广告

Nginx反向代理配置详解(依托免费Amazon Lightsail容器)

美国云服务器推荐

Nginx反向代理通过端口80接受Web请求,并通过端口5000将这些请求转发到 Flask Web服务器。Flask Web服务器完成请求并将响应内容返回给Nginx。本文将主要介绍如何使用亚马逊免费VPS“Amazon Lightsail容器”在Nginx反向代理后面配置Flask Web服务器。

Amazon Lightsail容器既托管Nginx容器又托管Flask容器。通过公共端点可以对Nginx服务器进行外部访问。

亚马逊云科技官网:开始免费试用3个月Amazon Lightsail

一、Nginx反向代理配置前提条件

开始使用应用程序之前,先完成以下前提条件。

一个AWS账户,而且必须在系统上安装Docker、Docker Compose、AWS命令行界面 (CLI) 工具和Lightsail Control (lightsailctl) 插件。如果没有上述某些工具或插件。

AWS账户注册指南:

二、获取源代码

1、在本地克隆GitHub存储库。

git clone https://github.com/awsgeek/lightsail-containers-nginx.git

2、切换到项目目录。

在本指南的后续步骤中,所有命令均从项目目录运行。

cd lightsail-containers-nginx

三、Flask应用程序

Flask应用程序包含一个hello_world() 函数,当请求路由/时会触发该函数。此应用程序在运行时会绑定到系统上的所有IP (0.0.0.0) 并监听端口5000(默认Flask端口)。

1、以下代码块中显示了Flask应用程序app.py的源代码。

from flask import Flask
app = Flask(__name__)

@app.route(“/”)
def hello_world():
return “Hello, World!”

if __name__ == “__main__”:
app.run(host=”0.0.0.0″, port=5000)

2、Flask应用程序的Dockerfile使用Python alpine镜像尽可能降低容器镜像的大小。容器启动时运行的命令与从命令行运行的命令相同:python app.py。

# Set base image (host OS)
FROM python:3.8-alpine

# By default, listen on port 5000
EXPOSE 5000/tcp

# Set the working directory in the container
WORKDIR /app

# Copy the dependencies file to the working directory
COPY requirements.txt .

# Install any dependencies
RUN pip install -r requirements.txt

# Copy the content of the local src directory to the working directory
COPY app.py .

# Specify the command to run on container start
CMD [“python”, “./app.py”]

四、构建Flask容器

通过完成以下步骤在本地系统上构建Flask应用程序容器。

1、使用Docker构建容器。从项目目录完成以下命令:

此命令使用Dockerfile在当前目录下构建一个容器,并将该容器标记为flask-container。

docker build -t flask-container ./flask

2、容器构建完成后,通过运行容器在本地测试Flask应用程序。

docker run -p 5000:5000 flask-container

3、Flask应用程序将在容器中运行,并且将通过端口5000向本地系统公开数据。

浏览到http://localhost:5000或从命令行使用curl,将看到Hello, World!

若要停止容器,请输入CTRL-C。

curl localhost:5000

Hello, World!

五、Nginx反向代理配置

1、Nginx反向代理通过端口5000将所有请求转发到Flask应用程序。若要配置Nginx以转发请求,需要使用下面的简单配置文件nginx.conf:

此配置会将所有请求转发到上游的Flask服务器。当容器运行时,Flask服务器的主机名和端口会以环境变量的形式提供。

events {}

http {

upstream flask {
server ${FLASK_HOST}:${FLASK_PORT};
}

# a simple reverse-proxy
server {

listen 80 default_server;

location / {
# pass requests to the Flask host
proxy_pass http://flask;
}
}
}

2、Nginx反向代理的Dockerfile 使用头部Nginx alpine镜像,并且只是将nginx.conf配置文件复制到相应的目录。

如以下代码所示。

FROM nginx:1.19-alpine
COPY ./nginx.conf /etc/nginx/templates/nginx.conf.template

六、构建Nginx容器

通过完成以下步骤在本地系统上构建Nginx反向代理容器。

1、使用Docker构建容器。从项目目录完成以下命令:

此命令使用Dockerfile在当前目录下构建一个容器,并将该容器标记为nginx-container。

docker build -t nginx-container ./nginx

2、容器构建完成后,通过运行容器在本地测试Nginx代理和Flask应用程序:

docker-compose up –-build

3、Flask应用程序和Nginx反向代理容器都将运行。Nginx服务器通过端口80监听请求,并将请求转发到Flask应用程序。浏览到http://localhost或从命令行使用curl,将看到Hello, World!

若要停止容器,请输入CTRL-C。

curl localhost

Hello, World!

七、创建Amazon Lightsail容器服务

通过完成以下步骤来创建亚,亚马逊VPS Amazon Lightsail容器服务并将本地容器镜像推送到新容器服务。

1、使用create-container-service命令创建Amazon Lightsail容器服务。

power和scale参数用于指定容器服务的容量。在本指南中,需要的容量很小。

create-container-service命令的输出结果表明新服务的状态为PENDING(如第二个代码块所示)。

aws lightsail create-container-service –service-name sample-service \
–power small \
–scale 1

{
“containerService”: {
“containerServiceName”: “sample-service”,

“state”: “PENDING”,

2、使用get-container-services命令监控创建中的容器的状态。待容器服务的状态更改为ACTIVE后,再继续执行下一步。容器服务应当在几分钟后就会变为ACTIVE状态。

aws lightsail get-container-services –service-name sample-service

3、使用push-container-image命令将Flask应用程序容器推送到Amazon Lightsail。

注意:sample-service.flask-container.X中的X将为一个数值。如果这是首次将镜像推送到容器服务,则此数值为1。在下一步中将需要此数值。

aws lightsail push-container-image –service-name sample-service \
–label flask-container \
–image flask-container

Refer to this image as “:sample-service.flask-container.X” in deployments.

4、使用push-container-image命令将Nginx反向代理容器推送到Amazon Lightsail。

注意:sample-service.nginx-container.Y中的Y将为一个数值。如果这是首次将镜像推送到容器服务,则此数值为1。在下一步中将需要此数值。

aws lightsail push-container-image –service-name sample-service \
–label nginx-container \
–image nginx-container

Refer to this image as “:sample-service.nginx-container.Y” in deployments.

八、部署容器

通过完成以下步骤,创建用于部署和公共端点配置的JSON文件,然后将容器镜像部署到容器服务。

1、创建一个名为containers.json的新文件。

编辑该文件并添加以下代码块。

将sample-service.flask-container.X中的X和sample-service.nginx-container.Y中的Y替换为上一步中的数值。保存该文件。

containers.json文件用于描述将在容器服务上启动的容器的设置。在此实例中,containers.json文件描述了Nginx容器和Flask容器以及这些容器将使用的镜像和公开数据的端口。此外,文件还提供了用于指定Flask主机和端口的环境变量。在运行时,Nginx会将nginx.conf文件中的占位符值替换为此处提供的实际值。

{
“sample-nginx”: {
“image”: “:sample-service.nginx-container.Y”,
“command”: [],
“ports”: {
“80”: “HTTP”
},
“environment”: {
“NGINX_ENVSUBST_OUTPUT_DIR”: “/etc/nginx”,
“FLASK_HOST”: “localhost”,
“FLASK_PORT”: “5000”
}
},
“sample-flask”: {
“image”: “:sample-service.flask-container.X”,
“ports”: {
“5000”: “HTTP”
}
}

2、创建一个名为public-endpoint.json的新文件。

编辑该文件并添加以下代码。 保存该文件。

public-endpoint.json文件用于描述容器服务的公共端点的设置。在此实例中,publicendpoint.json文件表明Nginx容器将通过端口80公开数据。只有要进行公共访问的服务才需要设置公共端点。

{
“containerName”: “sample-nginx”,
“containerPort”: 80
}

3、在AWS CLI中,使用create-container-service-deployment命令将容器部署到容器服务。

create-container-service-deployment命令的输出结果表明容器服务的状态现在为DEPLOYING(如第二个代码块所示)。

aws lightsail create-container-service-deployment –service-name sample-service \
–containers file://containers.json \
–public-endpoint file://public-endpoint.json

{
“containerServices”: [{
“containerServiceName”: “sample-service”,

“state”: “DEPLOYING”,

4、使用get-container-services命令监控容器的状态,待状态更改为RUNNING后再继续执行下一步。get-container-service命令还会返回容器服务的端点URL。

待容器服务的状态更改为RUNNING后,通过浏览器前往此URL,以验证容器服务是否正常运行。和之前一样,浏览器输出结果应当显示“Hello, World!”。

到目前为止,已使用Amazon Lightsail容器成功部署了容器化Nginx反向代理和Flask应用程序。

aws lightsail get-container-services –service-name sample-service

{
“containerServices”: [{
“containerServiceName”: “sample-service”,

“state”: “RUNNING”,

“url”: “https://sample-service…

九、清除

通过完成以下步骤来清除在学习本教程的过程中创建的Amazon Lightsail容器服务。

1、若要清除和删除Amazon Lightsail资源,请使用delete-container-service命令。delete-container-service命令会删除容器服务、任何关联的容器部署以及容器镜像。

aws lightsail delete-container-service –service-name sample-service

{
“containerService”: {
“containerServiceName”: “sample-service”,

“state”: “PENDING”,

相关推荐:

Nginx正向代理和反向代理区别介绍

Nginx反向代理WebSocket连接错误怎么解决

宝塔面板反向代理设置图文教程

(本文由美国主机侦探原创,转载请注明出处“美国主机侦探”和原文地址!)

主机侦探企业微信

微信扫码加好友进群

主机优惠码及时掌握

主机侦探QQ群

QQ群号:938255063

主机优惠发布与交流

温馨提示:

1、本站部分图片来源于互联网,如有侵权请联系删除。邮箱:2942802716#qq.com(#改为@)

2、本文评论没有专人回复,如果您有问题请到美国主机侦探论坛提问!

3、美国主机侦探免费为您提供美国主机购买咨询。

RAKsmart美国服务器
返回顶部