Xiaomage's Blog https://blog.xmgspace.me/ zh-CN This is Xiaomage's Blog. Mon, 29 Jun 2020 20:56:00 +0800 Mon, 29 Jun 2020 20:56:00 +0800 safebox挂了?使用sharelist cookie方式 挂载天翼云盘 https://blog.xmgspace.me/archives/sharelist-189cloud.html https://blog.xmgspace.me/archives/sharelist-189cloud.html Mon, 29 Jun 2020 20:56:00 +0800 Xiaomage 这是一篇迟到的教程...safebox这个API已经挂了一两个月了 大半个月前我就开始准备这篇文章,但博主我最近一直在准备期末考试,就咕到了现在...考试结束了,趁着还没忘干净,赶快记录一下~

天翼云盘在国内算是比较良心的云盘,3月份的时候爆出30T的漏洞让不少人白嫖到了30T的网盘空间,一直到现在都能够使用,官方知道了却一直没有收回。而前一段时间,可能是使用的人数太多,最后一个在Github被公开出来的天翼云盘API safebox终于被官方封锁,而自己以个人身份申请API在两年前就已经成为了不可能的事情。我的下载站之前使用的是TCShare,依赖API运行;现在API被封,当然直接GG。最近终于有时间打理一下博客,想修复一下下载站。

同类的软件有两个,一个是萌咖大佬写的CTList,这个软件使用的是私有API,需要软件激活码才能使用,而大佬最近也在避风头,没有放出新的激活码。另一个就是基于cookie的sharelist了,登录后cookie长期保留,不依赖API。下面就是sharelist安装的过程啦!

下载安装

sharelist是使用nodejs编写的软件,因此安装过程中需要安装npm,npm是一个nodejs包管理器。源代码体积很小,只有几MB;但要想把这源代码跑起来,还要下载很多依赖。npm+各种依赖总共需要约200M空间,硬盘很小的VPS要有充足的空间。(10G小硬盘还没有快照的VPS真是不敢折腾啊,生怕折腾坏了只能重装QAQ...)小硬小内存VPS不建议用docker,dockers相对比较吃系统资源。

sharelist的Github地址在此:https://github.com/reruin/sharelist

强烈建议有基础的人自己下载源码,解压后使用install.sh安装 基础更好的可以按照install.sh中的命令,自己安装

分步安装步骤如下:

  1. 先下载源码到你认为合适的地方:wget https://github.com/reruin/sharelist/archive/master.zip
  2. 解压缩zip文件:unzip master.zip
  3. 给解压缩的文件夹改个名字:mv sharelist-master sharelist
  4. cd进文件夹,这时候就能看到源码了:cd sharelist
  5. 执行install.sh./install.sh

install.sh中最核心的代码只有几行,你也可以自己运行,我只给出了centos7上执行的主要命令,其它系统的可以在install.sh里面提取:

#安装nodejs
curl --silent --location https://rpm.nodesource.com/setup_8.x | bash
yum install -y nodejs

#根据源码中的package.json 用npm安装依赖
npm install
#全局安装pm2,Node.js的流程管理器
npm install pm2 -g

#用pm2启动sharelist 保存配置 并添加到开机启动项
pm2 start app.js --name sharelist --env prod
pm2 save
pm2 startup

你可以使用pm2 list所有正在运行的应用,pm2 stop {id}停止id为{id}的应用的运行。当初我在配置sharelist时,启动了多个应用,VPS的CPU单核直接爆满,系统负载4点多,不要启动多个应用,这一点需要注意。

pm2的更多命令在这里,我只写了用到的一两个,想深入学习的可以参考一下:https://www.jianshu.com/p/6b3b506f7d0a

在执行完install.sh或者手动执行完pm2 startup后,sharelist的安装工作就已经完成,并且已经开始运行了。访问http://{你的服务器IP}:33001就可以看到首次配置界面。如果无法打开http://{你的服务器IP}:33001,提示信息为连接超时,请检查一下防火墙,如iptables设置。

如果你的防火墙为iptables,运行下面的命令可以放行33001端口:

iptables -A INPUT -p tcp --dport 33001 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 33001 -j ACCEPT
service iptables save

下面会图解一下如何配置share list挂载天翼云盘。

配置

sharelist配置

  • 打开http://{你的服务器IP}:33001,你应该能看到下面的界面:

初始化

  • 在如上的界面中设置一个管理口令(密码),自拟标题,最下面的虚拟路径保持不变。

管理界面

  • 打开http://{你的服务器IP}:33001/manage,输入密码后你就能看到这样的界面:
  • 上面的界面中,大部分的选项保持默认即可,只需要修改下面几个小项目:

    1. 验证码识别接口 VPS在登录天翼云时,使用的IP并非你的常用IP,有可能弹出验证登录的验证码。sharelist作者自建的验证码识别接口容易502,建议改成萌咖大佬写给CTList的接口:https://api.moeclub.org/SampleCode 在进行下面的操作前,建议你开全局代理,先人工通过一次验证码,之后VPS登录出现验证码的几率也会降低
    2. 最下面的虚拟路径 第一个选项选择天翼云 账号登陆版 名称随意,建议填写天翼云最后一项挂载路径这样填写://{天翼云盘用绑定的手机号}/{需要被挂载的文件夹id}?password={天翼云密码,建议密码中不要含有特殊字符,只使用大小写+数字}不包含大括号。需要被挂载的文件夹id可以从电脑浏览器登录后,进入需要挂载的文件夹,浏览器地址中最后的一串数字就是文件夹id,如下图所示:
  • 保存,sharelist的设置就完成了。访问http://{你的服务器IP}:33001就可以看到挂在好的文件夹惹~

Nginx配置

现在每次访问挂在好的天翼云盘,都要在地址栏中输入http://{你的服务器IP}:33001,服务器IP地址难以记住,分享出去还会造成服务器IP泄露,既不方便又不安全。我们就可以配置Nginx,让Nginx反向代理sharelist,由Nginx接收访客请求,再向sharelist后端转发请求。

打开Nginx的配置文件,在server中合适的位置配置反向代理:

  location / {
    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:33001;
    proxy_set_header Range $http_range;
    proxy_set_header If-Range $http_if_range;
    proxy_no_cache $http_range $http_if_range;
  }

现在,访问你Nginx中绑定的域名,就能看到sharelist的界面了,不用记住IP地址和端口号,也可以上cloudflare提高服务器安全性。教程到这里就全部结束了,Enjoy it!遇到问题可以在评论区留言或在sharelist官方issue提问~

参考资料

sharelist官方文档 https://github.com/reruin/sharelist

]]>
0 https://blog.xmgspace.me/archives/sharelist-189cloud.html#comments https://blog.xmgspace.me/feed/archives/sharelist-189cloud.html
使用自签名证书 防止服务器IP地址泄露 https://blog.xmgspace.me/archives/generate-a-self-signed-certificate.html https://blog.xmgspace.me/archives/generate-a-self-signed-certificate.html Sun, 31 May 2020 21:39:00 +0800 Xiaomage 最近比较忙,家里有一些事情,各个专业课也都开始做实验,好不容易找出时间准备写篇文章,结果我买的二手搬瓦工还被找回了(一定不要买二手搬瓦工!!详情可以看我在Hostloc发的帖子)......又重新购置服务器,安装LNMP,一切重新开始......还好有之前的文章做记录,少走了些弯路。

新的服务器提供商是AkkoCloud,一家国人二次元IDC商家,去年九月份开始运营,没有什么黑历史,于是就上了这家的圣何塞CN2 GIA,电信移动去程GIA(移动去程也是GIA,很少见了,瓦工已经去程移动自有线路直连了),联通去程走he;回程三网GIA,线路还是很香的,延迟比瓦工要低,价格也很便宜。希望这辆车能平稳吧~

不过价格便宜就肯定有比其他VPS服务商缩水的地方:后台没有备份、快照功能,只有启动VPS、重启,重装系统,VNC等比较基础的功能。因此这台VPS我就只能用,不能“玩”了,玩砸了没有快照,没法回滚...所以以后关于VPS的文章可能会少一些吧!

接下来就要面对更多的实验和期末考试,恰逢这段时间没灵感,可能接下来的一个月,更新频率会低一些,还请谅解~等有时间调整好,会慢慢填坑的!

