• 【问卷调查奖励发放公告】

    感谢大家积极参与本次 MineBBS 社区问卷调查。200 金粒的参与奖励已完成发放。部分用户发放失败,请【点击此处】 查看详情。

运营维护 【反向代理】如何拯救我的 GitHub Pages 博客?

Subilan

【Lv:4】

注册
2018/07/07
消息
25
金粒
5,832金粒
未标题-1.png
众所周知,因为一些 :evil: 的原因,GitHub Pages 最近惨遭赠送北京电信免费加速服务和三网进出路由劫持,幸运的是目前已经恢复了。GitHub Pages 很好用,又免费又简单,除了速度慢了点hhh。也正因此有很多人将 GitHub Pages 用作部署自己的博客,甚至于成为了一种时尚。目前来讲,静态、GitHub Pages 和繁杂的友情链接已经成为一个「酷酷」的博客的标配。而这件事情也势必引起了中国大陆的 GitHub Pages 用户的担心,自己的博客是否在将来就这样被 :evil: 了?这是很惨的。

因此今天推出一个教程,通过一门也许在很久之前就已经烂大街的技术来绕开这些问题。这门技术的名称叫做反向代理。本文中所提到的一切内容仅限于此次事件的补救,与任何其它行为无关,请勿将此方法用作非法用途!

本文仅介绍 Apache 在 Ubuntu 下的配置方法,若有了解 Nginx 的朋友欢迎接坑。

什么叫反向代理

通俗来讲,反向代理可以理解为「将一个域名下的网站替换成另一个域名下的网站,但访问时仍然使用这个域名」的技术。举个例子,我们都知道百度的域名是 baidu.com,你此时拥有一个域名 daobanbaidu.com,那么你便可以通过反向代理,让用户访问 daobanbaidu.com 的时候显示 baidu.com 的内容,且在这个「虚拟」站点下做出的任何改动,都将和真正的百度同步。

那么再扩大一点想,如果你是主机 C,此时因为未知原因无法访问站点 A,而站点 B 的服务器可以正常访问站点 A,那么如何从主机 C 访问站点 A 呢?很简单,「使用」站点 B 的服务器访问站点 A 。

基本流程

首先我们需要
  • 一台不在大陆的 Ubuntu 服务器(开 幕 雷 击
  • Apache 2.4
  • 脑子
若没有 Apache 2.4 可以轻松安装

Bash:
sudo apt install apache2.4

安装完毕后,我们需要启动几个必须的 Apache 模块:

Bash:
sudo a2enmod proxy proxy_connect proxy_http ssl rewrite

然后我们按照正常操作去配置一个域名。首先找到 /etc/apache2/sites-available 下的站点文件。我们这里以 000-default.confdefault-ssl.conf 为例子。首先打开 000-default.conf

Bash:
vim 000-default.conf

然后我们进行一些设置。

Apache 配置:
<VirtualHost *:80>
        ServerAdmin # 这里填写你的邮箱地址,或者不填写也可以
        ServerName # 这里填写你的域名,比如 daobanbaidu.com

        SSLProxyEngine On # 开启代理 SSL,避免一些因为 SSL 导致的不必要重定向
        ProxyRequests Off
        ProxyPass # 填写代理规则
        ProxyPassReverse # 反向代理,跟上面的 ProxyPass 一样填写即可
        # 代理规则举例:ProxyPass / https://baidu.com
        # 这相当于将 ServerName 里设置的域名(例如 daobanbaidu.com)映射的根目录代理到 https://baidu.com

        <Proxy *>
                Require all granted # 允许外部访问
        </Proxy>

        # 以下可选,加上以后会强制 HTTPS
        # RewriteEngine on
        # RewriteCond %{SERVER_PORT} !^443$
        # RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>

这样,我们的一个反向代理就完成了!核心部分只有 ProxyPassProxyPassReverse 两个。具体用法已经在上面给出,如仍然有不懂可以回帖询问~

接下来我们要配置 SSL。default-ssl.conf 里的内容,实际上只需要复制我们上面已经配置的那些。除此之外,我们还需要配置 SSL 证书。

Apache 配置:
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                SSLEngine on
                SSLCertificateFile # public 证书
                SSLCertificateChainFile # chain 证书
                SSLCertificateKeyFile # 私有证书
       </VirtualHost>
</IfModule>

证书可以在阿里云或腾讯云上免费申请,阿里云是赛门铁克的证书,腾讯云则是亚洲威信。阿里云申请证书仅需支付宝身份证实名,腾讯云需要身份证+银行卡实名(但有绕过的方法:evil:,需要的私)。

最后我们启用这两个站点再重载 Apache2 就大功告成了。

Bash:
sudo a2ensite *.conf
sudo systemctl reload apache2

这时候,如果访问 daobanbaidu.com 就会像开头所说的那样,呈现出 baidu.com 的样子。顺着这个逻辑,可以将 daobanbaidu.com 更改为你的域名(比如说我的 subilan.win),baidu.com 更改为你的博客实际地址(比如说我的 subilan.github.io),这样当访问前者便可以直接呈现出后者的画面,相当于解决了这个大陆无法访问的问题。

:tieba-24:有任何问题欢迎追问哦。
 
最后编辑:
我把博客托管在github pages,不过在国内线路解析到了亚太地区的cdn,缓存设置了,速度也变快了,这样这回劫持事件没受影响;流量钱的话....其实我也算白嫖怪:evil:
 

在线会员

  • qiushuishui
  • 78fyk
  • Emphasize
  • SPAPP
  • 神殇
  • MingChengT
  • 爱无差异
  • 璀星海
  • roundplus
  • 凭栏听雨
  • 2801326928
  • Han_Jiang
  • luohua161
  • tiyunz
  • LinHan
  • cpdhr
  • 随风i
  • ms29790784
  • 无敌私宅男神
  • hu7_
...和 34 更多。
后退
顶部 底部