记录 URL 跳转携带原路径

在使用我的笔记中,发现登录之后,无法跳转到登录前要到达的页面。 首先,检查 Nginx 配置,查看是否配置了携带登录前的 URL 路径。查看之后,发现没有配置,现在将其配置好,配置如下: location @error401{ return 302 https://$host/login/?url=https://$host$request_uri; } 配置好后,继续测试,发现登录后,还是调整到首页,并没有调整到登录前的页面。检查登录应用,发现登录应用没有取 URL 参数,所以直接跳转到根路径。 将应用配置好,取 URL 参数,当 URL 参数不为空时,跳转到该 URL 路径。 url := c.Query("url") if url != "" { c.Redirect(http.StatusFound, url) } else { c.Redirect(http.StatusFound, "/") } 将应用打包,发布到服务器继续测试,还是失败,看日志,浏览器请求时是携带 URL 参数的。 GET /login/?url=https://www.91demo.top/zh-cn/private/project/visit/ch1.html 一度对人生产生怀疑,为啥我的不可以呢?我是参考网上教程配置的,网上教程使用 Python 举例,我这里使用 Go 实现,原理上应该是可行的啊。 经过多次细读对比,发现自己的 GET 请求路径是/login/,POST 请求路径是/api/doLogin,而网上教程 GET 和 POST 请求都是/login/,将自己的应该重新调整,无论 GET 请求还是 POST 请求都调整为/login 路径。当将应用推到服务器时,发现浏览器上显示跳转次数过多。排除一番后,将应用路径调整为/login/,Nginx 配置文件也进行了修改,修改为如下配置: location /login/ { proxy_pass http://127.0.0.1:9982/login/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 原来的配置如下: ...

2025-01-01 · 1 min · Eagle

记录无线技术发展史

无线技术的发展史充满了许多重要的里程碑。以下是按时间顺序列出的无线技术发展史中的一些关键事件: 1864 年 - 电磁波理论 詹姆斯·克拉克·麦克斯韦(James Clerk Maxwell)提出了电磁波理论,预言了电磁波的存在。 1888 年 - 电磁波的实验验证 亨利·赫兹(Heinrich Hertz)通过实验验证了麦克斯韦的电磁波理论,成功产生并检测到电磁波。 1895 年 - 无线电报 古列尔莫·马可尼(Guglielmo Marconi)进行了首次成功的无线电报传输,标志着无线通信的开始。 1901 年 - 跨大西洋无线电信号 马可尼成功实现了跨大西洋的无线电信号传输,从英国到加拿大,证明了无线电波可以覆盖长距离。 1933 年 - 频率调制(FM) 埃德温·霍华德·阿姆斯特朗(Edwin Howard Armstrong)发明了频率调制(FM)技术,改进了无线电传输的质量和抗干扰能力。 1947 年 - 蜂窝通信概念 贝尔实验室的研究人员提出了蜂窝通信的概念,奠定了现代移动通信网络的基础。 1973 年 - 第一部手机通话 摩托罗拉的工程师马丁·库帕(Martin Cooper)进行了首次手机通话,使用了一部原型移动电话。 1983 年 - 第一代移动通信(1G) 美国推出了第一代移动通信系统(1G),基于模拟信号的蜂窝网络。 1991 年 - 第二代移动通信(2G) 第二代移动通信系统(2G)在芬兰推出,采用数字信号,提高了通话质量和网络安全性。 1997 年 - Wi-Fi IEEE 802.11 标准发布,标志着 Wi-Fi 技术的诞生,提供了无线局域网(WLAN)解决方案。 2001 年 - 第三代移动通信(3G) 第三代移动通信系统(3G)在日本推出,提供了更快的数据传输速率,支持多媒体通信。 2009 年 - 第四代移动通信(4G) ...

2025-01-01 · 1 min · Eagle

记录项目中某个文件无法删除的问题

这几日,碰到一个奇怪问题,我一篇要删除的文章,在删除文件后,并提交到 git,当我运行 mdbook build 之后,这篇文章的文件又出现了。 然后,我在 Git 中删除,然后再次提交。发现几日后又出现了,我想了一下,中间运行过 mdbook build。 既然这样,我猜想一定是 SUMMARY.md 文件中还存在这篇文章的索引。经检查,果然存在。 所以,下次删除文章时,先删除 SUMMARY.md 中的索引,然后再删除文件,才能完全删除。

2025-01-01 · 1 min · Eagle

将sqlite数据库迁移到postgresql数据库

最近,又想接入 mqtt 的认证,使用 sqlite 数据库的缺陷更明显了。sqlite3 不支持并发,当另一个应用访问时,会提示数据库已经占用。 第一想法是将 sqlite 迁移到 mysql 中去,但是安装了 mysql 之后,发现内存占用很大,我的 1G 服务器都占用 800MB 左右,受不了,这样的话,我的服务器无法再安装其它服务。 然后我又安装了 postgresql,发现内存占用还可以接受,默认没有连接应用的情况下,内存占用 10MB 左右。先观察一下 pg 内存占用是否稳定,现在没有连接,不知道真实情况如何? 这两天看了一下 PG 的教程,并观察了一下 PG,发现运行还是很稳定的。决定使用 PG。 如果采用 PG,需要先将 Sqlite3 的数据迁移到 PG 中去。 这里是我这几天看 Postgresql 记录的,包含迁移 sqlite3 数据到 PG。详情请查看postgresql 数据库 最近又将语音验证码从 Sqlite3 迁移到了 Postgresql,现在不需要同步了,在豆子工具获取 AST 账户就可以直接使用了。 哎,这几天挺累的,但收获颇丰。

2025-01-01 · 1 min · Eagle

配置 Asterisk PJSIP 使用Postgresql

要使用 Postgresql,需要先安装 pg 头文件 yum install postgresql-devel 在 Asterisk 源文件中,执行 ./configure 执行下面的命令,查看 res_config_pgsql 模块有没有选择,没有请先选择。 make menuselect 然后执行 make;make install 在/etc/asterisk/modules.conf 配置文件中,添加 load = res_config_pgsql.so 将源代码中 configs/samples/res_pgsql.conf.sample 复制到/etc/asterisk 目录下,并改为 res_pgsql.conf 文件。修改用户名等参数。 [general] dbhost=127.0.0.1 dbport=5432 dbname=asterisk dbuser=asterisk dbpass=password 修改配置文件/etc/asterisk/extconfig.conf,将下面三项调整为: ps_endpoints => pgsql,general ps_auths => pgsql,general ps_aors => pgsql,general 其它配置文件,参考 sqlite3 数据库的配置。

2025-01-01 · 1 min · Eagle

配置Asterisk 使用数据库存储PJSIP信息

Asterisk 如何将 PJSIP 通道驱动程序与实时数据库存储后端相连接。实时接口允许将 PJSIP 的大部分配置(如端点、auth、aor 等)存储在数据库中,而不仅是 pjsip.conf 配置文件中。 我们假设 Asterisk 安装在 Linux 服务器上,并希望 Asterisk 通过 odbc 连接器连接到 Mysql 数据库。我们还需要安装如下依赖包: unixodbc 和 unixodbc-dev odbc 及其开发包 libmyodbc odbc 到 mysql 接口包 python-dev 和 python-pip python-mysqldb 如果在 Ubuntu 服务器,可以直接通过如下命令安装: # apt-get install unixodbc unixodbc-dev libmyodbc python-dev python-pip python-mysqldb 一旦安装了这些包,你需要使用 make menuconfig 工具检查 res_config_odbc 和 res_odbc 和 res_pjsip_xxx 资源模块被安装。然后执行 ./configure;make;make install 创建数据库,使用 mysqladmin 工具创建一个数据库,用来存储配置信息。 # mysqladmin -u root -p create asterisk 安装 Alembic,可以用来创建配置信息表结构。Alembic 是一个完整的数据库迁移工具,支持升级现有数据库的模式、模式版本控制、创建新表和数据库等等。 # pip install alembic 切换到 Asterisk 源码目录 contrib/ast-db-manage/,它包含 Alembic 脚本。 ...

2025-01-01 · 2 min · Eagle

配置Nginx 基于时间控制网页访问

今天,突发奇想,要控制我的网站在 6:00-23:00 之间访问,其余时间不让访问,为了让我们休息,不要太操劳了。 网上搜索了一番,还真可以,现在就实践一把。 如果要限制 IP,请使用 allow 和 deny 指令。 例如,禁止某个 IP 访问就使用 deny IP,要允许某个 IP 访问就使用 allow IP,禁止所有就是 deny all,允许所有就是 allow all。常见的应用场景,管理后台,工具站等。还有一种方案就是使用防火墙限制,更安全一些。 不满足需求,我们继续搜索时间段限制。 Nginx 提供了一个叫做 ngx_http_time_module 的时间模块,该模块可以帮助我们根据当前时间来对请求进行访问控制。这个时间模块包含了很多有用的指令,如$time_iso8601、$time_local、$time_gmt 等,它们可以用于获取当前服务器时间,并进行时间相关的判断。 现在配置网站在每天 6:00-23:00 访问,当配置网站后,生效了,但是体验很差,就将配置加在了管理后台。 首先,定义一个变量,用于获取当前时间: map $time_iso8601 $currtime { default 0; "~^(\d{4})-(\d{2})-(\d{2})T(0[6-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])" 1; } 上面的配置,使用了 map 模块和正则表达式。map 不能配置在 Server 区块内,请配置在 Http 区块内。 现在,我们将变量$currtime 应用到我们的资源配置中: 这是一种写法,设置一个变量,解决 else 问题。 location / { set $ok 0; if($curr_time=1){ // 访问页面资源 set $ok 1; } # 如果没有匹配到,跳转到这个页面 if($ok=0){ // 访问广告页 } } 我们的需求简单,这里可以简化成 ...

2025-01-01 · 1 min · Eagle

使用Caddy部署网站

Caddy 是一个功能强大、可扩展的平台,用 Go 编写,可为您的网站、服务和应用程序提供服务。 大多数人使用 Caddy 用作 Web 服务器或者代理服务。我是想让我的网站和小程序支持 quic,而 Caddy 是一种解决方案。在使用 Caddy 前,我使用 nginx 作为网站服务器,以及小程序后台接口服务的代理。目前我已经在服务器上部署了 Caddy,并将小程序后台服务和网站都迁移到 Caddy 上。虽然我配置了 HTTP3 协议,但是 HTTP3 并没有生效。网站和小程序可以正常访问,使用的是 HTTP2 协议。我折腾了一段时间,还是没有找到问题点,依旧是 HTTP2 协议或 HTTP1.1 协议。这并没有达到我的初衷。 之所以给大家继续推荐 Caddy,是因为 Caddy 确实有一些优势。我说下在我服务器部署 Caddy 之后的感受吧。首先,Caddy 在配置上要比 Nginx 简单,下面会详细介绍一下 Caddy 配置 Web 服务器和代理。其次,Caddy 天然支持 HTTPS,这对于网站和小程序后台,有很大的优势,特别是小程序后台,微信强制要求必须是 HTTPS。性能这块,可能因为我的网站比较小,我并没有感到太大的差异(凭感觉,没有经过性能工具测试)因为使用 Nginx 或 Caddy,我的网站和小程序访问都非常流畅。网上的帖子说 Nginx 性能会更好,特别是高并发时。在内存使用上,Caddy 要远远大于 Nginx,我的服务器内存比较小,这块非常明显。Nginx 在我服务器上的内存占用在 1MB 左右,而 Caddy 在 20MB 左右。 现在我们讲下 Caddy 如何安装?在 Caddy 的官网上,详细的介绍了 Caddy 的安装方法,我以我的服务器 CentOS7 为例,介绍一下 Caddy 的安装。 ...

2025-01-01 · 2 min · Eagle

使用小程序账号绑定我的客户端

小程序提供登录 API,可以获取小程序的唯一标识(openid)。我们可以通过这个唯一标识(openid)和客户端绑定起来。 豆子碎片小程序是一款内容类小程序。它包含 Golang、Rust、小程序、Web 开发、数据库以及开发环境等内容的文章。现在,它已经成为一个研究学习平台以及内容查找和内容承载平台。 upart-go 项目是用来上传文章到豆子碎片的一个命令行工具。它使用 Golang 开发。可以用来上传文章和管理文章。在使用该工具上传文章时,我们需要进行标识,是谁上传了文章? 以前,我们会提供用户注册服务,让用户使用手机号或者邮箱进行注册。然后通过手机号或邮箱来标识用户。现在,我们还可以使用小程序账号来标识用户,免去用户注册(用户也可能不想不会使用手机号或邮箱注册)。 我以 upart-go 项目文章上传客户端为例,介绍一下它的账号绑定原理。在用户使用小程序后,会调用登录 API 进行自动登录,然后后台会获取用户当前小程序的 openid。当获取到用户 openid 后,就可以唯一标识用户。此时,我们为小程序用户提供一个识别码的功能。识别码用于开放接口,用来识别用户。它基于 openid,生成 icode 和 isecret,分别代表账号和密码。这样当用户使用 icode 和 isecret 调用开放接口时,我们就可以定位到这个用户的 openid,从而定位到用户。我们的客户端可以在配置文件中配置这个 icode 和 isecret。这样当我们调用后台服务上传文章时,我们就知道将文章划分到谁的名下?在小程序中也可以进行浏览和查看。 讲完了原理,我们开始实现功能。我们在客户端中已经实现了通过 icode 和 isecret 识别用户。但我们的客户端还可以进行优化,免去用户创建配置文件以及配置识别码。如何去做呢? 我们启动客户端后,获取客户端主机的 MAC 地址,标识当前的客户端,然后我们提供一个窗口展示小程序码和验证码,小程序码让用户扫描,扫描之后打开的页面会识别当前用户的 openid,在打开的页面填入验证码,我们就可以完成小程序账号和客户端的绑定,是不是很棒? 如果你对这个功能感兴趣,可参考项目,地址为: https://gitee.com/littletow/upart-go

2025-01-01 · 1 min · Eagle

探测手机流量 UDP 是否拦截封禁

最近,自助语音验证码使用手机流量拨打,又没有声音了。 查看了 Ast 星日志,发现连接是正常的,使用 WIFI 拨打正常。于是又各种调整 PJSIP 参数,发现都没有生效。 打开 RTP 日志后,发现 RTP 推送的音频流是发送到公网的,网上搜索,发现通信运营商会拦截封禁 UDP。我猜测大概率是这个造成的。 但是如何探测 UDP 是否真的被封禁了?我想做一个工具。 网上很多内容介绍如何使用 APP 工具探测 UDP,由于不擅长 APP,我想到了微信小程序。可以使用它实现这个功能。 我们想探测移动、联通、电信是否封禁了 UDP,我们需要一个工具,我这里使用微信小程序,在小程序打开后,向后台服务器发送 UDP 端口的请求,后台服务器根据发送的 UDP 端口,发送 UDP 包请求。可以每 500 毫秒发送一个包,发送 10 次,5 秒钟内发送完。在小程序端,按钮发送后,显示加载动画,如何 5s 内没有收到消息,判定 UDP 消息无法送达。显示结果。

2025-01-01 · 1 min · Eagle