1743天 博客通用头像 Edwiin

本人熟练掌握linux,windows的开关机,擅长nfs,samba,ftp,dhcp,bind,apache,mail等各项服务的安装与卸载,精通shell,mysql,iptables,selinux等单词的拼写,了解虚拟化,存储,集群等相关汉字的书写。

【Linux学习】反向代理_如何拯救我的 GitHub Pages 博客?

发布于 8个月前 / 89 次围观 / 0 条评论 / Linux / Edwiin
本文最后更新于2020-4-13,已超过 1 个月没有更新,如果文章内容或图片资源失效,请【留言反馈】,我会及时处理,谢谢!

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

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

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

什么叫反向代理

通俗来讲,反向代理可以理解为「将一个域名下的网站替换成另一个域名下的网站,但访问时仍然使用这个域名」的技术。举个例子,我们都知道百度域名是 baidu.com,你此时拥有一个域名 yaoyuanlong.com,那么你便可以通过反向代理,让用户访问 yaoyuanlong.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.conf 和 default-ssl.conf 为例子。首先打开 000-default.conf

Bash:
vim 000-default.conf

然后我们进行一些设置。

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

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

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

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

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

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

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

证书可以在阿里云或腾讯云上免费申请,阿里云是赛门铁克的证书,腾讯云则是亚洲威信。阿里云申请证书仅需支付宝身份证实名,腾讯云需要身份证+银行卡实名。

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

Bash:
sudo a2ensite *.conf
sudo systemctl reload apache2

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

有任何问题欢迎追问哦。

  • 支付宝赞助图片
  • 微信赞助图片
  • QQ赞助图片
头像
描述: 还好有你,再见如初。
未显示?请点击刷新

Press Space to start