目的

在网站上了CDN之后,提高站点访问的同时,也可以一定程度上防范攻击,保护了源站IP。毕竟如果攻击者拿到的是CDN节点的IP,一般情况下只能对CDN节点进行攻击,我们通过对CDN节点进行配置,配置WAF防火墙,进行流量清洗,攻击请求就不会到达源站服务器。但是如果攻击者知道了源站的IP地址,攻击者就可以直接将DDOS、CC攻击施加在源站IP上,站点很快就会崩溃。

上面讲的是一般情况,CDN能够一定程度保护你的源站IP。但是启用CDN一定能保护源站IP不被泄露吗?答案是否定的。Nginx服务器在直接以HTTPS访问IP地址时,如果没有为IP地址绑定专用的HTTPS证书,那么Nginx就会返回一张配置文件中已经存在的证书进行HTTPS通信。如果你的网站是example.com,直接以HTTPS方式访问你的源站IP,Nginx就会返回example.com的HTTPS证书。攻击者可以利用这一点,用肉鸡,扫描全网的IP地址,对全网IP尝试建立HTTPS连接。如果扫描到一个IP地址,返回了你网站的证书;同时这个IP不是CDN节点,那么这个IP所背后就是你的源站,你的源站就已经被暴露了。

那么我们能不能不让Nginx返回站点的HTTPS证书,而是返回一张其他的证书呢?答案当然是能,否则我也不会写下下面的文字咯~下面就简单介绍一下,如何使用自签名证书,放在服务器IP地址泄露。

网络上就有一个大名鼎鼎的搜索引擎censys.io,你可以在上面查询一下自己的源站IP是否暴露,如果暴露,一定要更换源站IP,然后用我下面的方法做好伪装。

操作步骤

使用OPENSSL生成一张自签名证书

这张证书是自签名证书,没有证书颁发机构做背书,浏览器肯定是不识别的。但我们只是用它来保护我们的服务器IP,不是用它对外提供服务的,因此我们就是需要一张自签证书,它不需要被任何人信任。

  1. 先cd到nginx配置文件的ssl文件夹下,CentOS的路径是/usr/local/nginx/conf/ssl,把证书创建在这个文件夹里,如果更换服务器,复制配置文件同时也会把生成的证书复制上,一次生成,永久使用:)
  2. CentOS默认安装了OPENSSL,所以就直接开始吧,先生成私钥:openssl genrsa -out null.key 2048这一步会生成一个2048位的私钥,我我们就用它来签名。
  3. 生成CSR(Certificate Signing Request):其中C代表的是国家,ST代表的是state省份,L代表Location位置,O代表组织Organization,CN代表域名。

    openssl req \
        -subj "/C=US/ST=NULL/L=NULL/O=NULL/OU=NULL/CN=NULL/emailAddress=NULL@example.com" \
    -new \
    -key null.key \
    -out null.csr
  4. 使用私钥和CSR生成证书,这样我们就得到了一张有效期3650天的自签名SSL证书了。

    openssl x509 \
        -req \
        -days 3650 \
        -in null.csr \
        -signkey null.key \
        -out null.crt

配置Nginx配置文件

编辑Nginx的主配置文件:vim /usr/local/nginx/conf/nginx.conf,在server大括号里面替换添加下面的内容:

ssl_certificate /usr/local/nginx/conf/ssl/null.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/null.key;

之后重启Nginxservice nginx restart,大功告成啦!

参考资料

如何创建自签名的 SSL 证书 - 简书

]]>
0 https://blog.xmgspace.me/archives/generate-a-self-signed-certificate.html#comments https://blog.xmgspace.me/feed/archives/generate-a-self-signed-certificate.html
Let's Encrypt证书:国内服务器无法申请?国外服务器访问缓慢?你需要OCSP装订 https://blog.xmgspace.me/archives/lets-encrypt-ocsp.html https://blog.xmgspace.me/archives/lets-encrypt-ocsp.html Sun, 03 May 2020 15:48:00 +0800 Xiaomage 前言

最近,有V2EX的网友发现地处国内的服务器无法正常申请和续期Let's Encrypt的免费证书。最后查找原因,是因为Let's Encrypt的一个OSCP域名ocsp.int-x3.letsencrypt.org被GFW污染,解析到了以31开头的FaceBook的IP或者其他被墙IP,而不是使用Akamai CDN的Let's Encrypt的OSCP服务器上。

nslookup ocsp.int-x3.letsencrypt.org 223.5.5.5
服务器:  public1.alidns.com
Address:  223.5.5.5
非权威应答:
名称:    a771.dscq.akamai.net
Addresses:  2600:1417:76::6874:f3cb
          2600:1417:76::17d2:d741
          74.86.17.48
Aliases:  ocsp.int-x3.letsencrypt.org
          ocsp.int-x3.letsencrypt.org.edgesuite.net

ping 74.86.17.48
正在 Ping 74.86.17.48 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
74.86.17.48 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),

先让我们了解一下什么是OCSP。
在线证书状态协议(Online Certificate Status Protocol)是一个用于获取X.509数字证书撤销状态的网际协议。浏览器在访问一个https站点时,会先向CA的OCSP服务器发起请求,查询该证书是否有效,是否被吊销。当OCSP出现问题时,会有两个影响:

  1. 服务器端无法正常申请或续期SSL证书。
  2. 客户端浏览速度缓慢,尤其是Safari和IE浏览器,首次打开站点白屏的时间会大大增加。浏览器验证OCSP状态并超时需要比较长的时间,尽管OCSP请求超时还是认为证书有效,但还是会造成浏览体验大大降低。Chrome浏览器基本上不会受影响。

那我们怎么解决这个问题呢?我们可以使用OCSP装订。
OCSP装订(OCSP Stapling),正式名称为TLS证书状态查询扩展,可代替在线证书状态协议(OCSP)来查询X.509证书的状态。服务器在TLS握手时发送事先缓存的OCSP响应,用户只需验证该响应的有效性而不用再向数字证书认证机构(CA)发送请求。

网上关于Let's Encrypt启用OCSP装订的文章比较少,Hostloc也有MJJ在找教程。所以,下面我就会简单写一下国内服务器申请Let's Encrypt免费证书+Nginx服务器开始OCSP装订的步骤~

操作步骤

申请Let's Encrypt泛域名证书

下面是利用DNS API方式,使用acme.sh申请Let's Encrypt泛域名证书的步骤。DNS提供商为DNSPOD,其他主流的DNS提供商也大都能使用这种方法申请证书。

  1. 国内服务器需要先修改hosts以避免DNS污染,国外服务器则不需要。在hosts中添加一条ocsp.int-x3.letsencrypt.org的记录,将其指向下面中的一个,香港的Akamai CDN,国内访问速度不错:

    • 175.45.42.217
    • 175.45.42.209
  2. 安装acme.sh,官方文档在此 curl https://get.acme.sh | sh
  3. 在DNS控制台中申请一个API Key,记下备用。支持此方法的DNS见官方文档
  4. 输入API Id和Key 以DNSPOD为例

    export DP_Id="15**04"
    export DP_Key="ed512e50286f*********9326ec760d3d"
  5. 输入域名,申请证书 acme.sh --issue --dns dns_dp -d example.com -d *.example.com

稍微一等,Let's Encrypt泛域名证书就申请好啦!而且acme.sh会在域名过期前几天续期证书。下面讲如何配置证书,以及Nginx开启OCSP装订。

Nginx开启OCSP装订

申请到的证书存放在~/.acme.sh/example.com文件夹下,这个文件夹下面会肯定有这两个文件:

  • fullchain.cer
  • example.com.key

我们就要用到这两个文件,修改N滚下配置,并开启OCSP。
编辑Nginx配置文件,在server大括号中加入以下内容,并删除冲突的内容:

ssl_certificate /[用户名]/.acme.sh/xmgspace.me/fullchain.cer; #证书路径
ssl_certificate_key /[用户名]/.acme.sh/xmgspace.me/example.com.key; #私钥路径
ssl_stapling on; #开启OCSP
ssl_stapling_verify on; #开启OCSP验证
ssl_trusted_certificate /[用户名]/.acme.sh/xmgspace.me/fullchain.cer; #验证证书路径

编辑完成保存之后重启Nginx。

