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

yizhihongxing

下面将详细讲解“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日

相关文章

  • haproxy + nginx + proxy protocol 获得客户真实IP方法

    公司网站架构为: 前面2台HA负载均衡,后面3台Nginx负载均衡反向代理,然后后面有N台WEB服务器 由于要统计IP,需要在WEB服务器日志里体现客户端真实IP 那么问题来了,通过HA代理的HTTP协议是没有问题的,后端的WEB服务器可以正常获取到客户端真实IP 但是通过HA代理的HTTPS协议就不行了,为什么呢,因为我们HA设置的是代理模式就是TCP模式…

    Nginx 2023年4月10日
    00
  • 深入Nginx + PHP 缓存详解

    深入Nginx + PHP 缓存详解 什么是缓存 缓存是一种为了提高计算机数据访问性能的方法。缓存将计算过的结果存储起来,下一次再需要同样的数据时,直接从缓存中取出,从而节省了计算资源和时间。 Nginx缓存机制 Nginx有两种缓存机制:proxy_cache和fastcgi_cache proxy_cache proxy_cache是Nginx代理缓存,…

    Nginx 2023年5月16日
    00
  • centos 6.5 安装阿里云的一键安装包(nginx+php5.4+mysql5.1)

    安装阿里云提供的Linux一键安装web环境全攻略,本想着会有最复杂 ,没想到阿里云工程师提供的包没有任何限制(开始以为只能在阿里去的主机上使用)。开源的精神就是好(注:我是伸手党)。 环境  vmware  + centos 6.5 最小安装版 软体:https://files.cnblogs.com/files/linuxOS/sh-1.4.5.zip或…

    Nginx 2023年4月11日
    00
  • 宝塔面板上的安装Nginx的配置路径问题

    虽说装上宝塔面板确实省下了安装软件时不必要的麻烦,问题是学过一点Nginx或Apache,就不需要宝塔来创建网站了。 关于在宝塔上安装了Nginx后,找不到Nginx对应网站的配置文件,其实一直在如下路径中 如果是直接安装Nginx,没有用到宝塔面板来装,默认路径可以放在/usr/nginx下,这样就可以随便来配置网站相关的信息了。 如:网站:http://…

    Nginx 2023年4月13日
    00
  • 详解常用的nginx rewrite重写规则

    我来为您详细讲解“详解常用的nginx rewrite重写规则”的完整攻略,包含两条示例说明。 什么是nginx rewrite重写规则? 在Nginx中,rewrite重写规则是一种非常强大的功能。它可以让站点管理员通过重写URL路径,实现URL的伪静态、反向代理等功能。 rewrite语法 Nginx的rewrite语法是这样的: rewrite reg…

    Nginx 2023年5月16日
    00
  • Nginx处理http请求的11个阶段

    nginx将一个HTTP请求分为11个处理阶段,这样做让每个HTTP模块可以仅仅专注于完成一个独立,简单的功能。而一个请求的完整处理过程可以由多个HTTP模块共同合作完成。可以极大的提高多个模块合作的协同性,可测试性,可扩展性。换言之,nginx在处理每一个http请求,和配置文件上的顺序没有关系。 post-read 接受到完整的http头部后,读取请求内…

    Nginx 2023年4月10日
    00
  • 总结Nginx 的使用过程中遇到的问题及解决方案

    总结Nginx的使用过程中遇到的问题及解决方案 问题一:Nginx反向代理配置完成后,无法将请求转发给目标服务器 解决方案: 步骤1: 检查Nginx配置文件 首先,我们需要检查Nginx配置文件,确保以下几点: upstream中定义的服务器IP和端口是否正确 proxy_pass中的URL是否正确。 检查listen端口是否与目标服务器端口匹配 检查文件…

    Nginx 2023年5月16日
    00
  • nginx 配置laravel框架域名配置

    server { listen 80; server_name admin.meiquick.local.com; #charset koi8-r; # access_log /var/log/nginx/admin.meiquick.local.access.log main; # error_log /var/log/ngix/admin.meiquic…

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