美文网首页技术技术纵横Linux各种姿势
一个加速访问 StackOverflow 的方法

一个加速访问 StackOverflow 的方法

作者: kamidox | 来源:发表于2015-10-02 00:46 被阅读5836次

    安全预警:最近的 xcode ghost 事件让大家的安全意识提高了不少。本文介绍的方法可能存在一些安全隐患。当然,解决方案也是有的,就是可以把本地 cdn 加速的文件和官网发布的正式版本做 md5 检验,这样确保本地文件没有被修改。由于时间紧迫,目前还没有实现 md5 检验。请自己负责你的计算机安全。

    问题

    访问 StackOverflow 时奇慢无比有没有?其实原因不是因为 StackOverflow 不能访问,而是因为 StackOverflow 网站引用了 Google 的 CDN 加速服务器来下载 jqeury 脚本。知乎上有个话题讨论了这个问题。

    解决方案

    在本地搭建一个 web 服务器,然后下载好 jquery 脚本,放在本地 web 服务器上。再修改 hosts 文件,把 ajax.googleapis.com 重定向到本地 127.0.0.1 。这样浏览器就会从本地下载脚本,而不再从 ajax.googleapis.com 下载了。

    详细步骤

    这里将介绍详细的安装和配置过程,需要注意的是所有的目录和命令以我的 mac 下的环境为例。如果你用的是不同的版本或不同的操作系统,根据你的情况完成相应的配置即可。

    安装 nginx 服务器

    网上一堆教程,搜索一下就可以成功安装,需要注意的是两点。一是需要设置 nginx 开机启动。二是需要修改 nginx 运行权限,因为我们要在 80 端口提供服务,80 端口需要 root 权限才可以。

    设置 nginx 开机启动

    把下面文件内容保存到 /Library/LaunchAgents/com.nginx.plist。然后运行 launchctl load -w /Library/LaunchAgents/com.nginx.plist

    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
        <key>Label</key>
        <string>homebrew.mxcl.nginx</string>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <false/>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/opt/nginx/bin/nginx</string>
            <string>-g</string>
            <string>daemon off;</string>
        </array>
        <key>WorkingDirectory</key>
        <string>/usr/local</string>
        <key>StandardErrorPath</key>
        <string>/usr/local/var/log/nginx/error.log</string>
        <key>StandardOutPath</key>
        <string>/usr/local/var/log/nginx/access.log</string>
      </dict>
    </plist>
    

    修改 nginx 运行权限

    sudo chown root:admin /usr/local/Cellar/nginx/1.8.0/bin/nginx
    sudo chmod u+s /usr/local/Cellar/nginx/1.8.0/bin/nginx
    

    配置 nginx 服务器

    配置 nginx 服务器主要分两步。一是生成 ssl 证书,用来提供 https 服务。二是下载 local-cdn 到本地,将配置 nginx 指向这个本地目录以便提供 cdn 服务。

    生成 ssl 证书

    我们本地 cdn 还需要支持 ssl,所以需要做一个自签名的证书。下面命令会在 /usr/local/etc/nginx/ssl/ 目录下生成一个自签名的证书。这个证书后面会用到。

    mkdir -p /usr/local/etc/nginx/ssl
    openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /usr/local/etc/nginx/ssl/nginx.key -out /usr/local/etc/nginx/ssl/nginx.crt
    

    配置 nginx 服务器

    把 local-cdn 下载到本地,比如放在 /Users/kamidox/work/local-cdn

    cd /Users/kamidox/work/
    git clone https://github.com/kamidox/local-cdn.git
    

    然后配置 nginx 添加这个目录当作内容目录。我们把下面内容保存到 /usr/local/etc/nginx/servers/local-cdn.conf。注意配置中用到了我们上面生成的证书。另外,nginx 默认会 include /usr/local/etc/nginx/servers/ 下的所有配置文件。如果你修改过 nginx 的默认配置,根据你自己的情况配置即可。

    server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;
        charset utf-8;
    
        listen 443 ssl;
    
        server_name localhost;
        ssl_certificate /usr/local/etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /usr/local/etc/nginx/ssl/nginx.key;
    
        location / {
            root /Users/kamidox/work/local-cdn/;
            index index.html index.htm;
        }
    }
    

    Contribution

    欢迎大家提 pull request,一起完善科学文明的上网环境。

    相关文章

      网友评论

      • 1e2dc64503e6:河马加速器,秒开,码农神器
      • c209b9e761c1:科学上网 https://anyproxy.cc/
        c209b9e761c1:更新网址 https://anyproxy.cn/ 或 https://proxyit.cc/
      • GHOST的耳语:这个改host就行了吧,把ajax.googleapis.com重定向到localhost就行,当年玩codeforces也是用这个方法
      • 小厨笔记:登陆没反应貌似也是这个原因引起的。
      • d5e5b7b37a74:直接google replacer就可以了
      • d6bb47cca45d:遇到https不行,数字证书颁发机构CA不认私人证书
        kamidox: @不悔狮子 浏览器点允许就行了啊
      • hackest:还是VPN省事。。。
        f3969479e601:@kamidox :fist: 很详细,谢谢,剩下的我自己解决了。
        kamidox: @织meng者 好几个方法。1. 免费,但要求点技术。用aws自己搭个vpn服务器。aws有一年的免费期。我现在用这个。2. 购买vpn服务,稳定,省心。3. 比较不推荐的,网上有一些免费的vpn,有些都已经不能用了,也不稳定,可能要花不少时间,个人感觉划不来。
        f3969479e601:@hackest vpn帐号怎么弄,能教我一下吗
      • 阡陌流年:阔以,试试
      • 3918ee92fb03:科学上网不就行了,还这么麻烦
        kamidox: @hahasong 正解。不过科学上网也有一些问题,比如一上vpn,我的虾米就播放不了了。加上很多人不一定愿意花钱去科学上网
      • 9814c09cceda:求教代码插入如何做到的
        kamidox:@番茄很忙 使用 github 风格的 markdown 语法,比如:
        ```python
        print("This is python code")
        ```
        更完整的 markdown 语法网上搜索一下,或者参考我的另外一篇文章:http://blog.kamidox.com/write-markdown-using-sublime.html
        237f72dadad8:就是你文章中代码示例那块内容,怎么放进文章里的
        kamidox: @小北风sky 代码插入?不明白什么意思
      • Xiaoliable:支持科学上网!!
      • 7610b1602514:需要这么复杂配置本地web服务器?配置host到360的CDN(useso)就行了吧
        kamidox:@stepway 试了一下,配置 host 到 360 的 CDN (useso) 行不通。原因是 host 配置文件只支持域名到 ip 地址的映射,不支持域名到域名的映射。即如果使用这样的 host 记录是无效的:ajax.useso.com ajax.googleapis.com。而如果使用 ajax.uses.com 这个域名的 IP 地址来配置 ajax.googleapis.com,即使用 221.204.14.188 ajax.googleapis.com 也行不通。原因不明,有可能是 360 的 cdn 不支持直接 ip 地址访问,只能通过域名访问。
        无与童比:@stepway 你这个方法好棒!
        kamidox: @stepway 嗯,之前不知道。如果目录一样且完全可信确实是可以的。

      本文标题:一个加速访问 StackOverflow 的方法

      本文链接:https://www.haomeiwen.com/subject/unkgcttx.html