这样,OCSP装订就成功启用啦!要验证是否启用了OCSP,可以在SSL Lab中进行测试。操作中遇到什么问题,欢迎在评论区留言哦!

你看到的文字是我在心态崩了的状态下写下的文字...本来本文的全文已经完成,正当我按下Ctrl+S保存准备复制到博客发表的时候,电脑又又又蓝屏了...当我打开电脑,“0字符” !!! 血的教训,所以,电脑出了问题一定要第一时间修!一定要多做备份!以后的文章大都是用在线编辑器敲出来的了,不会本地编辑再上传了...
]]>
0 https://blog.xmgspace.me/archives/lets-encrypt-ocsp.html#comments https://blog.xmgspace.me/feed/archives/lets-encrypt-ocsp.html
HTTP协议入门知识整理 https://blog.xmgspace.me/archives/http-introduction.html https://blog.xmgspace.me/archives/http-introduction.html Mon, 13 Apr 2020 18:09:00 +0800 Xiaomage 基本概念

什么是HTTP?

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个用于传输超媒体文档(例如 HTML等)的协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。

特点:

  1. 该协建立在TCP连接上,位于应用层。
  2. HTTP 遵循经典的客户端-服务端模型。
  3. HTTP 是无状态协议。
  4. HTTP是无连接协议。
  5. 简单快速,客户向服务器请求服务时,只需传送请求方法和路径。
  6. 灵活:HTTP允许传输任意类型的数据对象,可以传输文本,声音,图像等等。正在传输的类型由Content-Type加以标记。

注:客户端-服务端模型:服务端一直保持开启,被动的等待客户端连接。客户端发送一个请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后发送响应把结果返回给客户端。客户端没有连接服务端之前,服务端无法向客户端主动传输数据,因为不知道客户端的IP地址。

无状态协议:为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息。这意味着服务器不会在两个请求之间保留任何数据(即状态)想要保存状态就要靠cookie session等手段维持状态。

无连接协议:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。但后期从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,长时间没有数据传输两端都可以关闭连接。

HTTP是明文传输的,默认的端口号是80,备用端口号是8080。

HTTPS是加密传输的,默认端口号是443,备用端口号是8443。

常用的HTTP服务器:Nginx、Apache、IIS等。

HTTP的制定与历史

HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的意见稿,也就是协议。

HTTP/0.9

已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。

HTTP/1.0

这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用。

HTTP/1.1

持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。主要改进了:

  • 缓存处理
  • 带宽优化及网络连接的使用
  • 错误通知的管理
  • 消息在网络中的发送
  • 互联网地址的维护
  • 安全性及完整性

HTTP/2

当前版本,于2015年5月作为互联网标准正式发布。改进了压缩算法,提高了加载速度添加了一些新的功能,如服务端推送,多路复用等。

(这个了解一下就可以)

URL统一资源定位符

统一资源定位符URL(Uniform Resource Locater)是用来表示互联网上得到的资源位置和访问这些资源的方法。互联网上的资源只有一个唯一确定的URL。

URL的构成:

<协议>://<主机>:<端口号>/<路径>

https://youth.sdut.edu.cn/2020/0330/c7063a376940/page.htm

一个完整的URL包括以下几部分:

  1. 协议部分:URL的协议部分为“https:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符
  2. 域名(主机)部分:URL的域名部分为“youth.sdut.edu.cn”。一个URL中,也可以使用IP地址作为域名使用。
  3. 端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口
  4. 路径部分:存放文件的位置。

HTTP请求

接收和发送请求

如何发送和接收HTTP请求呢?HTTP请求大致操作过程:

  1. 解析主机的IP地址。将s机域名发送给DNS服务器,获得主机的IP地址,这样才能建立TCP连接。(请自行了解 DNS)
  2. 建立TCP连接。HTTP 是基于 TCP 协议的,当然是要先建立 TCP 连接。建立TCP先要进行三次握手,这里我们不讨论TCP连接是如何建立的,可以把TCP想象成通道。
  3. 建立连接后,客户端发送请求报文(Request),请求中包含请求的方式,URL,协议版本号,useragent,cookies等。请求分三部分,请求行(Request line),请求头(http header)和请求体(body)。第一行是请求行,包含http请求方式,请求的路径,http协议版本。

请求

  1. 服务器受到客户端发来的请求,对客户端发来的信息进行处理,并发送给客户端回应(Response)。Response也是分成同样的三部分,请求行(Request line),请求头(http header)和请求体(body)。其中的请求行包含协议版本,状态码,message。

回应

  1. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。
  2. 断开TCP连接。

请求方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:

  • GET - 向特定的资源发出请求。
  • POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  • OPTIONS - 请求一些选项的信息。
  • HEAD- 请求读取由URL标志信息的首部。
  • PUT - 向指定资源位置上传其最新内容。
  • DELETE - 请求服务器删除Request-URI所标识的资源。
  • TRACE- 回显服务器收到的请求,主要用于环回测试或诊断。
  • CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • PATCH - 用来将局部修改应用于某一资源,添加于规范RFC5789。
    方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

GET和POST的区别

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
  2. GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
  3. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

HTTP状态码

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

分类分类描述
1xx信息,服务器收到请求,需要请求者继续执行操作
2xx成功,操作被成功接收并处理
3xx重定向,需要进一步的操作以完成请求
4xx客户端错误,请求包含语法错误或无法完成请求
5xx服务器错误,服务器在处理请求的过程中发生了错误

常见状态码:

状态码状态码英文名称中文描述
200OK请求成功。一般用于GET与POST请求
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
500Internal Server Error服务器内部错误,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求

常见请求头

request header

Host
用法:Host: youth.sdut.edu.cn

作用: 主要用于指定被请求资源的Internet主机和端口号,它通常是从HTTP URL中提取出来的

Connection
Connection: keep-alive: 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接

Connection: close: 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接

Accept
用法:Accept: /,Accept: text/html

作用: 浏览器端可以接受的媒体类型;
Accept: / 代表浏览器可以处理所有回发的类型,(一般浏览器发给服务器都是发这个)

Accept-Language
用法:Accept-Language: en-us

作用: 浏览器申明自己接收的语言。

User-Agent

用法: User-Agent: Mozilla/4.0......

作用:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。

Cookie

用法:

Cookie: bdshare_firstime=1439081296143; ASP.NET_SessionId=rcqayd4ufldcke0wkbm1vhxb; pgv_pvi=7361416192; pgv_si=s6686106624; ce.sysu.edu.cn80.ASPXAUTH=9E099592DD5A414BEECD8CF43CFC71664

作用: 最重要的header, 将cookie的值发送给HTTP 服务器

Referer

用法:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的,比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

response header

Allow

作用:服务器支持哪些请求方法(如GET、POST等)。

Set-Cookie
用法:
Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com

作用:非常重要的header, 用于把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie.

Content-Encoding
用法:Content-Encoding:gzip

作用:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。

跨域请求 CROS

在 HTML 中,<a> <img> <link> 等标签以及 Ajax 请求都可以指向一个资源地址,而所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。

这里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。

因为安全问题,为防止跨站请求伪造(CSRF)攻击,浏览器通常会对跨域请求做出限制。

举例

a.example.com对于:

a.example.com/api/index.php 不是跨域请求

b.example.com 跨域请求

example.com 跨域请求


如果a.example.com 需要向b.example.com请求的话,这种请求就属于跨域请求。如果在b.example.com返回回来的响应头文件里有允许进行跨域访问的Header,那么就能进行正常请求,否则就不能。

Access-Control-Allow-Origin

响应首部中可以携带这个头部表示服务器允许哪些域可以访问该资源,其语法如下:

Access-Control-Allow-Origin: <origin> | *

其中,origin 参数的值指定了允许访问该资源的外域 URI。对于不需要携带身份凭证的请求,服务器可以指定该字段的值为通配符,表示允许来自所有域的请求。

Access-Control-Allow-Methods

该首部字段用于预检请求的响应,指明实际请求所允许使用的HTTP方法。其语法如下:

Access-Control-Allow-Methods: <method>[, <method>]*

Access-Control-Allow-Headers

该首部字段用于预检请求的响应。指明了实际请求中允许携带的首部字段。其语法如下:

Access-Control-Allow-Headers: <field-name>[, <field-name>]*

