nginx搭建基于python的web环境的实现步骤

下面将详细讲解“nginx搭建基于python的web环境的实现步骤”的攻略。

安装nginx

首先我们需要在服务器上安装nginx,可以使用以下命令进行安装:

sudo apt update
sudo apt install nginx

完成安装后可使用以下命令检查服务是否已启动:

sudo systemctl status nginx

若服务已启动,应该看到如下输出:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-05-11 08:17:12 UTC; 1h 9min ago
       Docs: man:nginx(8)
    Process: 892 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 893 (nginx)
      Tasks: 2 (limit: 2279)
     Memory: 4.3M
     CGroup: /system.slice/nginx.service
             ├─893 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─894 nginx: worker process

提到了nginx成功运行,我们可以在浏览器中通过访问服务器的IP地址来检查nginx是否已经可用。如果您看到nginx的欢迎页面,那么nginx已经安装成功。

安装uWSGI和Python

接下来,我们需要在服务器上安装uWSGI和Python:

sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
sudo pip3 install uwsgi

在安装完成后,您可以使用以下命令检查uWSGI是否已经正确安装:

uwsgi --version

若您看到类似以下的输出,这就说明uWSGI已经成功安装:

2.0.19.1

创建Python Web应用

我们将创建一个使用flask框架的Python Web应用来演示如何使用uWSGI,您可以使用自己想使用的Web框架。

首先,我们需要创建一个名为app.py的文件。内容如下:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

上面的代码定义了一个名为app的Flask应用。该应用定义了一个名为hello的路由,用户访问根URL时将返回"Hello, World!"。

配置uWSGI

接下来,我们将创建一个uWSGI配置文件以启动Python Web应用。

首先,我们需要创建一个名为service.ini的文件,其内容如下:

[uwsgi]
module = app:app

master = true
processes = 5

socket = service.sock
chmod-socket = 660
vacuum = true

die-on-term = true

上面的代码定义了一个uwsgi服务的配置项,其中module表示要启动的Python应用的名称;socket表示uWSGI将监听的套接字文件的名称。切记:这里socket的名称与nginx配置文件的名称必须一致!

在此之后,我们将使用以下命令启动uWSGI服务:

uwsgi --ini service.ini

这行命令告诉uWSGI加载service.ini中定义的配置参数,并根据配置参数启动Python Web应用。

在这个之后,您可以通过您的浏览器访问服务器的IP地址来确认您的Python Web应用是否已经运行成功。

配置nginx

为了为Python Web应用提供服务,我们需要使用nginx作为反向代理和静态文件服务器。

在此之前,您需要创建一个名为service.sock的UNIX套接字文件,可以使用以下命令完成此操作:

sudo touch /var/www/<YOUR_PROJECT_NAME>/service.sock
sudo chown www-data:www-data /var/www/<YOUR_PROJECT_NAME>/service.sock

在完成以上操作后,您可以创建一个名为<YOUR_PROJECT_NAME>的目录来存放您的Python Web 应用,并使用以下命令创建名为<YOUR_PROJECT_NAME>的配置文件:

sudo nano /etc/nginx/sites-available/<YOUR_PROJECT_NAME>

请将<YOUR_PROJECT_NAME>更改为您的项目名称。

现在,请将以下内容复制到刚创建的文件中:

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/<YOUR_PROJECT_NAME>/service.sock;
    }
}

我们可以对上述代码进行逐行解释:

  • 第1~3行指定了要监听的端口,也可以指定一个域名;
  • 第5~7行配置了将请求发送到service.sock套接字文件的uWSGI工具;
  • 第8行关闭了所有请求的代理缓存;

当您已经完成了这一切之后,请使用以下命令启用这个站点:

sudo ln -s /etc/nginx/sites-available/<YOUR_PROJECT_NAME> /etc/nginx/sites-enabled

并检查nginx配置是否已正确启用:

sudo nginx -t

如果您看到了像下面这样的输出,则说明一切正常:

nginx: configuration file /etc/nginx/nginx.conf test is successful

现在,请重新启动nginx服务以应用配置更改:

sudo systemctl restart nginx

示例

在这里我会给出两个小例子:如何通过Python实现一个基本的网页和一个简单的RESTful API。

Python实现简单网页

在开始写简单的网页之前,我们需要添加Flask的依赖。

使用以下命令将Flask作为依赖添加到我们的Python虚拟环境中:

pip3 install flask

我们创建一个名为"website.py"代码文件,文件内容如下:

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def home():
    return render_template("home.html")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080, debug=True)

这里我们创建一个根路由“/”对应的Python函数home(),返回我们的页面模板。与此同时,我们将应用程序绑定到指定的主机地址和端口。

接下来,我们需要添加一个名为"home.html"的HTML模板来描述我们的简单网页。

<!DOCTYPE html>
<html>
    <head>
        <title>My First Flask App</title>
    </head>
    <body>
        <h1>Welcome to my first Flask App! </h1>
    </body>
</html>

请将上述页面编写为一个HTML模板,并放置在项目的根目录下。

我们可以通过以下命令启动Flask应用程序:

python3 website.py

您现在可以通过您的浏览器访问http://<服务器IP地址>:8080来查看您的Flask网站的运行情况。

如果您看到浏览器中渲染出了我们刚刚编写的HTML页面,您就已经成功地编写了一个简单的Flask Web应用了!

Python实现RESTful API

这次,我们将演示如何使用Python编写RESTful风格的API。我们创建一个名为"cars.py"的代码文件。内容如下:

from flask import Flask, request, jsonify

