搭建经典的 v2ray + tls websocket + caddy https 组合 

最近入手了一台 浩航互联(贵州才智浩航网络科技有限公司)的香港沙田机房的VPS,PCCW 线路,延迟很是感人。月租也不贵,打完折也就34块钱左右。很是兴奋~

不过用了一段时间,发现用来做网站(比如我在上面搭的IPA server) 是很不错,访问也算给力。就是偶尔也需要用它来翻个墙啥的就感觉不给力了。单纯的google search 还说得过去,要是想看个youtube 720/1080p 的就感觉垃圾的不行。

按说带宽也没那么差,估计是被运营商QOS了。所以思索了一下,决定给v2ray 上一套混淆。

我当前的v2ray 是最简单的配置,tcp 跑法,无混淆,直接监听外网端口。考虑我本身也在用caddy web server(ipa OTA 强制要求HTTPS),所以干脆就上了v2ray + websocket + caddy 这套经典架构。

首先先从 v2ray json conf 动刀,修改完配置如下:

[[email protected] ~]# cat /etc/v2ray/config.json
{
"inbounds": [{
"port": 9700,
"listen": "127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "UUID_STR***************",
"level": 1,
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",
"security": "none",
"tlsSettingsOmit": {
"serverName": "hh.xzx.im",
"allowInsecure": false
},
"wsSettings": {
"path": "/caonima",
"headers": {
"Host": "hh.xzx.im"
}
}
}
}],
"outbounds": [{
"protocol": "freedom",
"settings": {}
},{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}],
"routing": {
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "blocked"
}
]
}
}


由于我的v2ray 是要作为后置实例跑在caddy 后面的,所以不需要自行校验TLS/SSL 证书的合法性,也就是说 v2ray 和 caddy 的内部通讯是无加密的。
所以 security 字段设为 none 即可。(不依赖caddy 等反代服务器,直接对外提供服务的,需要设成 tls).
那么 tls 相关的配置项 tlsSettings 其实也是不需要的,我懒得删除,就直接把key 名称重命名为一个无意义的名字。。。。

wsSettings 这个字段还是很重要的,按照服务器情况设置即可。

v2ray 的配置搞定后,就是改caddy 的配置,我的这台caddy 跑了一个ipa server,已经反代了一台 nodejs 实例。所以要额外做点手脚。修改完的配置如下:

[[email protected] ~]# cat /etc/caddy/Caddyfile
hh.xzx.im {
root /root/ipa-server/upload
rewrite {
if {path} is /
# proxy v2ray first
if {path} not /caonima
to /proxy/{uri}
}
rewrite {
# proxy v2ray first
if {path} not /caonima
to {path} /proxy/{uri}
}
proxy /proxy 127.0.0.1:8080 {
#except /proxy
without /proxy
#transparent
}
proxy /caonima 127.0.0.1:9700 {
#preset websocket
websocket
header_upstream -Origin
}
}


我单独开了一个 /caonima 的二级路径去反代转发到 v2ray 的流量,其他的保持不变。

如果你是新安装的caddy 或者 你打算用一个新的域名单独去做反代,那么配置上则不需要这么麻烦。

直接

xxx.domain.tld {
proxy / 127.0.0.1:PORT### {
websocket
header_upstream -Origin
}
}


这样即可。简单明了~

两个配置都改好后,都重启下各自的进程基本就生效了。接下来就是客户端怎么用最新的配置连过去了。

每个版本的客户端设置的方式/界面大同小异。我用的是 V2RayX - GUI for V2Ray on macOS. 我觉得挺不错的,很棒。

基本的套路就是 先把端口号改了 因为是 https ,改成 443.
然后是协议,之前是 tcp,现在是 websocket.
最后是 websocket 和 TLS 证书 的一些设置,指定正确的 hostname即可。
UUID 啥的,因为都没动,所以不用改。

我的改完的配置如下(主要是出站的节点配置):

{
"outbounds": [{
"sendThrough": "0.0.0.0",
"mux": {
"enabled": false,
"concurrency": 8
},
"protocol": "vmess",
"settings": {
"vnext": [{
"address": "hh.xzx.im",
"users": [{
"id": "UUID_STR*********************",
"alterId": 64,
"security": "auto",
"level": 1
}],
"port": 443
}]
},
"tag": "HongKong",
"streamSettings": {
"wsSettings": {
"path": "\/caonima",
"headers": {
"Host": "hh.xzx.im"
}
},
"tlsSettings": {
"allowInsecure": true,
"alpn": [
"http\/1.1"
],
"serverName": "hh.xzx.im",
"allowInsecureCiphers": true
},
"security": "tls",
"network": "ws"
}
}]
}