HTTPS

超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议

HTTP 协议直接使用了 TCP 协议进行数据传输。由于数据没有加密,都是直接明文传输,所以存在以下三个风险:

  1. 窃听风险:第三方节点可以获知通信内容。
  2. 篡改风险:第三方节点可以修改通信内容。
  3. 冒充风险:第三方节点可以冒充他人身份参与通信。

比如你在手机上打开应用内的网页时,有时会看到网页底部弹出了广告,这实际上就说明你的 HTTP 内容被窃听、并篡改了。HTTPS 协议旨在解决以上三个风险,因此它可以:

  1. 保证所有信息加密传输,无法被第三方窃取。
  2. 为信息添加校验机制,如果被第三方恶意破坏,可以检测出来。
  3. 配备身份证书,防止第三方伪装参与通信。

HTTPS使用非对称加密,非对称加密会有一对秘钥:公钥私钥。 公钥加密的内容,只有私钥可以解开,私钥加密的内容,所有的公钥都可以解开(当然是指和秘钥是一对的公钥)。使用 HTTPS 时,服务端会将自己的证书发送给客户端,其中包含了服务端的公钥。基于非对称加密的传输过程如下:

  1. 客户端使用公钥将信息加密,密文发送给服务端
  2. 服务端用自己的私钥解密,再将返回数据用私钥加密发回客户端
  3. 客户端用公钥解密

这里的证书是服务器证明自己身份的工具,它由权威的证书颁发机构(CA)发给申请者。如果证书是虚假的,或者是自己给自己颁发的证书,服务器就会不认可这个证书并发出警告。

参考资料

HTTP概述 - HTTP | MDN

HTTP 教程 | 菜鸟教程

一篇比较全的HTTP协议详解

HTTP协议详解-比小白大一点的大白的博客-51CTO博客

跨域请求中遇到的问题解决记录

【网络基础知识6】 --- HTTP 与 HTTPS 简介 - 简书

看图学HTTPS - 掘金

]]>
0 https://blog.xmgspace.me/archives/http-introduction.html#comments https://blog.xmgspace.me/feed/archives/http-introduction.html
给VPS添加IPv6地址 防止VPS被墙失联 https://blog.xmgspace.me/archives/vps-add-he-ipv6.html https://blog.xmgspace.me/archives/vps-add-he-ipv6.html Sat, 11 Apr 2020 16:25:00 +0800 Xiaomage 前排提醒:如果你的VPS提供商提供了IPv6网络,如VULTR,直接在VPS控制面板里面开启VPS提供商提供的原生IPv6即可;有的提供商没有提供原生IPv6,如搬瓦工,就可以按照下面的教程给VPS添加IPv6地址,防止VPS的IPv4地址被墙从而失联。

引子

觉得引子太长可以直接看后面的教程~

场景1:前段时间我把服务器从VULTR搬迁到了搬瓦工,有的工作还没有进行彻底,经常还需要通过SSH连接管理服务器,通过FTP传送文件。SSH协议对于高墙来说是一种高危协议,因为早年有人就利用SSH假设Socks代理翻出来去;为了封锁这种爬墙方式,一旦经过高墙的SSH流量过大,高墙就会阻断这个连接。虽然高墙的阻断机制还不明确,但这个长时间大量使用SSH协议有还是有一定可能导致服务器被墙的。搬瓦工本来就是被墙的重灾区,因此我能不用SSH连接就不用,尽量少用。但总得过一段时间连上去进行操作,也不能因噎废食。


场景2:最近我查资料,查到了谷歌学术的网站上。然而点进去谷歌学术的链接,却无法访问,提示:Your client does not have permission to get URL / from this server.应该是VPS的IP段做爬虫的太多了,需要换个IP才行。


场景3:有的网站只支持IPv6,比如有的BT,PT站,没有IPv6网络是无法访问的。

其中上面两个情景都跟IP地址有关,怕IP地址被墙,IP地址被谷歌封禁。怎么解决呢?换个IP肯定能破。

换IPv4的IP?瓦工换IP得花8刀,其他的服务商应该也不是很好更换IPv4的IP地址。

那能不能给服务器加一个IPv6的IP呢?高危操作用IPv6,防止IP被墙;平常不危险的操作还是用IPv4,线路不绕路,速度快。

下面就开整啦!我们可以利用he.net提供的IPv6免费隧道,给服务器添加IPv6地址。

教程正文

获取IPv6

工具:he.net提供的IPv6隧道,smartDNS,服务器系统为CentOS7 X64

  1. 注册he.net账户:浏览器打开https://tunnelbroker.net/register.php,注册一个he.net的账户。不开代理的情况下,国家选中国;如果想开代理也可以,国家选则IP所在归属地就可以。手机号随便填写一个就可以,没有国内的短信验证等骚操作。经过邮箱验证之后,你的账户就注册成功了。
  2. 用刚刚注册的账户登录。登陆成功之后,点击页面左上部分的Create Regular Tunnel建立一条普通的隧道。
  3. 你可以选择隧道服务器的机房,建议选择离你的VPS地理位置近的机房。选择好之前,你可以从你的VPS上Ping一下机房的IP地址(绿色箭头所指),测试一下你的VPS到隧道服务器的连通性。如果延迟和丢包都能让你满意,就选择这个机房,不满意再选;然后把你服务器的IPv4地址填进上面蓝色箭头所指的输入框里,按回车键,测试隧道服务器到你VPS的连通性。之后滑动到页面最底端,点击Create Tunnel,隧道就创建成功了。每个账户可以创建五条隧道。

创建隧道

  1. 创建隧道完成后,点击左上角的Main Page,下方就会有你刚刚创建好的隧道了。点击隧道名进入获取详细配置信息。
  2. 进入详细信息后,选择第二个Example Confident标签,查看示例配置。之后在下拉框选择Linux-route2,复制其中的内容。之后在服务器中你认为合适的地方,新建一个ipv6.sh,将配置文件粘贴进去后保存文件。之使用chmod +x ipv6.sh,为ipv6.sh授予可执行权限。执行这个脚本就可以启用IPv6隧道。

获取配置

  1. 开机自动启用IPv6隧道:先启用CentOS开启启动脚本:chmod +x /etc/rc.d/rc.local,然后编辑这个脚本,将我们上一步的脚本添加进去,注意路径要填写绝对路径。

reboot之后你的VPS就拥有IPv6地址了,你可以通过这个IPv6地址SSH连接到你的VPS,FTP传输文件,也可以通过这个IPv6地址扶墙,只是IPv6线路环球旅行,没几个想用IPv6扶墙的~

IPv4与IPv6优选

但是因此会产生一个问题:在拥有IPv6地址之后,网络协议规定优先使用IPv6;IPv6国外的线路质量也很难比得上IPv4,VPS到目标站点的延迟会有所上升,这样我们扶墙的速度会下降。比如搬瓦工与谷歌直连,IPv4 ping值在1毫秒之内;IPv6则到了20毫秒。使用怎么既拥有IPv6地址,又不默认使用IPv6呢?可以从DNS解析入手:返回既有A记录,又有AAAA记录的站点ping值最低的记录;而只有AAAA记录的纯IPv6站点则正常解析。为了达成这一目的,我们可以使用SmartDNS。

  1. 下载解压安装smartDNS,新版需要到Github项目地址寻找。

    wget https://github.com/pymumu/smartdns/releases/download/Release30/smartdns.1.2020.02.25-2212.x86_64-linux-all.tar.gz
    tar zxf smartdns.1.2020.02.25-2212.x86_64-linux-all.tar.gz
    cd smartdns
    chmod +x ./install
    ./install -i
  2. 配置SmartDNS,建议备份原文件后清空,编辑smartdns.comfvim /etc/smartdns/smartdns.conf粘贴进下面的内容:

    bind 127.0.0.1:53
    cache-size 0
    dualstack-ip-selection-threshold 10
    dualstack-ip-selection yes
    log-level info
    server-tls 8.8.8.8
    server-tls 8.8.4.4
    server-tls 1.1.1.1
    server-tls 1.0.0.1
    server-https https://dns.google/dns-query
    server-https https://cloudflare-dns.com/dns-query
  3. 配置smartDNS开机启动:systemctl enable smartdns,systemctl start smartdns
  4. 配置CentOS的DNS服务器,将其设为本机的SmartDNS:先修改系统设置,禁止系统修改DNS服务器:vim /etc/NetworkManager/NetworkManager.conf 在[main]下面添加一行dns=none,然后配置DNS服务器vim /etc/resolv.conf,将其他的删掉,改成127.0.0.1
  5. 重启网络配置:systemctl restart NetworkManager.service

