avatar
Articles
288
Tags
201
Categories
0

karr's blog
Search

karr's blog

nginx rewrite 与 proxy_pass 结合使用
Created2024-07-09
问题描述有这么一个需求,我需要将一个请求重写到另一个地址,然后再将这个地址代理到另一个服务。这个需求在实际开发中是很常见的,比如我们需要将一个旧的接口地址重写到新的接口地址,然后再将新的接口地址代理到后端服务。 如:请求 http://example.com/v1重写到 http://example.com/v2 然后再将 http://example.com/v2 代理到后端服务 http://127.0.0.1:8080/v2 解决方案在 Nginx 中,我们可以使用 rewrite 指令和 proxy_pass 指令来实现这个需求。 12345678server { listen 80; server_name example.com; location /v1/ { rewrite ^/v1/(.*) /v2/$1 break; proxy_pass http://127.0.0.1:8080 } 详细的参数说明: $1:匹配的第一个括号中的内容,即请求的路径。break:表示匹配成功一次后就停 ...
/bin/sh^M: bad interpreter: No such file or directory
Created2024-07-08
This worked for me: Open file /usr/local/bin/brew with vi (vi /usr/local/bin/brew)While on vi issue this commad (via esc or :) :set fileformat=unixClose file on vi via :wq!The brew command should be OK now. Regards.
git提交commit message规范
Created2024-07-07
业界通用的 git 提交规范有哪些? 1.commitizen AngularJS 在 github上 的提交记录被业内许多人认可,逐渐被大家引用。 格式:type(scope) : subject scope选填表示commit的作用范围,如数据层、视图层,也可以是目录名称subject必填用于对commit进行简短的描述type必填表示提交类型,值有以下几种: feat - 新功能 feature fix - 修复 bug docs - 文档注释 style - 代码格式(不影响代码运行的变动) refactor - 重构、优化(既不增加新功能,也不是修复bug) perf - 性能优化 test - 增加测试 chore - 构建过程或辅助工具的变动 revert - 回退 build - 打包
MySQL 8.0 及以上版本默认启用了 ONLY_FULL_GROUP_BY SQL 模式,这要求 SELECT 子句中的所有列要么出现在 GROUP BY 子句中,要么在聚合函数中使用
Created2024-07-03
实际生成中遇到的sql问题,记录一下。包含场景复现sql,隐藏实际数据。 解决方法方法一:修改 GROUP BY 子句 将 sys_user.real_name、swimplat_member_record.cost_count 和 swimplat_member_ticket.type 添加到 GROUP BY中。但是这可能会返回更多的行,具体取决于这些列的值是否唯一。 123456789101112131415SELECT sys_user.real_name AS 姓名, sys_user.phonenumber AS 电话, swimplat_member_record.cost_count AS 消费次数, swimplat_member_ticket.type AS 套票类型FROM swimplat_member_recordLEFT JOIN swimplat_member_card ON swimplat_member_card.id = swimplat_member_record.member_card_idLEFT JO ...
多种编程语言接入ChatGPT详细教程:Python、JavaScript、Java、C#
Created2024-07-01
使用多种编程语言接入 ChatGPT 的详细教程准备工作API 密钥获取要接入 ChatGPT,首先需要一个 OpenAI API 密钥。请按照以下步骤获取你的 API 密钥: 访问 OpenAI 官网. 登录你的账号。如果没有账号,注册一个新账号。 在用户界面中导航到“API 密钥”页面。 创建一个新的 API 密钥并将其保存到安全的地方。 安装和设置为了使用 OpenAI 的 API,你需要安装相应的库和工具。以下是每种语言的具体安装步骤。 Python 接入安装库在使用 Python 调用 OpenAI API 之前,你需要安装 openai 库。你可以使用以下命令通过 pip 安装它: 1pip install openai 示例代码下面是一个简单的 Python 代码示例,展示如何调用 ChatGPT API: 123456789101112import openaiopenai.api_key = "你的API密钥"response = openai.ChatCompletion.create( model="gpt-4", ...
hexo网站提高SEO优化方法
Created2024-07-01
主要步骤 添加站点地图 sitemap.xml文件和搜索机器人文件robots.txt 提交站点到搜索引擎(百度和谷歌) hexo针对搜索的优化 添加站点地图 sitemap.xml1.添加hexo插件 12npm install hexo-generator-sitemap --savenpm install hexo-generator-baidu-sitemap --save 2.修改_config.yml配置 1234sitemap: path: sitemap.xmlbaidusitemap: path: baidusitemap.xml 搜索机器人文件robots.txt在source目录下新建robots.txt文件,文件内容如下: 123456789101112131415User-agent: *Allow: /Allow: /archives/Allow: /categories/Allow: /tags/ Allow: /resources/ Disallow: /vendors/Disallow: /js/Disallow: /css/Disallow ...
md5彩虹表奇妙的比喻
Created2024-06-30
如果将 MD5 哈希后的密文比作一把锁,暴力破解的方法就是现场制作各种各样不同齿形的钥匙,再来尝试能否开锁,这样耗时无疑很长很长。。。 我以前错误理解的 “彩虹表”,是事先制作好所有齿形的钥匙,全部拿过来尝试开锁,这样虽然省去了制作钥匙的时间,但是后来发现这些钥匙实在是太多了,没法全部带在身上。 而真正的彩虹表,是将钥匙按照某种规律进行分组,每组钥匙中只需要带最有特点的一个,当发现某个 “特征钥匙”差一点就能开锁了,则当场对该钥匙进行简单的打磨,直到能开锁为止。这种方法是既省力又省时的。
原生 js 解析 jwtToken 获取 token 中携带的信息
Created2024-06-26
1234567const jwtToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiZXhwIjoxNzE5NDA0MDU2fQ.CZcJMXS7qYDqjJk9Dt3C3WcfmH2a4-79Q-Zenpv0jB0";let strings = jwtToken.split("."); //截取token,获取载体const userinfo = JSON.parse( window.atob(strings[1].replace(/-/g, "+").replace(/_/g, "/")));console.log("userinfo", userinfo);
python不验证密钥直接解析jwtToken第二段的内容,通过base64解析
Created2024-06-26
12345def test01(): token = "t1.t2.t3" token_body = token.split('.')[1] result = json.loads(base64.b64decode(token_body + '==').decode('utf-8')) print(result)
fastapi 在响应后如果还有未被执行的 async task 将会自动执行
Created2024-06-26
场景复现123456789101112async def async_test(): time.sleep(2) print("async_test", time.time()) return "success"@router.post("/test", summary="test")async def test(): task = asyncio.create_task(async_test()) # await asyncio.gather(task) time.sleep(5) return "success" 浏览器访问 /test 路由,会发现,在 5 秒后返回响应 “success” ,接着 async_test 会自动被执行,于 2 秒后打印日志。
1…567…29
avatar
karr
世界那么大,我想去看看。
Articles
288
Tags
201
Categories
0
gitee
Announcement
This is my Blog
Recent Post
Git报错: Failed to connect to github.com port 443 解决方案2025-03-30
AI Agent 系统架构图2025-03-28
固定整个页面只有100%的高度,不能进行下拉,当组件的内容超过100%时候在个自组件内部加上滚动条2025-03-12
html保证背景色铺满整个页面2025-03-12
importlib.import_module强制从文件加载2025-03-07
Tags
vue3 滚动 错误码 GROUP BY hexo java jwt 抖音 filter 架构 gap lock 前端 opencv Windows unicode Android Studio javascript 优化 vue 救猫咪 react-props-warning json_extract uvicorn 线程 图片去重 JSON mysqlclient npm Mutable go aiohttp rewrite 疫情防控 操作系统 滚动条 OTP 无人机 ORM text css
Archives
  • March 20256
  • February 20252
  • January 20253
  • November 20242
  • October 20243
  • September 20247
  • August 202410
  • July 202423
Info
Article :
288
UV :
PV :
Last Update :
©2024 - 2025 By karr
Framework Hexo|Theme Butterfly
Search
Loading the Database