app = Flask(__name__)

cars = [
    {
        'brand': 'BMW',
        'year': '2018',
        'model': 'X5',
    },
    {
        'brand': 'Mercedes',
        'year': '2020',
        'model': 'S class',
    },
    {
        'brand': 'Audi',
        'year': '2016',
        'model': 'Q5',
    }
]

@app.route('/cars/', methods=['GET'])
def get_all_cars():
    return jsonify({'cars': cars})

@app.route('/cars/', methods=['POST'])
def add_car():
    car = request.get_json()
    cars.append(car)
    return jsonify(car)

@app.route('/cars/<string:model>/', methods=['PUT'])
def update_car(model):
    for i in range(len(cars)):
        if cars[i]['model'] == model:
            cars[i] = request.get_json()
            return jsonify(cars[i]), 200
    return jsonify({'message': 'Car not found'})

@app.route('/cars/<string:model>/', methods=['DELETE'])
def remove_car(model):
    for i in range(len(cars)):
        if cars[i]['model'] == model:
            cars.pop(i)
            return jsonify({'message': 'Car removed'})
    return jsonify({'message': 'Car not found'})

if __name__ == '__main__':
    app.run(debug=True, host='localhost', port=8080)

代码中的API模拟了一个简单的汽车列表。GET请求返回所有汽车的列表,POST请求将新车添加到列表中,PUT请求更新现有的汽车,DELETE请求删除现有汽车。

到现在,我们已经完成了uWSGI、Python应用和nginx的全部配置。为了启动我们的Python Web应用程序并访问API,您可以使用以下命令:

uwsgi --ini service.ini

现在您可以通过访问http:///cars/来访问并使用您的RESTful API。

总结:我们成功地创建了一个基于Python的Web环境,并且可以通过NGINX运行并提供服务。我们还创建了一个基本网站和一个简单API的例子来演示了如何使用Flask框架和Python创建Web应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nginx搭建基于python的web环境的实现步骤 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 使用Ingress-Nginx来暴露ArgoCD Web-UI

    未安装ArgoCD参考GitOps实践之kubernetes部署Argocd 1. 查看Argocd Service 可以看到是ClusterIP,因此不能从外部直接访问Argocd的WEB-UI # kubectl get svc -n argocd NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE argocd-a…

    2023年4月10日
    00
  • 操作nginx时遇到的各种问题

    1、 command not found 命令找不到 # nginx -s reload -bash: nginx: command not found 原因是没添加环境变量 步骤如下:1、编辑/etc/profile vim /etc/profile2、在最后一行添加配置,:wq保存 PATH=$PATH:/usr/local/nginx/sbinexpo…

    Nginx 2023年4月13日
    00
  • Nginx geo模块

    L79       geo 模块默认编译进nginx 可以通过–without-http_geo_module禁用  Syntax: geo [$address] $variable { … } Default: — Context: http         1:如果geo指令后不输入$address 那么默认就使用变量$remite_addr作为i…

    Nginx 2023年4月13日
    00
  • 2、Nginx 是如何实现并发的?为什么 Nginx 不使用多线程?Nginx常见的优化手段有哪些?502错误可能原因有哪些?

    异步,非阻塞,使用了epoll 和大量的底层代码优化。 如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数。正常情况下,会有很多进程一直在等待中。 而nginx采用一个master进程,多个woker进程的模式。 master进程主要负责收集、分发请求。每当一个请求过来时,master就拉起一个worker进程负责处理这个请求…

    2023年4月10日
    00
  • 如何配置Nginx的FastCGI缓存目录?

    下面是如何配置Nginx的FastCGI缓存目录的完整攻略: 创建缓存目录 需要先在服务器上创建一个用于缓存的目录,比如 /var/cache/nginx/fastcgi。你可以使用如下命令: sudo mkdir -p /var/cache/nginx/fastcgi sudo chown -R www-data:www-data /var/cache/n…

    Nginx 2023年4月19日
    00
  • 分享最新版 nginx内置变量 大全

    下面是详细讲解“分享最新版 nginx内置变量 大全”的完整攻略,以及包含两条示例说明。 一、概述 本文主要介绍 nginx 内置变量,并提供了最新版的 nginx 内置变量全集。 二、nginx 内置变量详解 nginx 内置变量主要有以下几种类型: 1. 标量变量 标量变量是 nginx 内置变量中最基础的类型,常用于记录客户端访问信息,例如:$remo…

    Nginx 2023年5月16日
    00
  • Linux下启动,停止,重启Nginx、Mysql、PHP——Nginx常用命令(启动/重启/停止/测试配置文件/重新加载配置文件) Nginx常用命令(启动/重启/停止/测试配置文件/重新加载配置文件)

    LINUX启动Nginx的命令: 一、查询是否启动 [root@jiang php-fpm.d]# ps -ef | grep nginx root 25225 1 0 19:26 ? 00:00:00 nginx: master process /app/nginx/sbin/nginx www 25229 25225 0 19:26 ? 00:00:00…

    Nginx 2023年4月12日
    00
  • nginx.conf配置两个前端路径

    关于“nginx.conf配置两个前端路径”的完整攻略,我们需要先了解以下几个概念: Nginx:开源的、高性能的、轻量级的 HTTP 服务器和反向代理服务器; 反向代理:通过将客户端请求转发到后端服务器并将响应返回给客户端的方式来隐藏原始服务器的信息; 前端路径:前端项目的静态资源所在的目录路径; 接下来,我们将以两个前端项目的配置为例进行详细讲解。 首先…

    Nginx 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部