Done!现在你的VPS不仅有了IPv6,而且IPv4与IPv6同时启用,并且线路优选。

参考资料

阿里云Centos 7配置HE隧道支持IPv6访问 | 堕落的鱼

Centos7开机启动自己的脚本 - 简书

pymumu/smartdns: A local DNS server to obtain the fastest website IP for the best Internet experience, 一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验。

]]>
0 https://blog.xmgspace.me/archives/vps-add-he-ipv6.html#comments https://blog.xmgspace.me/feed/archives/vps-add-he-ipv6.html
【2020最新】A20主流国际电台普通话短波广播频率表【全网首发】 https://blog.xmgspace.me/archives/sw-schedule-a20.html https://blog.xmgspace.me/archives/sw-schedule-a20.html Fri, 27 Mar 2020 22:12:00 +0800 Xiaomage 使用说明:如无特别注明,本频率表有效期为2020年3月29日(含)至2020年10月25日(含)(2020年夏季频率)。本频率表中所标注之默认时间均为北京时间(UTC +8),默认频率单位皆为千赫兹,所列国际电台以英文字母缩写或全称排序
免责声明:本频率表仅作电台频率数据客观记录及收听学习之用,请勿用于商业甚至非法用途。由于短波国际广播具有明显的政治倾向性,请收听者注意内容甄别!
最后更新:
2020.7.1 更新AIR新频率
2020.4.27 订正KNLS频率,来源广播守听 增加VOK放送方向
2020.4.15 订正KNLS频率,来源英文官网
2020.4.5 订正RRI RRI官方频率与青木表 HFCC不同 经过守听,频率以官方为准
2020.3.29 根据青木频率表,订正VOA RFA FEBC RTI AWR KNLS等频率
2020.3.28 订正AIR RTI频率

第一部分:外宣类电台

AIR 印度德里广播电台*


1945-2115 17595

CBS-RTI 中央广播电台台湾之音*

华语网

0000-0100 华北:7300 华中:1098, 1557, 6075 华南:1098, 1557, 6145 台湾:1098
0100-0130 华中:6075
0600-0800 华北:9900 华中:6075 华南:6105
1200-1400 华中:11840
1530-1700 华中:11840
1700-1800 华中、华南:1557 东南亚:15465
1800-1900 华北:7300, 9555, 9885 华中:1557, 11840 华南:1557, 6105, 6180, 9660
1900-2000 华北:7235, 9555, 9885 华中:9680, 11840 华南:6105, 6180, 9660
2000-2100 华北:9555, 9885 华中:1557, 7430, 9680 华南:1557, 6180, 9660
2100-2200 华中:1098 , 1557, 7430, 9680 华南:1098, 1557, 6105, 6180, 9660 台湾:1098
2200-2300 华中:1098, 1557, 6075 华南:1098, 1557, 6145, 6180, 9660 台湾:1098
2300-0000 华北:7300 华中:1098, 1557, 6075 华南:1098, 1557, 6145, 6180, 9660 台湾:1098
注:频率MW1557,SW7300,1098每周一至周五延长5分钟至01:05收播

CRI 中国国际广播电台


0130-0230 7275, 7315, 9685, 9695, 11660,
0400-0500 7205, 7255, 7335, 7440, 9865
0600-0700 5975, 6100, 6140, 7215, 7265, 7325, 7395, 7430, 9675
0630-0700 11975, 15505
0700-0800 7295, 9865, 11900, 11975
0800-0900 9880, 11780, 11900, 11975, 12035, 13580, 13655
0900-1000 9560, 9655, 11650, 11700, 13580, 13655, 15140, 15160
1000-1100 6020, 9570, 9580, 9815, 9825, 13655, 15140, 15160
1100-1200 6020, 9450, 9570, 11740, 15160, 15230, 17540
1200-1300 11740, 13640, 15110
1300-1400 11740, 15110, 15120, 15785
1400-1500 11710, 15120, 15160, 15230, 15785, 17615, 17650, 17740
1500-1600 11710, 11855, 11875, 17615, 17650, 17740, 17840
1600-1700 9880, 11640, 15230, 15560, 17560, 17650, 17840
1700-1800 7430, 9460, 9880, 11895, 11980, 12005, 13570, 13730, 15560, 17560
1700-1900 13580, 15250, 15525, 17530, 17840
1800-1900 9820, 9880, 9890, 17650
1900-2000 7435, 9610, 11750, 13610, 13755, 17650
2000-2100 7435, 13610, 13755, 15110, 17650
2000-2200 7440, 9540, 9855,
2100-2200 7215, 7435, 13650, 13855
2200-2300 6040, 7235, 7410, 7435, 9730, 12035, 13855, 15410
2300-0000 5910, 7235, 7435, 9455, 9560, 13680, 13755

HSK9-RT 泰国广播电台


1915-1930 5875(东南亚)
2115-2130 9390(中国)

KBS World Radio 韩国国际广播电台


1900-2000 1557(对香港,华南;台湾250kw发射)
1930-2030 6095(中国), 9770(东南亚)
2100-2200 1170(不定向), 7275(不定向)
0700-0800 7215(中国), 9805(东南亚)

LNR 老挝国家广播电台


2200-2230 567, 6130

NHK World-Japan 日本国际广播电台


1200-1230 11825
1930-2000 6090
2030-2100 6190
2130-2200 6190
2230-2300 6190
0630-0650 9560

Radio Free Asia 自由亚洲电台*


1100-1200 11570, 11895, 11985, 17690
1200-1300 11895, 13750, 17690, 21505
1300-1400 11895, 17690, 21690
1400-1500 11895, 13790, 17690, 17810
2300-0000 9940, 11675, 13810
0000-0100 7540, 11610, 13570, 13810
0100-0200 9360, 9970
0200-0300 9360, 9970, 11745
0300-0400 9360, 9720
0400-0500 9360, 6080, 9535
0500-0600 7435, 9685
0700-0800 9535, 9720, 15555

RAE 阿根廷对外广播电台(2019年10月起)


1700-1800(周二至周六) 5950

RRI 罗马尼亚国际广播电台


1200-1230 13710(DRM), 15220
2030-2100 13845, 15160

RRI-VOI 印度尼西亚之声


(B19) 1900-2000 3325
(B19) 2300-0000 3325

RV 梵蒂冈广播电台


0600-0630 5985, 7410, 9740
2030-2100(周六) 5965, 7485, 9585

TNVN-VOV 越南之声


0600-0630 7220, 12000(设备损坏)
0630-0700 9840, 12020
1900-1930 7220, 12000(设备损坏)
2000-2030 7220, 12000(设备损坏)
2100-2130 7220, 12000(设备损坏)

TRT-VOT 土耳其之声


1900-2000 17620

VOA 美国之音*


0600-0700 5875, 9625
0800-0900 9600, 11660, 15340, 17560
1700-1800 11785, 11825, 13755, 17485, 21695
1800-1900 11785, 11825, 13755, 17485, 21695
1900-2000 7470, 9460, 11785, 11825, 15250
2000-2100 7470, 11785, 11825,15250
2100-2200 6110, 11785, 15130, 15165
2200-2300 6110, 9465, 11900, 15110

VOK 朝鲜之声

中国关内方向

0500-0600 9875, 11635
0600-0700 9875, 11635
1900-2000 7220, 9445

中国东北方向(ND全向)

0500-0600 7235, 9445
0600-0700 7235, 9445
1300-1400 7220, 9445, 9730
1600-1700 7220, 9445

东南亚方向

1100-1200 13650, 15105
1400-1500 13650, 15105
2100-2200 11735, 13650

VOM 蒙古之声


1800-1830 12085
2230-2300 12015

第二部分:福音类电台

AWR 复临信徒世界广播网希望福音电台


