2023年6月

还是不打算写具体的配置实现。懂的人给思路已经够了,不能助长抄作业。

备忘笔记补充一些安全事项。搭建反代之后发现不请自来了不少 扫描的爬虫,这些可能仅仅是无目的地试探系统漏洞的机器人。
产生日志如下

192.241.236.34 - - [06/Jun/2023:22:16:47 +0800] "GET /owa/auth/logon.aspx?url=https%3a%2f%2f1%2fecp%2f HTTP/1.1" 404 142 "-" "Mozilla/5.0 zgrab/0.x" "-"
138.68.249.116 - - [06/Jun/2023:22:27:38 +0800] "SSTP_DUPLEX_POST /sra_{BA195980-CD49-458b-9E23-C84EE0ADCD75}/ HTTP/1.1" 400 150 "-" "-" "-"
15.204.173.67 - - [06/Jun/2023:22:28:18 +0800] "GET / HTTP/1.1" 403 146 "-" "python-requests/2.25.1" "-"
162.243.128.23 - - [06/Jun/2023:22:32:48 +0800] "GET / HTTP/1.1" 403 146 "-" "Mozilla/5.0 zgrab/0.x" "-"

原本这也没什么,反正这台中继服务器上没有任何数据和有价值的东西。就算被黑了也没有损失。
唯一需要担心的是目前所有请求无差别甩给openAI的 API。
万一被这些爬虫乱搞或者无差别DDos的话,openAI溯源把这个机器IP给拉黑就不好了。

为了避免这种结果的发生,有必要对这些异常的请求全部进行拦截。
拦截的方法也很简单直接,GPT的API要求通过 HEADER Authorization 里附带 key。那么识别有效请求就从这里入手
增加一个访问规则在 vhost 对应 .conf 的 location /{} 里的最前面

上文略

location / {
    if ($http_authorization !~ "^Bearer ") {
        return 403; # 拒绝访问
    }

    # 其他配置
    {略}    
}

下文略

配置完 运行校验

lnmp nginx configtest

Test nginx configure files... nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

检查配置,没问题,重启服务(reload也可以)

lnmp nginx restart

跟踪日志效果如下,不是GPT的请求已经全部拦截了。

113.10.20.171 - - [06/Jun/2023:22:33:23 +0800] "GET / HTTP/2.0" 403 548 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
113.10.20.171 - - [06/Jun/2023:22:33:24 +0800] "GET /favicon.ico HTTP/2.0" 403 548 "https://gpt.XXX.XXX/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"

完美!收工!

给客户搞了一台工控机,要求安全稳定还得不能沾任何盗版。 因业务需求比较单一就给灌了ubuntu 22
没想到试用了一下还挺顺手的,和win11的使用体验差距不大。

如果以后是纯工作用的机器。
单纯的 office全套加VSC之类敲代码 再配浏览器和媒体播放器,
不玩游戏不装steam 也不涉及网银就能满足需要的话。

搞这么一台似乎也不错。

真的觉得不错。
emmm~ 也可能是我错觉,当年我摸 mac mini 也有过这样的错觉,最后还是吃灰

几天前就得到消息了,实在令人惋惜。戳人的是那句大写加粗的 ON BOTH SIDES.

下面是关站公告

Hello guys,
We would like to inform you that we have decided to shut down our site.
The past 2 years have been very difficult for us - some of the people in our team died due to covid complications,
others still suffer the side effects of it - not being able to work at all.
Some are also fighting the war in Europe - ON BOTH SIDES.
Also, the power price increase in data centers in Europe hit us pretty hard.
Inflation makes our daily expenses impossible to bare.
Therefore we can no longer run this site without massive expenses that we can no longer cover out of pocket.
After an unanimous vote we've decided that we can no longer do it.
We are sorry :(
Bye

感恩,怀缅!

1024通用致敬: 感谢大佬,好人一生平安!

OpenAI提供了billing相关的接口,用api key 查询账号的用量和额度。但统计数据是针对账号而不是key的,因此当一个账号有多个keys 的情况下无法分辨每个key用量的多少。这是定论,也是openai论坛呼声很高的一个需求。

How to track API usage and cost by API key?

既然有需求在,那么来解决一下。说下我的思路

我需要把API分开给不同的应用或者分享给不同的人,我需要知道他们分别的使用情况,有没有被滥用或闲置。

思路

  1. 搭建 Nginx反代,让所有的API请求经过这台代理。
  2. 通过 Nginx的访问日志捕获所有的请求,包括 key信息
  3. 对日志进行分析统计,统计key的请求数量和发送的信息量

额外地,还需要工具对apikey批量查询用量,这里用别人现成的

https://github.com/ClarenceDan/openai-billing

已知缺点和风险

  1. 需要在可控条件下才具备统计意义,如果APIKey被拿去在其他地方部署不经过代理,请求记录无法被捕获。
  2. 安全风险,key信息保存在日志和数据库中时,有泄露的风险。
  3. 用量计量不精准, 只能大概统计到使用频率。只有 用户->GPT单向请求(用户输入的信息量),但AI返回的信息量长度没有记录。

具体实现:

(还没写)

流水账,以下步骤均在 chatGPT指导下完成

  • 修改 nginx.conf 的 log_format 添加 header http authorization 信息
  • 启用 logrotate 服务对日志文件定期进行分卷(不然日志太大很难进行分析)
  • python脚本对分卷归档的日志文件做扫描分析,统计用量写入mysql
  • cronjob 定时执行python脚本(在logrorate 每次执行后)