2019年4月

申请微信开放平台的 第三方平台(门槛比想象中要低),配置授权后的响应接口路径,要求格式如下

通过该URL接收公众号或小程序消息和事件推送,该参数按规则填写(需包含/$APPID$,如www.abc.com/$APPID$/callback),实际接收消息时$APPID$将被替换为公众号或小程序AppId。

如果授权到我平台的公众号ID是 gh_abcdefg01234,而我处理公众号消息的程序是 wx.php。授权后,开放平台会把事件和消息推送到

http(s)://mydomain.com/path/gh_abcdefg01234/wx.php

为每一个授权的公众号都物理地部署一个响应脚本不是一个好主意,甚至是一场运维灾难。所以,考虑用rewrite 把公众号的ID 变为 参数推给统一的接口进行处理。

首先我改了设置,把事件和消息接口定义为

https://mydomain.com/wxserivce/$APPID$

然后修改 nginx.conf 的 server {} 部分添加以下规则

#rewrite of wx_3rd_app
location /wxservice/
{
    if (!-e $request_filename)
    {         
        rewrite ^/wxservice\/([^\/]+?)(\/|$) /wxservice/3rd/wx.php?wxid=$1 last;
    }
}

解读以上脚本
location /wxservice/
当请求这个路径时进行检测
if (!-e $request_filename)
如果请求的文件不存在,则触发重写规则
rewrite ^/wxservice\/([^\/]+?)(\/|$) /wxservice/3rd/wx.php?wxid=$1 last;
重写 /wxservice/XXXX/ 把 XXXX 作为参数从定向到 /wxservice/3rd/wx.php?wxid=XXXX 且不是永久重定向(对浏览器而言地址栏显示路径不改变)

也就是说请求
https://mydomain.com/wxserivce/gh_abcdefg01234

等效于请求
https://mydomain.com/wxservice/3rd/wx.php?wxid=gh_abcdefg01234

其实也差别不大,就是看起来逼格有点点不同(误,其实是有现实意义的)

后续:
想尝试修改上例的正则表达式,把请求

/debug/rewrite/xxxxx/fake.php

重写到

/debug/rewrite/get.php?q=xxxxx

规则这样写

rewrite ^/debug\/rewrite\/([^\/]+?)\/fake\.php$ /debug/rewrite/get.php?q=$1 last;

无效报404
检查了很久,怀疑自己对正则表达式的理解和造诣未深(确实是)..最后发现问题不在于正则表达式上
而是后续的php配置和这里产生冲突,证据是重写的最后FLAG last 改为 break 不再匹配后续规则的话,前面的正则匹配没有问题,但PHP的解析却无效了,浏览器直接提示下载了 get.php 的源码。

所以还是得放弃,不用 *.php 结尾则没有问题,替换中段的参数没问题


相关的参考资料

https://www.cnblogs.com/likwo/p/6513117.html

https://blog.csdn.net/u014296316/article/details/81061490

今日配置经历的备忘,依次需要排查的顺序

  • iptables
  • firewalld
  • 域名是否解析正确
  • nginx是否运行
  • 阿里云的安全策略是否已经开通

前4项百度或google会有具体的操作建议,nginx 看 lnmp status 也一目了然

流水账说一下命令的话大概就是

systemctl status firewalld
iptables -L
netstat -an | grep 80
lnmp status

这些都不是今天的原因,直到派工单给阿里客服才告诉我阿里云(不同于腾讯云)还有额外一层安全组策略是在控制台定义端口过滤的

工程师 60841 号 : 您好,查看到实例所属安全组中没有允许80 端口访问的规则,请添加允许该端口访问的规则后再尝试。
添加安全组规则请参考文档:
https://help.aliyun.com/document_detail/25471.html?spm=a2c4g.11186623.6.713.LeJKkB
2019-04-29 12:04:39

操作位置是 : 云服务器 ECS - 网络和安全 - 安全组 - 创建安全组

创建的时候有快速设置,明明看到有面相 webservice的模板,设置后又不见了...需要手动额外添加
添加的方式是安全策略的右则点选 配置规则 然后选中入方向的 http 及 https 服务(对应端口80/443)

QQ截图20190429124914.jpg

最后再确认一遍,在云主机列表(云主机实例) 右则菜单 更多 ,网络和安全,加入安全组 选中刚才创建的策略
QQ截图20190429125110.jpg

确认完成后,实时生效,网站应该可以打开了。

*附阿里的FAQ的一般解决办法
https://help.aliyun.com/knowledge_detail/59367.html#centos

交易所 Bitfinex 又被揭发挪用 Tether(USDT) 7亿美金保证金。导致恐慌全球币圈一夜跌去100亿市值(约5%)。

所以在去中心化、没有ZF、没有银行、没有JC的币圈世界里,谁也不能轻易相信就对了。

以抽身一半的旁观者身份看戏,不敢身居韭菜,因为太心累。
官媒往死里黑,圈内人把黑森林法则厚黑学应用到极致,犹如炼蛊一般。
加密货币能活下来和成长被普遍认可,既是必然又是奇迹。

祝真正有理想有情怀有技术的项目好运。

参考tx地图API文档
https://lbs.qq.com/uri_v1/guide-poiMarker.html

没什么好特别说明的,自己注册一个开发者账号创建appid,获得一个key 就可以在每日的额度内调用这个api,目的是打开腾讯地图并定位在某处坐标。且标注一些自定义信息

然而,我调用出来被定位到了世界地图之外。 汗..
跳过全部的过程说结论,太恶心了...
引用一下文档的原文

参数:coord 必填:是
说明 标注点的位置坐标: lat,lng
注意:纬度在前,经度在后,两值之间用英文逗号分隔。
示例: coord:39.892326,116.342763

你大爷的,都特别说明加注意事项再加范例。我深信不疑了,于是一直在找其他原因..
结果你的实际操作这么骚,竟!然!是!反!!的!!。
正确调用应该是 lonlat ?!!!!

按照文档构建的uri (lat,lng)

https://apis.map.qq.com/uri/v1/marker?marker=coord:23.667477,113.061188;title:清远市清城区凤翔小学;addr:新城B25号区凤翔大道&coord_type=1&referer=2HXBZ-XLJK2-DSDUW-CIXYN-H5JNS-CFF2F

QQ截图20190427005205.jpg

反过来修正的uri

https://apis.map.qq.com/uri/v1/marker?marker=coord:113.061188,23.667477;title:清远市清城区凤翔小学;addr:新城B25号区凤翔大道&coord_type=1&referer=2HXBZ-XLJK2-DSDUW-CIXYN-H5JNS-CFF2F

QQ截图20190427005224.jpg

WELL DONE! 无FUCK可说.

P.S. 其实百度地图的API也是一样反的,同样恶心 Orz.. 会不会是百度的工程师跳槽去了鹅厂?

经验教训只有1句:做人千万不要手贱!

盲写了80多行的js, 运行~~ ..

无论如何函数都提示未定义,看浏览器的F12排除网络问题也排除拼写错误,但就是不认刚写的函数。
查半天浪费几个小时浏览器都刷新爆了。

*国内网有篇博客被转载九万多次的,列举的3个原因并没有鸟用。再次鄙视国内的转载复制黏贴风。

发现只是自己智障用自动补完添加了多余的内容

<script type="javascript" src="js/main.js"></script>

去掉或者修改为 type="text/javascript" 一切正常

<script src="js/main.js"></script>

我给自己跪了,TMD...为了这么无聊的事情熬夜