0500-0600 11570(KSDA)
0600-0700 11875(KSDA), 15625(KSDA)
0700-0800 15625(KSDA), 15685(KSDA)
0800-0900 17650(KSDA)
0900-0930(周五六) 11925
0900-0930(周五) 15630
0900-1000(周六) 15630
0930-1000(周六) 11925
1800-183015420(KSDA), 15450(KSDA)
1900-2000 7375(KSDA), 11855(KSDA)
2000-2030(周五六) 12105, 15550, 15715
2030-2100(周六) 12015
2030-2100(周五) 15550, 15715
2100-2130(周一到五) 15715
2100-2200 15150
2130-2200(周一到五) 15715
2200-2300 11870, 15705

FEBC 远东广播公司

良友电台·第一台

0700-0900 12070
1900-2200 9400
2200-0000 9345

良友电台·第三台

0630-0830 9405

良友电台·iRadio 爱广播频道

1800-0000 9275

HLAZ 益友电台·第一台

1900-2030 1566(MW)
2145-0030 1566(MW)

KNLS 生命之光广播电台

北美阿拉斯加发射

1600-1800 11875(中国东部)
1800-1900 9685(中国东部)
1900-2000 7395(中国北部)
2100-2200 7395(中国北部) 9740(中国北部)
2200-2300 7355(中国东部)
2300-0000 9760(中国东部)

非洲马达加斯加发射

0500-0600 11610(欧洲)
1200-1300 17530(中国南部)

TWR 环球广播电台


1830-1900 12120
1900-2000(周一到五) 9910
1915-1945 12120
1945-2000(周日) 9910
2000-2015(除周六) 9910
2000-2015 9975
2115-2145(周六日) 9975
2130-2150(周一到五) 9975
2145-2200(周六) 9975

第三部分:其他电台

VOC 中国之音*

0700-0800 7270
2200-2300 7270

VOS 海峡之声

1800-0000 4940

电台名称后有星号者受到中国有关方面的无线电干扰,国内收听效果受到影响。
上述内容均为Xiaomage亲自收集,转载请注明本文的永久链接:https://blog.xmgspace.me/archives/sw-schedule-a20.html 欢迎转载。电台图标来自于广播论坛dxman。很多电台官网没有更新数据,这些电台数据均来自于HFCC;时间仓促难免出现错误,有错误欢迎在评论区留言~

附:主流华语短波广播直播源请见https://blog.xmgspace.me/swdx.html

]]>
0 https://blog.xmgspace.me/archives/sw-schedule-a20.html#comments https://blog.xmgspace.me/feed/archives/sw-schedule-a20.html
V2Ray Magisk模块上车完全指南 https://blog.xmgspace.me/archives/v2ray-magisk-module-guide.html https://blog.xmgspace.me/archives/v2ray-magisk-module-guide.html Fri, 13 Mar 2020 21:57:00 +0800 Xiaomage 2020.06.08 修复下载地址失效的问题 小修小补
免责声明:这篇文章中提到的方法仅能用于研究与学习使用。这篇文章是记录我折腾的过程,从未使用此方法牟利,此方法严禁用于商业或非法用途。

Android设备上能够使用的V2Ray客户端有很多,例如V2RayNG、BifrostV,但他们的原理都是先建立本地的V*PN连接,将本地需要代理的流量通过V*PN传输到客户端软件,客户端再将流量传输到服务器。这样一来,客户端软件不但需要时刻开启后台保活,而且还要建立V*PN通道,因此耗电量很大。

那么,有没有一种V2Ray软件,能让安卓设备较为省电、方便快捷的翻出去呢?当然有!经过我多方寻找,找到了它,那就是V2Ray Magisk模块。它初次配置可能较为复杂,但一但配置完成,就非常方便——开机随系统自启动,自动化;注入系统中,轻量化;支持分应用代理,自动翻,功能丰富。

准备工作

你需要做好相关准备,有可供折腾的设备才能开始:

  1. 一台刷入Magisk的Android手机
  2. Curl_For_Android 模块(可选,见下文)
  3. 软件:ShadowSocks、MT管理器或RE管理器(带Root权限的都可以)
  4. 可选:梯子,种类任意,能用就行

注:

  • 小米、一加手机都可以自己解锁,刷Magisk,去酷安或者官方论坛可以很方便的找到相关教程;华为、OPPO、VIVO的用户...其实可以不用往下看了...不过好不容易写好了还是来看看吧~
  • Curl For Android 模块(可以先不下载,出现问题再下载,具体看下面步骤) 它的Github页面不知为何已经404,很难再搜到有关内容. 我备份了这个模块,这里是这个模块的最后两个备份:Curl_For_Android-v2.0Curl_For_Android-v2.2 其中前者可用于Android10,后者不支持;Android9以下的Rom版本没有经过测试,但翻车的几率很小,可以尝试上车。
  • 梯子可选,但最好还是有,否则很可能下载V2ray-core失败

目标:V2Ray Magisk模块,搭建起本地的V2Ray客户端,实现分应用代理。

操作步骤

  • (建议先从第二步开始,不行的话再来进行这一步的操作)在Magisk Manager里刷入适合你系统版本的Curl For Android 模块。左侧菜单选择Modules模块,点击下方的加号,浏览到模块文件即可刷入。此步骤可选,官方已经修复了Curl的Bug,如果你第二步成功了,就不用执行这一步;少数机型不刷此模块可能会报出Connect official V2Ray download link failed的错误,这就需要进行这一步,提前刷入Curl For Android 模块解决。
  • 重启手机,之后打开梯子(magisk下载源和v2ray core官方源都在GitHub,托管在亚马逊云上,国内直连速度非常慢,所以需要梯子),在Magisk Manager菜单中的Downloads下载中直接安装V2Ray for Android模块,稍等一会,安装就成功了!然而真正的配置才刚刚开始。

下载模块

  • 打开MT管理器(等带Root权限的管理器),定位到/data/v2ray/目录下,新建配置文件config.json内容如下,注意:inbounds里面的内容不要动!outbounds里面的内容可以从你其他设备的配置文件里对应的位置复制过来;其他设备使用GUI客户端,没有配置文件的的你可以从找一个V2Ray在线配置生成器生成一份配置文件 其他内容如果不明白不要动,这是最优配置了。保存退出。
{
  "log": {
    "loglevel": "info"
  },
  "inbounds": [
    {
      "port": 65534,
      "listen": "127.0.0.1",
      "tag": "dns-in",
      "protocol": "dokodemo-door",
      "settings": {
        "port": 53,
        "address": "1.0.0.1",
        "network": "tcp,udp"
      }
    },
    {
      "port": 65535,
      "listen": "127.0.0.1",
      "tag": "proxy-inbound",
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "followRedirect": true
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    },
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "tag": "socks-inbound",
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": false,
        "ip": "127.0.0.1"
      },
      "sniffing": {
        "enable": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    }
  ],
  "outbounds": [
    {
      (删掉这行,把你的outbounds相关配置粘贴到这里!)
    },
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],
  "routing": {
    "domainStrategy": "IPOnDemand",
    "rules": [
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "blocked"
      },
      {
        "type": "field",
        "domain": [
          "geosite:category-ads"
        ],
        "outboundTag": "blocked"
      }
    ]
  },
  "dns": {
    "servers": [
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ]
      },
      "8.8.8.8",
      "1.1.1.1"
    ]
  },
  "policy": {
    "levels": {
      "0": {
        "uplinkOnly": 0,
        "downlinkOnly": 0
      }
    },
    "system": {
      "statsInboundUplink": false,
      "statsInboundDownlink": false
    }
  },
  "other": {}
}
  • 打开ShadowSocks,就用默认的那个节点就行,点击笔的图标,进入配置文件设置>分应用V*PN,搜索你想要分应用代理的软件,将他们包名后面带着括号的数字id一一记下,不能出错。

数字id

  • 还是那个目录/data/v2ray/,新建一个文件appid.list,将刚才记下的数字id输入到这个文件中,数字id之间用空格隔开,不允许换行。保存退出。第一次配置完成后要重启手机。至此,大功告成!请尽情享受自由的网络!

模块的管理

启用:打开Magisk Manager,将模块上的勾勾上,启用就可以,即时生效,一般情况无需重启手机,当然偶然出现情况重启大法好;

关闭:打开Magisk Manager,将模块上的勾去掉,禁用,就是关闭了,即时生效,一般情况无需重启手机;

