搭建算法接口及访问——Nginx、fastapi、postman配置使用

本文章介绍了如何搭建一个简单的算法接口,以及如何测试访问接口。

一、nginx简介

1. 什么是 nginx 和可以做什么事情

Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。

其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

2.Nginx 作为 web 服务器

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

Nginx是什么?Nginx介绍及Nginx的优点 - LNMP一键安装包

3. 正向代理

Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。

需要在客户端配置代理服务器进行指定网站访问

4. 反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。

我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。

二、nginx配置文件介绍

第一部分:全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。

比如上面第一行配置的:

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

第二部分:events块

比如上面的配置:

events {
    worker_connections  1024;
}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。**

上述例子就表示每个 work process 支持的最大连接数为 1024.

这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:

	http {
	    include       mime.types;
	    default_type  application/octet-stream;
	    sendfile        on;
	    keepalive_timeout  65;
	
	    server {
	        listen       80;
	        server_name  localhost;
	
	        location / {
	            root   html;
	            index  index.html index.htm;
	        }
	        error_page   500 502 503 504  /50x.html;
	        location = /50x.html {
	            root   html;
	        }
	    }
	}

这算是 Nginx 服务器配置中使用最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http 块也可以包括 http全局块、server 块。

  • http全局块

http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

全局 server 块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

  • location 块

一个 server 块可以配置多个 location 块。

这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

location 指令说明

该指令用于匹配 URL。

语法如下:

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

4、~^:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~*标识。

本文省略了nginx的安装流程,许多博主都有详细的介绍,在此就不再赘述。

前两段学习引用了CSDN博主「java冯坚持」的原创文章,以下为详细链接

原文链接:https://blog.csdn.net/qq_40036754/article/details/102463099

三、nginx配置文件具体配置

1.修改配置文件

/etc/nginx/sites-available/ 目录下,找到nginx.conf文件,通过Linux指令:sudo vi nginx.conf 向文件中写入配置:(可自行按照自己的安装路径查找配置文件)

进入文件后按 i 键开始编辑

写入配置,配置示例如下(只写location块):

server {
   listen 80;
   server_name localhost;  # 填写购买的端口号 IP

   location ~ ^/nzz{  # /nzz为自己命名的端口名,在创建算法接口时使用
		proxy_pass http://localhost:10123;  # 10123为设置的端口号port
        proxy_read_timeout 300s;  # 当服务器响应时间较长,可设置延迟接收时间防止超时
        proxy_send_timeout 300s;
		proxy_http_version 1.1;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

esc 键退出编辑并输入 :wq 保存并退出

2.校验配置文件

检查配置是否有效:使用指令 sudo nginx -t

如果一切正常,应该会看到 syntax is okay 和 test is successful

3.重启nginx


重启Nginx:使用指令 sudo systemctl restart nginx

四、Fastapi与Uvicorn调用


下面使用一个简单的算法演示一下接口的配置。

from fastapi import FastAPI, HTTPException
import uvicorn, json, datetime
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    number1: int
    number2: int

def perform_algorithm(data: Item):
    # Your algorithmic logic here
    # Example: return the sum of two numbers
    return data.number1 + data.number2

@app.post("/nzz")  # 此处括号内填入nginx配置文件的localtion端口的命名
async def nzz(item: Item):
    try:
        result = perform_algorithm(item)
        return {"result": result}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))


if __name__ == '__main__':
    uvicorn.run(app, host='0.0.0.0', port=10123, workers=1)

五、使用postman测试接口


使用postman测试一下算法接口是否可以正常使用。

  1. 搭建算法接口及访问——Nginx、fastapi、postman配置使用_第1张图片
  2. 1. 创建新窗口;

2.设置method类型,与上面代码提到的method一致;

@app.post("/nzz")  # 此处括号内填入nginx配置文件的localtion端口的命名
async def nzz(item: Item):

3. 输入server_name/端口的命名;

4. 点击Body,此处窗口填写算法可以处理的数据,这里只介绍简单的接口测试,其他标签的作用有机会再做postman的详细使用说明。

5. 按照算法需要的json格式或者其他数据格式输入到窗口中;

6. 点击send即可将数据提交到服务器中处理,在窗口下方的对话框中可以看到服务器返回的结果。

搭建算法接口及访问——Nginx、fastapi、postman配置使用_第2张图片

至此,完成搭建一个简单的算法接口,以及访问接口。

你可能感兴趣的:(nginx,fastapi,postman)