• 搭建算法接口及访问——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块

    比如上面的配置:

    1. events {
    2. worker_connections 1024;
    3. }

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

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

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

    第三部分:

    1. http {
    2. include mime.types;
    3. default_type application/octet-stream;
    4. sendfile on;
    5. keepalive_timeout 65;
    6. server {
    7. listen 80;
    8. server_name localhost;
    9. location / {
    10. root html;
    11. index index.html index.htm;
    12. }
    13. error_page 500 502 503 504 /50x.html;
    14. location = /50x.html {
    15. root html;
    16. }
    17. }
    18. }

    这算是 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块):

    1. server {
    2. listen 80;
    3. server_name localhost; # 填写购买的端口号 IP
    4. location ~ ^/nzz{ # /nzz为自己命名的端口名,在创建算法接口时使用
    5. proxy_pass http://localhost:10123; # 10123为设置的端口号port
    6. proxy_read_timeout 300s; # 当服务器响应时间较长,可设置延迟接收时间防止超时
    7. proxy_send_timeout 300s;
    8. proxy_http_version 1.1;
    9. proxy_set_header Host $host;
    10. proxy_set_header X-Real-IP $remote_addr;
    11. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    12. }
    13. }

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

    2.校验配置文件

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

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

    3.重启nginx


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

    四、Fastapi与Uvicorn调用


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

    1. from fastapi import FastAPI, HTTPException
    2. import uvicorn, json, datetime
    3. from pydantic import BaseModel
    4. app = FastAPI()
    5. class Item(BaseModel):
    6. number1: int
    7. number2: int
    8. def perform_algorithm(data: Item):
    9. # Your algorithmic logic here
    10. # Example: return the sum of two numbers
    11. return data.number1 + data.number2
    12. @app.post("/nzz") # 此处括号内填入nginx配置文件的localtion端口的命名
    13. async def nzz(item: Item):
    14. try:
    15. result = perform_algorithm(item)
    16. return {"result": result}
    17. except Exception as e:
    18. raise HTTPException(status_code=500, detail=str(e))
    19. if __name__ == '__main__':
    20. uvicorn.run(app, host='0.0.0.0', port=10123, workers=1)

    五、使用postman测试接口


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

    1. 1. 创建新窗口;

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

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

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

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

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

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

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

  • 相关阅读:
    react 实现拖动元素
    通达OA二次开发手册V12
    Python爬虫之Js逆向案例(13)-某乎最新x-zse-96的rpc方案后续
    JSP教师辅助办公软件教学进程管理系统yeclipse开发mysql数据库bs框架java编程jdbc详细设计
    C++之string类的使用
    贺同学 9 月总结
    Golang源码分析:golang/sync之errgroup
    活动回顾 | BSV区块链在迪拜IEEE区块链研讨会上的精彩表现
    外泌体化合物库
    web:[GXYCTF2019]Ping Ping Ping
  • 原文地址:https://blog.csdn.net/qq_44644549/article/details/132624650