重启服务:打开Magisk Manager,将模块上的勾去掉,等5秒钟后再勾上即可重启模块,不要勾掉立即勾上。

删除模块:打开Magisk Manager,点击最右边的叉号,重启手机。

配置使用中遇到问题欢迎在下面的评论区留言,我会尽力解答的~关于一加刷Magisk你也可以用评论区向我提问。
模块的使用问题当然也可以去官方issue向官方提问哦。
]]>
10 https://blog.xmgspace.me/archives/v2ray-magisk-module-guide.html#comments https://blog.xmgspace.me/feed/archives/v2ray-magisk-module-guide.html
如何挑选一台适合自己的VPS? https://blog.xmgspace.me/archives/how-to-choose-vps.html https://blog.xmgspace.me/archives/how-to-choose-vps.html Wed, 26 Feb 2020 22:05:00 +0800 Xiaomage 祖传引子
我的祖传艺能 嫌太长可以跳过这段不看 直接看下面的干货

我的舍友都知道,我是个”宽带症候群“的“患者”,每当宿舍里的移动宽带开始爆炸时,总是我第一个跳起来咒骂移动,然后全宿舍的人跟着一起骂2333......我对宽带网络波动异常敏感,而移动宽带垃圾的素质经常让我无法在高峰时段连接在新加坡的那台Vultr机器,我也因此几次在宿舍里崩溃(那种输命令都会卡住 FTP传个几KB的文件要半分钟的情况真的让人抓狂)......好在有cloudflare的CDN,精选新加坡ntt线路的CDN节点后勉强可用。

到了寒假,我家中用的是电信宽带,我很自然的把服务器迁到了对电信稍微友好的洛杉矶。受到疫情影响,几乎所有的人都在家上网,三大运营商的出国带宽被挤爆,电信日常转圈,移动日常掉线。再加上家中买宽带强加的2.4G垃圾路由器(一个只支持wifi4的垃圾路由器竟然要我爷爷奶奶130,电信我TM (*龙门粗口*)),我实在受不了了,迫切想要换一台线路比较好的VPS。

于是我从寒假开始就开始恶补相关知识。干货都在下面咯~

中国互联网出境线路

中国一共有四个互联网出口点,北京,上海,广州,这三大出口点是三大运营商共用的;另外还有一个乌鲁木齐,只有电信的CN2线路走这个出口点进入中亚地区,CN2是什么下面我们会讲到。

再来谈谈中国的互联网出境线路,不把这个先整明白,是买不到线路好的VPS的。

中国电信

电信在三大运营商里面带宽出口量最大,据CNNIC的最新的《中国互联网络发展状况统计报告》,电信的总出口带宽比联通和移动加起来还要大,这是因为电信有两张骨干网,一是很早建成投入使用的ChinaNet 163网络,二是中国电信下一代承载网(ChinaNet Next Carrying Network),简称CN2,CN2的拓扑结构比163网更合理,设备更先进,网速也理所应当的比163更快。

一般的民用普通出国流量是走163网的,其特征就是路由追踪全部走202.97开头的,自治域为AS4134的结点。像cloudflare CDN一般都是走这张网,下面这张图片就是典型的163网。

163

稍微高级的线路是普通CN2线路,也叫CN2 GT,之前是需要办理电信的“国际精品网”才能使用,现在则需要机房接入CN2线路才能使用。其特点是仅在出境点使用CN2骨干网与国外连接,路由追踪为59.43开头的节点,而在国内仍大量使用163骨干网。下面这张图是典型的CN2 GT线路。

gt

等级最高的是CN2 GIA线路,也是需要机房接入CN2 GIA才能使用。CN2 GIA基本会使用最近的省级CN2结点接入CN2骨干网,出境时也会继续使用CN2网络进行连接。下面时典型CN2 GIA线路,可以很清楚的看到202.97节点减少。

gia

中国联通

联通实际上也有两张网,一张是联通自己的CHINA169网,另一张是收购的铁通公司的骨干网。网通公司很早就被联通并购,所以网通骨干网网络带宽很小,但用户基本都是企业用户,用户少,体验还不错,但一般平民百姓很难体验到。所以对我们来说,就只有一张169网咯。近些年联通宽带的很多用户去了移动,所以现在联通的出国线路不是特别拥挤,不怎么吃vps线路。联通的北京出口比较NB。

中国移动

移动网......戒网好帮手移动只有一张网(CMNET) 网络带宽也是三家最少的。之前移动没用宽带,所以当移动宽带刚刚开始运营时,网络质量非常棒;但随着移动家宽用户的暴涨,使得移动本不富裕的出口带宽紧缺起来,现在出口日常Boom。移动的广州-香港出口是其主力出口,之前的CMHK不是盖的,但现在夜间的丢包率让人心态爆炸。

教育网

什么时候能让我用上教育网出口我就什么时候来补 看我以后考研能去哪里了QAQ

这一部分总结最后po上一张群友的图:

几大运营商

常用测试工具

简单列出一些测试工具,供大家测试使用~

Best Trace

ipip.net 推出的网络测试工具,可以批量测试IP延迟,路由追踪,小巧轻量,相当实用,vps玩家人手必备。

best trace

同时ipip.net还有线上版的工具,利用ipip的测试节点探查自己vps的网络状况,模拟全国多地点的网络测试。戳ipip.net的右上角工具即可进入。

WinMTR

MTR的Windows版本,可以直观的探查传输路径中每个结点的联通状态,丢包率,网络延迟等。在大型论坛求助,一定要贴一下自己的MTR,要不然别人不知道你的线路,怎么帮你呢?
下载地址:https://sourceforge.net/projects/winmtr/

机房Looking Glass

上面给出的两种工具只能测试去程的线路质量,而相比于去程,回程线路直接决定了你的下载速度,直接决定了你的网速,所以一定要善用机房的Looking Glass。有的奸商说自己的机房是CN2机房,但机房只接了去程的半程CN2,回程还是普通的163,你使用上面的两种工具测试看上去不错,但实际使用起来不慢才怪。有的机房不提供Looking Glass,那就要小心了。


掌握了这些知识就可以去网上的那些主机推荐网站,那些AFFMAN那里收集更多vps商家的信息了。注意这里是收集信息,而不是听信他们的话,AFFMAN们自然会推荐返利最高的vps进行着重介绍,我们只对他们的话做简单参考,具体线路我们自己测量,这样就能买到适合自己的vps了。

我经过比对,觉得最适合我的是搬瓦工的CN2 GIA三网直连线路;其实最便宜的是阿里云国际,新手套餐2.5刀,电信CN2,联通自己线路直连,移动自己线路直连,但需要洋大人的身份和付款方式,我一个普通中国公民,难啊!搬瓦工是电信CN2 GIA,联通来回走CN2 GIA,移动去程直连回程CN2,比较适合我宿舍只能用移动,开学打算用联通手机卡,家里用电信的囧况 虽然有点贵,但是我觉得还是比较值的,今后我也会加大对服务器的利用,钱不能白花了~

]]>
0 https://blog.xmgspace.me/archives/how-to-choose-vps.html#comments https://blog.xmgspace.me/feed/archives/how-to-choose-vps.html
CentOS+Aria2 利用服务器空余带宽搭建离线下载 https://blog.xmgspace.me/archives/centos-aria2.html https://blog.xmgspace.me/archives/centos-aria2.html Wed, 12 Feb 2020 21:09:00 +0800 Xiaomage 为什么选择Aria2

我的服务器上有很多空余的带宽,1000G的流量正常翻墙、做站、搭建私有云使用使用率不到10%,有很多带宽被浪费掉了。弄个BT客户端,做个BT下载?BT下载是写死在服务器提供商Tos里面的,一经发现很可能被注销账号。

之前往服务器上下载东西,一个wget命令就足够了,简单高效。本地下载一些服务器在国外的网站上的文件时,速度比较慢,也是用wget命令,先下载到自己服务器上,再取回本地,然而太麻烦了,有什么软件能够快速管理服务器上的离线下载,快速将下载好的文件取回本地呢?

有!那就是Aria2,一款自由、跨平台命令行界面的下载管理器,同时支持rpc服务器,能够进行远程GUI管理。aria2功能强大,还有丰富的自定义选项,能够设置下载的user-agent,能自定义下载线程数,做到多线程下载,支持断点续传......很多“网盘下载器”都是aria2的套壳版。

