侧边栏壁纸
博主头像
Mick

The you you are.

  • 累计撰写 37 篇文章
  • 累计创建 31 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

建立维基百科镜像站

建立维基百科有三种方法,在 https://github.com/pirate/wikipedia-mirror 中三种方法都已经有了详细的介绍。但是在经过实践后,利用Nginx反代来建站这一方案似乎有更好的策略

前提:
安装了substitutions_filter_module 模块的Nginx

原理:
镜像实际上是对维基百科的反向代理,通过VPS作为代理,代替用户到真实的维基百科服务器拉取资源然后返回。
1

对于所有反向代理网站的制作,我们必须解决几个问题:

  1. 反向代理域名;
  2. 替换的网页内容;

对于维基百科,我们需要反向代理(下面简称反代)三个域名:
wikipedia.org (英文主域名)
m.wikipedia.org (手机域名)
upload.wikimedia.org (图片资源域名)

而替换内容主要是为了将原页面的链接替换为我们服务器的域名,这样才能实现无缝访问。

1. 域名反代

sudo -i
cd /etc/nginx/sites-enabled
vim wiki.conf

复制以下内容

server {
	server_name wiki.example.com;
	listen 80;
	location / {
		proxy_pass https://wikipedia.org;
	}
}

esc -> :wq 保存加退出

nginx -s reload

.

这时发现我们可以正常浏览文字内容,但是所有的公式,图片都无法加载。这是因为wiki的图片服务是通过 upload.wikimedia.org ,而不是直接走维基主网站

2. 资源反代

现在配置对 upload.wikimedia.org 的反代

vim upload_wiki.conf

复制以下内容

server {
	server_name upload.wiki.example.com;
	listen 80;
	location / {
		proxy_pass https://upload.wikimedia.org;
	}
}

esc -> :wq 保存加退出

nginx -s reload

将upload.wikimedia.org改为upload.wiki.example.com,可以打开则成功: https://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Ubuntu-logo-2022.svg/250px-Ubuntu-logo-2022.svg.png
Ubuntu-logo-2022

3. 地址替换

但是这样我们还是打不开网页上的图片,我们还需要将网页上所有图片地址和链接的域名更换为我们的域名。这就需要使用到Nginx的ngx_http_substitutions_filter_module模块,这个模块默认安装是没有的,需要自行编译安装进去。

.

方法在这里 Nginx 安装第三方模块(以substitutions_filter_module 为例)

.

若你已经安装,就把 wiki.conf 修改至如下并加上对手机网页的反代:

# wiki.conf

server {
	server_name wiki.example.com;
	listen 80;
	location / {
		proxy_pass https://wikipedia.org;
        proxy_set_header Accept-Encoding '';
        proxy_redirect https://m.wikipedia.org/ http://m.wiki.example.com/;
	}
	
	subs_filter_types text/css text/html text/xml text/javascript application/javascript application/json;
	subs_filter https:// http://;
	subs_filter //wikipedia.org //wiki.example.com;
	subs_filter upload.wikimedia.org upload.wiki.example.com;
}
# mwiki.conf

server {
	server_name m.wikipedia.org;
	listen 80;
	location / {
		proxy_pass https://m.wikipedia.org;
		proxy_set_header Accept-Encoding '';
	}
	
	subs_filter_types text/css text/html text/xml text/javascript application/javascript application/json;
	subs_filter https:// http://;
	subs_filter //m.wikipedia.org //m.wikipedia.org;
	subs_filter upload.wikimedia.org uupload.wiki.example.com;
}

最后重启服务后,再访问就可以了

nginx -s reload

Reference:
https://github.com/pirate/wikipedia-mirror
https://my.hancel.org/2017/01/06/make-wiki-mirror.html

0

评论区