保存配置,打开 https://www.google.com/, 加载完成。嗯,看起来一切OK.
我还测试了一下 youtube.com,速度果然有了很大的改善…… 真的是醉了~

本文撰写和实践时参考了以下文章:
https://v2ray.com/chapter_02/01_overview.html
https://www.feiqy.com/v2ray-best-config/
https://caddy.community/t/how-to-set-proxy-except-root-directory/3008
[ ] ( 111 次浏览 ) 永久链接 ( 2.8 / 64 )
解决 caddy http server 没有 try_files 标识符 的坑逼问题 

最近由于想给老的ipad mini 1 安装微信,由于app store 里面的最新版本已经不兼容mini 1 了,便打算自己搭建一个 https://www.diawi.com/ 这样的ipa server.

在github 找到了一个国人开发的nodejs 版本的。前端用一台web server 反代node 后段。本来想用nginx的,毕竟方便。不过因为坑爹的苹果要求站点必须有SSL证书,所以便选择了自带SSL续期的caddy server.不过倒也方便。

都下载,安装,配置,部署后,发现一切ok,就是安装不了。

很是奇怪,于是下载了app 对应的plist文件(https://hh.xzx.im/plist/ce4b37087f3b429d.plist),打开看了一下。

发现由于是反代,里面的url 都是 127.0.0.1/xxx 这样的。。。

编辑 config.js 把publicURL 改成外网caddy 的入口地址.如下:

[[email protected] ~]# cat ipa-server/config.js
const path = require('path')

module.exports = {
debug: process.env.NODE_ENV !== 'production',
host: "0.0.0.0",//process.env.HOST || '0.0.0.0',
port: "8080",//process.env.PORT || 8080,
publicURL: "https://hh.xzx.im",//"process.env.PUBLIC_URL,
uploadDir: process.env.UPLOAD_DIR || path.resolve(__dirname, 'upload'),
}


重启node,发现还是不能安装...诧异~~~

试着下载了下plist 文件中的ipa 包,提示 404 not found.

这才恍然大悟,原来caddy 的反代没有本地文件(夹)优先的策略,一股脑全部发给node 了。

网上查阅了相关资料,发现很多人都这个需求,也提供了对应的解决方案,修改caddyFile 配置,如下:

[[email protected] ~]# cat /etc/caddy/Caddyfile
hh.xzx.im
root /root/ipa-server/upload
rewrite {
if {path} is /
to /proxy/{uri}
}
rewrite {
to {path} /proxy/{uri}
}
proxy /proxy 127.0.0.1:8080 {
#except /proxy
without /proxy
#transparent
}


保存配置后,systemctl restart caddy 重启caddy.再次尝试下载,下载对话框弹出来了,ok,完美~

确认一切正常后,ctrl + c 退出 npm start 控制台。

使用 nohup node index.js & 命令已后台方式运行 ipa-server.

本文撰写时参考了以下文章:
https://github.com/iineva/ipa-server
https://github.com/mholt/caddy/issues/695
https://caddy.community/t/unable-to-access-root-path-when-using-systemd/756
https://caddy.community/t/caddy-try-files/3248/5
[ ] ( 98 次浏览 ) 永久链接 ( 3 / 66 )
终于把网站烦人的丢失登录状态的问题给干掉了 CAO 

这小博客自从套了cloudflare 的cdn 后我就一直觉得很奇怪,每次的登陆状态很不稳定,点一下按钮身份变成游客了,再刷新一下又变回来了。再刷新一下,又tmd 回去了。。。。

所以,每次写好文章后,都是习惯性的ctrl + c 保存一下,免得点击一下提交按钮直接让我重新登录了。千辛万苦码的字直接消失了。。。

至于原因,其实我大概已经猜到了,应该是CF 这边的ip 池的问题,每次随机策略分配过来的ip不固定,就导致了这样的人间惨剧。

今天正好有空就找一下代码块的位置,把它修复了。

如图(完全印证了我的想法):







保存退出,登录一下后台,拼命的狂按F5,嗯,不错,状态没掉。
[ ] ( 91 次浏览 ) 永久链接 ( 3.1 / 65 )
pecl 安装 swoole 后编译 swoole_async 提示找不到 php_swoole.h 头文件的坑 

swoole 这个扩展可以说是让php 焕发了第二春,打破了我对php 的一贯“慢”的看法。

有兴趣的朋友可以去swoole.com 看看文档,这里不赘述。

swoole 安装最原始的方法就是下载源码编译安装,和其他的php 扩展一样。不过,我现在越来越懒,比较喜欢通过 PEAR 安装扩展。 e.g. pecl install swoole

不过,从swoole 4.3.0 版本开始,开发团队对swoole 进行了切割,把异步组件的模块单独放入了一个项目 swoole_async.

毕竟我也知道,同步写法+协程 才是swoole 的核心。异步的模块用的人不多,毕竟不是每个人都习惯 nodejs 的 callback hell 写法的……

那么如果你在以后的版本上要使用到异步的组件的话,就得自己在格外安装一下 swoole_async module.

很遗憾的是,至少到目前为止,开发团队还没有把它提交到 PEAR 仓库,也就是说你只能下载源码,自己编译安装了。

这本来没啥,我就下载了,但是问题出现了,make 的时候提示找不到 "php_swoole.h" 头文件。

我仔细查看了相关目录,/usr/include/php/ext/swoole ,确实没有这个文件。

后来我才发现原因,因为我的swoole 是 通过 PEAR 安装和升级的。难道pecl 没有帮我自动安装相关的头文件?

我手动下载了swoole 的源码包,编译安装了一下,果然在我 make install 的时候已经告诉我 头相关的文件已经被写入了系统指定目录下面。

ldconfig -v,刷新LIB库.

再去 swoole_async 目录下尝试 make,果然这个错误消失了……

成功了编译出了 swoole_async.so 链接库。

我日,这就坑了,本来想省事,直接 PEAR 装,现在为了异步模块还得走回头路。PEAR 是tmd 真的坑!!!!
[ ] ( 104 次浏览 ) 永久链接 ( 3 / 69 )
关闭站点评论功能 (防垃圾机器人评论) 

我这个小博客一直有垃圾评论我是知道的,只不过这两天越来越多。几百上千条。。。。

验证码功能可能是废的。

以前不去弄它是因为反正我也不看,我一般就是记录完一个事情就直接关了,也没感觉到垃圾评论有多烦人。

今天顺手弄了下Google Webmaster,接到了一个关于站点被注入的警告。如图:


才开始重视起来。

问题来了:
我这个小博客数据持久华没有使用任何关系型数据库....是存储在纯文本里面的。因此我不可能简简单单的用几条sql 就 delete 掉那些垃圾数据。

而且坑爹的是,这个小博客的后台还没有提供评论管理这样的一个聚合模块,我的一个一个的文章点进去,一个一个评论删除。没有全选之类的。

研究了一下网站文件目录,发现它的每条评论都是以“commentYY-MMDD-xxxx.txt” 这样的格式存放的。

我看了一下,大部分的垃圾评论都是17,18,19年这几年产生的,所以我就一刀切的把这段时间的评论文件都给删除了,无论内容好坏。


[[email protected] linux_xiazhengxin_name]# find . -name "comment19*.txt"
./content/12/04/entry120406-221549/comments/comment190123-064343.txt
./content/12/04/entry120416-191734/comments/comment190118-175419.txt
./content/12/04/entry120416-191734/comments/comment190118-204718.txt
./content/12/04/entry120416-191734/comments/comment190119-132050.txt
./content/12/04/entry120416-191734/comments/comment190119-195101.txt
./content/12/04/entry120416-191734/comments/comment190119-233843.txt
./content/12/04/entry120416-191734/comments/comment190120-032256.txt
./content/12/04/entry120416-191734/comments/comment190120-035428.txt
./content/12/04/entry120416-191734/comments/comment190120-234336.txt
./content/12/04/entry120416-191734/comments/comment190121-113012.txt
.........
./content/09/07/entry090724-203404/comments/comment190131-050547.txt
./content/09/07/entry090724-203404/comments/comment190131-084334.txt
./content/09/09/entry090905-014037/comments/comment190123-064519.txt
./content/09/09/entry090905-014037/comments/comment190123-064647.txt
[[email protected] linux_xiazhengxin_name]# find . -name "comment19*.txt" -exec rm -f {} \;


删完之后,感觉世界都清净了。

此外,考虑到这个提交评论的验证码应该是个摆设,而我也没心思去换一个验证机制,再加上博客也没啥人气,就干脆把评论功能关了。省事!!!
[ ] ( 99 次浏览 ) 永久链接 ( 4.3 / 223 )

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 下一页> >>