部署Aria2 远程GUI前端

  1. 在宝塔面板、lnmp或oneinstack管理界面中新增一个站点,如download.example.com,其根目录为/home/wwwroot/download.example.com/,最好顺便利用这类工具,申请SSL证书;也可以手动使用acme.sh手动申请备用。
  2. 下载aria2 WebUI https://github.com/ziahamza/webui-aria2 代码到本地。其他类似的GUI面板也可以,在Github很容易找到。
  3. 将下载好的aria2 WebUI代码中的docs文件夹中的所有内容上传到服务器/home/wwwroot/download.example.com/文件夹中。这样前端就部署完毕了。

部署Aria2后端

安装

centos7官方源中并没有Aria2,需要先安装epel-release源:

yum install epel-release

然后安装Aria2:

yum install aria2 -y

查看是否成功安装,查看Aria2版本:

aria2c -v

看到Aria2的版本信息后,Aria2就安装成功了。

版本信息

配置

新建一个文件夹,用于保存配置文件和临时文件:

mkdir /etc/aria2/

/etc/aria2/目录下编辑aria2.conf配置文件:

vim /etc/aria2/aria2.conf

在配置文件中复制以下内容,注释详尽,按照注释填写即可:

## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释  ##

## 文件保存相关 ##

# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=<按照具体情况填写,建议填写为/home/wwwroot/download.example.com 方便取回本地>
#示例 dir=/home/wwwroot/download.example.com
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
#file-allocation=none
# 断点续传
continue=true

## 下载连接相关 ##

# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=5
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=16
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=16
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0
#max-upload-limit=0
# 禁用IPv6, 默认:false
#disable-ipv6=true
# 连接超时时间, 默认:60
#timeout=60
# 最大重试次数, 设置为0表示不限制重试次数, 默认:5
#max-tries=5
# 设置重试等待的秒数, 默认:0
#retry-wait=0

## 进度保存相关 ##

# 从会话文件中读取下载任务
#input-file=/etc/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
#save-session=/etc/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
#save-session-interval=60

## RPC相关设置 ##
## RPC服务用于远程控制,如果要使用远程GUI控制,需要开启该功能

# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
rpc-secret=<你自定义的令牌>
# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接
rpc-secure=true
#申请的域名crt证书文件路径,自行修改
rpc-certificate=<你申请到的证书>
#示例:rpc-certificate=/usr/local/nginx/conf/ssl/download.example.com.crt
#申请的域名key证书文件路径,自行修改
rpc-private-key=<生成的的key>
#示例:rpc-private-key=/usr/local/nginx/conf/ssl/download.example.com.key

## BT/PT下载相关 ##

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=false
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true
额外的注释
  1. 如果你没有申请到证书,只能使用http,无法使用https的情况下,要将rpc-secure设置为false并注释掉下面两行有关证书路径的配置。
  2. 如果你的服务器使用cloudflare加速的话,RPC监听端口只能设置为:http: 80 8080 8880 2052 2082 2086 2095,https: 443 2053 2083 2087 2096 8443。这是由于cloudflare的限制,详见cloudflare的这篇支持文章

添加Aria2到开机自启动

  1. 编辑/usr/lib/systemd/system/aria2.servicevim /usr/lib/systemd/system/aria2.service
  2. 在vim中粘贴以下内容,:wq保存:
[Unit]
Description=aria2
After=network.target

[Service]
ExecStart= /usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
ExecStop=/bin/kill $MAINPID
RestartSec=5s
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 添加aria2到开机启动项:systemctl enable aria2
  2. 启动aria2:systemctl start aria2

现在,大功告成!All things DONE!

在浏览器中输入download.example.com,就能进入远程下载管理界面了。

点击工具栏中的设置 > 连接设置,就可以配置前端与aria2后端进行交互了,如何填写见下图。

连接设置


历时长达两个月的大坑终于填完了~受疫情影响,一直在老家待着,没有通行证小区都无法进出。随着疫情受到控制,接下来就要步入学习生活的正轨了。

]]>
2 https://blog.xmgspace.me/archives/centos-aria2.html#comments https://blog.xmgspace.me/feed/archives/centos-aria2.html
给博客添加图片灯箱,FancyBox+Pjax踩坑记 https://blog.xmgspace.me/archives/fancybox-pjax.html https://blog.xmgspace.me/archives/fancybox-pjax.html Sat, 18 Jan 2020 19:01:00 +0800 Xiaomage 前情提要

Material Theme这套博客主题大约用了半年了,我很喜欢这套主题,很多元素基于Material Design初代设计(讲真,我真的不喜欢Material Design 2的卡片化,去线留白和底栏设计,从UI到操作充满了割裂感)但这套主题的确是缺少很多实用的功能,比如夜间模式,不支持图片灯箱,一开始也没有Pjax支持等等......为此我也进行了不少魔改,让这个博客主题既耐看又实用。

因此趁着寒假时间比较充裕,这次我就想给博客加一个图片灯箱功能。我之前使用的Raw主题就支持图片灯箱,使用的就是这个FancyBox,很多其他主流的主题使用的也都是这个图片灯箱。因此我决定给Material Theme加上FancyBox灯箱。

添加FancyBox灯箱

fancyBox是一款优秀的弹出框Jquery插件。能快速预览大图,快速放大图片,支持使用鼠标滚轮和键盘切换图片,能够将页面中的所有照片合成相册,幻灯片自动播放等等......总之,FancyBox是灯箱插件中相当好用的一个。

先把官网贴上:https://fancyapps.com/fancybox/3/

Github地址:https://github.com/fancyapps/fancybox

先使用CDN引入CSS和JS,FancyBox需要Jquery支持:

<link href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js" type="ee71b4ea12285dc3ed787f94-text/javascript"></script>

这里我们只使用FancyBox的基本功能,不需要进行初始化,FancyBox的基本功能就很强大了。

对typecho模板PHP代码的修改:

修改模板的post.php: 将模板中的

<?php $this->content(); ?>

修改成:

<?php
    $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i';
    $replacement = '<a href="$1" data-fancybox="gallery" /><img src="$1" alt="'.$this->title.'" title="点击放大图片"></a>';
    $content = preg_replace($pattern, $replacement, $this->content);
    echo $content;
?>

即可。这段代码的作用是将原来输出文章内容中的img标签进行替换,使之能够被FancyBox选择。如果还有其他独立页面,也可以进行修改。如果你的博客没有Pjax支持,现在就大功告成了,很简单不是?

修复FancyBox的Pjax支持

我魔改的Material Theme使用的Pjax并不是Github上star数最多的Jquery-pjax,而是另一款不需要Jquery支持的Pjax插件。

尽管我的博客引入了Jquery,但这款插件能够用在无Jquery的其他页面上,因此我最终还是学习了不需要Jquery的Pjax插件:MoOx/pjax。然而Pjax支持是我修改这个主题的一个大坑...

FancyBox灯箱能够正常被激活并使用。但是,当关闭FancyBox灯箱时,页面会重载一次。

这个问题困扰了我一段时间,百思不得其解......

最终,我在Hexo的issue中找到了一个跟我有相同遭遇的人,链接在此:

With PJAX, the page will refresh once after closing the image's fancybox window

Hexo项目中使用的Pjax正是我使用的MoOx/pjax,阅读上述issue,查看Hexo作者的在Github的commit后,我知道了症结所在:需要关闭FancyBox的hash模式,以止地址栏变化。因为Pjax插件检测到地址栏变化后,误以为加载了不同的页面,于是对整个页面进行重载。Hexo的commit地址在此

最终的解决方案:在页脚加入JS代码如下:

<script type="text/javascript">
    $(document).ready(function () {
      $.fancybox.defaults.hash = false;
    });
</script>

至此,FancyBox已经可以在我魔改的Material Theme上正常运行了。

参考资料

  1. Typecho文章图片添加灯箱效果 - 运营狗
  2. With PJAX, the page will refresh once after closing the image's fancybox window · Issue #1059 · theme-next/hexo-theme-next
]]>
0 https://blog.xmgspace.me/archives/fancybox-pjax.html#comments https://blog.xmgspace.me/feed/archives/fancybox-pjax.html