前言
看到这里你是不是很懵逼,是不是不知道这个有什么作用,是不是连Unix Socket是啥都不知道
诶,是不是很熟悉,原来Apache调用PHP就是使用的unix socket
那么,unix socket是什么呢?
Unix Socket
Unix Socket是一种Socket方式实现进程间通信(IPC)的功能,与普通的网络socket相比,不需要进行复杂的数据打包拆包,校验和计算验证,不需要走网络协议栈,而且安全可靠
比如常见的PHP的Socket文件 /tmp/php-cgi-74.sock
如上图,Apache通过unix:/tmp/php-cgi-74.sock
与PHP通信,再将通信内容以fastcgi形式处理
但坏处显然就是,这只能在本地使用,因为unix socket地址为文件路径
所以,Cloudreve + Unix Socket就可以很好地取代http反代
而且很明显,这比http反代快得多且稳定得多
Cloudreve
这很简单,你只需要改动一点点配置文件
Apache
我很热爱Apache
这是我原来的反向代理配置,反代127.0.0.1:5212
<IfModule mod_proxy.c>
AllowEncodedSlashes NoDecode
ProxyPass / "http://127.0.0.1:5212" nocanon
</IfModule>
在打开Cloudreve的Unix Socket后,我改变了我的反向代理配置
<IfModule mod_proxy.c>
AllowEncodedSlashes NoDecode
ProxyPass / "http://unix:/tmp/cloudreve.sock" nocanon
</IfModule>
请切记修改配置文件后重启Apache
service httpd restart
# 或
systemctl restart httpd
Nginx
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5212;
# 如果您要使用本地存储策略,请将下一行注释符删除,并更改大小为理论最大文件尺寸
# client_max_body_size 20000m;
}
修改后:(未经测试请慎重使用)
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unix:/tmp/cloudreve.sock;
# 如果您要使用本地存储策略,请将下一行注释符删除,并更改大小为理论最大文件尺寸
# client_max_body_size 20000m;
}
你可以前往https://pan.ahdark.com测试效果,这是我的私有云盘(不开放注册)
Cloudreve 的 Unix Socket Support还是有点问题
启动和停止时不会自动删.sock
而且,文档给的sock路径是
/run/cloudreve/cloudreve.sock
,但/run/cloudreve
不是默认存在,如果这么设置那就会因No such files of dictionary而无法运行。所以必须手动创建目录。正常情况下 这个sock在关闭时会自动删除
但是我这边不会 而且曾经跟Aaron说过这个事情
我实测免费的可以Pro不行,就离谱
要是用 Caddy 该怎么配置?
我不会