本文章介绍了如何搭建一个简单的算法接口,以及如何测试访问接口。
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。
Nginx是什么?Nginx介绍及Nginx的优点 - LNMP一键安装包
Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。
需要在客户端配置代理服务器进行指定网站访问
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。
比如上面的配置:
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全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
一个 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
在 /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 保存并退出
检查配置是否有效:使用指令 sudo nginx -t
如果一切正常,应该会看到 syntax is okay 和 test is successful
重启Nginx:使用指令 sudo systemctl restart nginx
下面使用一个简单的算法演示一下接口的配置。
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测试一下算法接口是否可以正常使用。
2.设置method类型,与上面代码提到的method一致;
@app.post("/nzz") # 此处括号内填入nginx配置文件的localtion端口的命名
async def nzz(item: Item):
3. 输入server_name/端口的命名;
4. 点击Body,此处窗口填写算法可以处理的数据,这里只介绍简单的接口测试,其他标签的作用有机会再做postman的详细使用说明。
5. 按照算法需要的json格式或者其他数据格式输入到窗口中;
6. 点击send即可将数据提交到服务器中处理,在窗口下方的对话框中可以看到服务器返回的结果。
至此,完成搭建一个简单的算法接口,以及访问接口。