分类 Internet 下的文章

gdrive 修改原作者脚本的 api 方法(无需编译)

unnamed.png

注意:仅当 client_id 和 client_secret 的长度与 gdrive 二进制文件中最初定义的长度相同时,此方法才有效。如果它们不是这些长度,则此方法将不起作用,您将不得不从源重新编译。

1.为Google云端硬盘生成API凭据

2.从 client_id.json 文件中获取 client_id 和 client_secret。client_id 必须是72个字符长,client_secret 必须是24个字符长。如果它们不是这些长度,则遵循此方法可能会破坏 gdrive,您将不得不从源代码重新编译 gdrive。

wc 长度命令

echo -n **CLIENT_ID** | wc -c
echo -n **CLIENT_SECRET** | wc -c

3.备份 gdrive 二进制文件

cp /usr/bin/gdrive gdrive.old

4.使用 sed(替换CLIENT_IDCLIENT_SECRET使用 client_id.json 中新生成的详细信息)就地编辑二进制文件。

sed -i -e 's/xxx-7n0vf5akeru7on6o2fjinrecpdoe99eg.apps.googleusercontent.com/CLIENT_ID/g' /usr/bin/gdrive

sed -i -e 's/xxxodXNaWq1mQuBjUjmvhoO/CLIENT_SECRET/g' /usr/bin/gdrive

以上自行切换成自己的 CLIENT_ID、CLIENT_SECRET.

删除旧的 .gdrive / token_v2.json

rm .gdrive/token_v2.json

5.运行 gdrive list 以确认它是否有效。它会要求您再次通过 OAuth 登录过程以生成新令牌,但在您的 Google 云端硬盘中应该有一个文件列表。

结束。

GDRIVE 错误:Failed to get about: googleapi: Error 403...

Google-API.jpg

在 SSH 终端自动进行网站备份到 google drive 的时候,会经常出现这个脚本提示出错信息:Failed to get about: googleapi: Error 403: Rate Limit Exceeded, rateLimitExceeded

在查询脚本源码的时候发现开发人员为此程序制作了一个 api,而 Google api 只能“一天”生成 1000 万个请求。这意味着有太多人使用此程序并且请求已满。

该怎么更换成自己的 api 呢?

您必须创建自己的Google drive api,下载编程语言 go,将 api 更改为您自己的 api 并在 linux 将其编译。

不会编译?没事,还有一个方法,手动上传备份文件到 google drive.

手动也会出错?那就多次上传至成功为止,脚本 api 是公用的,一条大马路车多了都要堵车,何况公用的 api 呢?

gdrive 上传文件命令:gdrive upload

想更换成自己的 api 又不会编译?教程我已经在制作中,有空会公布...

Centos 7 启动 Fail2ban 故障解决

fail2ban.jpg

网站运营以来一直没注重安全这方面的问题,趁着空闲登录后台看了看 Nginx 日志文件,才发现有大量的 ip 扫描服务器端口以及网站的 php 文件和大量的 ChallengeCollapsar 请求,为了避免这些,直接利用 Fail2ban + Firewalld 来防御简单的攻击请求。

当然了,这种简单的防御机制并不能防御复杂的分布式暴力攻击,这些攻击者通过使用成千上万个机器控制的 ip 地址来绕过 Fail2ban 的防御机制...遇到这种攻击直接上高防或者关机,无解。

安装完毕之后,启动 Fail2ban 时提示以下故障代码:

Job for fail2ban.service failed because the control process exited with error code. See "systemctl status fail2ban.service" and "journalctl -xe" for details.

在修改 jail.conf 配置文件的时候,我没有选择追加配置而是直接覆盖了原本的配置文件,在启动的时候触发了错误机制,搜索的时候发现有很多网友都遇到了这个问题,之后在这篇文章中找到了解决方法:Fail2ban 防止暴力破解 Centos 服务器的 SSH 或者 FTP 账户

重点:“[INCLUDES]”以前的不要动(都是注释),否则 Fail2ban 服务就无法启动。可以用命令来检查语法错误。

fail2ban-client -v -v start

我的方法是直接在原配置文件中追加配置,然后启动成功。

等待几日就可以用命令查看有哪些 ip 被屏蔽啦。

LNMP1.5 安装 ngx_cache_purge 缓存清除组件

LNMP安装ngx_cache_purge缓存清除组件步骤如下:

一、检查是否已安装 ngx_cache_purge

nginx -V 2>&1 | grep -o ngx_cache_purg

如果显示 ngx_cache_purge 则已安装。

二、编译安装 ngx_cache_purge 步骤

1、进入LNMP的源码目录

cd /root/lnmp1.5/src

2、下载最新版 ngx_cache_purge

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

3、解压 NGINX 和 ngx_cache_purge

tar xzf nginx-1.14.0.tar.gz
tar xzf ngx_cache_purge-2.3.tar.gz

4、进入 nginx 目录

cd nginx-1.14.0

5、查看现有 nginx 配置参数

nginx -V

6、在现有的编译参数后面加上–add-module=/root/lnmp1.5/src/ngx_cache_purge-2.3

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/root/lnmp1.5/src/openssl-1.0.2o --add-module=/root/lnmp1.5/src/ngx_cache_purge-2.3

如您的编译参数不同,请自行对照修改。

7、开始编译

make

8、备份原来的 Nginx 编译文件

mv /usr/local/nginx/sbin/nginx{,_`date +%F`}

9、拷贝新的编译文件过去

cp objs/nginx /usr/local/nginx/sbin/nginx

10、检查配置

/usr/local/nginx/sbin/nginx -t

11、完成升级

make upgrade

12、检查是否安装成功

nginx -V 2>&1 | grep -o ngx_cache_purge

出现 ngx_cache_purge ,表示已经成功在 LNMP1.5 环境下添加了 ngx_cache_purge 组件。

Nginx 自建 CDN 反代加速节点

cdn-graph.jpg

CDN:CDN 的全称是 Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。其目的是使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度。

安装 Nginx

需要在所有 CDN 服务器节点安装 Nginx,推荐使用 OneinStack 或军哥的 lnmp.org 一键包,如何安装 Nginx 自行参考脚本官网就行了。

反向代理配置

反向代理通俗点你把它理解成 CDN 节点就行了,这里用一台服务器作为解释,

源站:192.168.1.100

CDN:192.168.1.101

假如我需要对 inwao.com 搭建 CDN 节点,数据放在 192.168.1.100,需要先修改 hosts 指向,告知 CDN 节点从那里去获取网站数据,也就是回源地址,需要在 CDN 做如下修改:

vi /etc/hosts
192.168.1.100   inwao.com

在 CDN 下创建 nginx 配置文件 inwao.com.conf

#创建缓存目录
mkdir -p /usr/local/nginx/caches/inwao.com
#设置缓存目录权限
chown -R www:www /usr/local/nginx/caches/inwao.com
#创建inwao.com.conf
vi /usr/local/nginx/conf/vhost/inwao.com.conf

在 inwao.com.conf 中添加下面的内容,缓存目录/缓存时间请根据实际情况调整,后面会详细说明各参数含义。

proxy_cache_path /usr/local/nginx/caches/inwao.com levels=1:2 keys_zone=xiaoz:50m inactive=30m max_size=50m;
server {
    listen 80;
    server_name inwao.com;
    charset utf-8,gbk;
        location / {
        proxy_set_header Accept-Encoding "";
           proxy_pass https://inwao.com;
           proxy_redirect off;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache xiaoz;
           proxy_cache_valid  200 304  30m;
           proxy_cache_valid  301 24h;
           proxy_cache_valid  500 502 503 504 0s;
           proxy_cache_valid any 1s;
           proxy_cache_min_uses 1;
           expires 12h;
    }
}
  • /usr/local/nginx/caches/inwao.com:为缓存目录。
  • levels:指定该缓存空间有两层 hash 目录,第一层目录为 1 个字母,第二层为 2 个字母。
  • keys_zone=inwao:50m:为缓存空间起个名字,这里取名为“inwao”,后面的 50m 指内存缓存空间。
  • inactive=30m:如果 30 分钟内该资源没有被访问则删除。
  • max_size=50m:指硬盘缓存大小为 50MB.
  • proxy_cache_valid:指定状态码缓存时间,前面写状态码,后面写缓存时间。

重载 nginx 命令:

/etc/init.d/nginx restart

以上是 Http 站点的 Nginx 反代设置,如果你是想反代 Https 站点,参考如下配置进行调整即可:

https CDN 配置:

proxy_cache_path /usr/local/nginx/caches/inwao.com levels=1:2 keys_zone=inwao:50m inactive=30m max_size=50m;
server {
    listen 443 ssl http2;
    ssl_certificate /usr/local/nginx/conf/ssl/inwao.com/fullchain.cer;
    ssl_certificate_key /usr/local/nginx/conf/ssl/inwao.com/inwao.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";

    ssl_prefer_server_ciphers on;

    ssl_stapling on;
    ssl_stapling_verify on;

    server_name inwao.com;
    access_log /usr/local/nginx/caches/inwao.com_nginx.log combined;

    charset utf-8,gbk;
        location / {
        proxy_set_header Accept-Encoding "";
           proxy_pass https://inwao.com;
           proxy_redirect off;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_cache inwao;
           proxy_cache_valid  200 304  30m;
           proxy_cache_valid  301 24h;
           proxy_cache_valid  500 502 503 504 0s;
           proxy_cache_valid any 1s;
           proxy_cache_min_uses 1;
           expires 12h;
    }
}

清理 Nginx 缓存需要 ngx_cache_purge 模块帮助,可输入命令nginx -V查看已经编译的模块,如果没有 ngx_cache_purge 说明模块没有安装,则需要重新编译一下 Nginx。

ngx_cache_purge 编译教程:LNMP1.5 安装 ngx_cache_purge 缓存清除组件

在 nginx.conf 的 server 段内加入下面的配置,并重载 Nginx,下面的 inwao 请与 keys_zone 定义的值保持一致,否则 nginx 将无法启动。

location ~ /purge(/.*) {
allow all;
proxy_cache_purge inwao $proxy_host$1$is_args$args;
error_page 405 =200 /purge$1;
}

如果想清理缓存,添加 dcache 参数即可,如 https://inwao.com/dcache/xxx.png 如果一直出现 404 错误,请检查配置。

对于 typecho 博客,如果启用 CDN 后页面被缓存,用户提交评论后无法马上显示出来,可以使用 Ajax 异步请求 ngx_cache_purge 接口,当用户提交评论的时候则清除该页面缓存。只需要下面的这段 js 添加到 footer.php 即可。

<script>
        $(document).ready(function(){
            $("#submit").click(function(){
                var uri = "https://inwao.com/purge" + window.location.pathname;
                $.get(uri,function(data,status){
                    return true;
                });
            });
        });
</script>

以下是 CDN 完整配置,仅供参考,你需要替换好 Keys_zone、SSL 路径、域名等:

proxy_cache_path /usr/local/nginx/caches/inwao.com levels=1:2 keys_zone=inwao:100m inactive=30m max_size=100m;
server
    {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/ssl/inwao.com/fullchain.cer;
    ssl_certificate_key /usr/local/nginx/conf/ssl/inwao.com/inwao.com.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";
    # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
    ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;

    server_name     inwao.com;
    charset utf-8,gbk;

   #删除缓存
    location ~ /dcache(/.*) {
    allow all;
    proxy_cache_purge inwao $proxy_host$1$is_args$args;
    error_page 405 =200 /purge$1;
    }

       location / {
       #proxy_set_header Accept-Encoding "";
       proxy_pass https://inwao.com;
       proxy_redirect off;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_cache inwao;
       proxy_cache_valid  200 304  30m;
       proxy_cache_valid  301 24h;
       proxy_cache_valid  500 502 503 504 0s;
       proxy_cache_valid any 1s;
       #达到第几次被缓存?
       proxy_cache_min_uses 1;
       expires 12h;
       proxy_cache_key    $uri$is_args$args;
    }
}
server
{
    listen 80;
    server_name inwao.com;
    rewrite ^(.*) https://inwao.com$1 permanent;
}

启用 CDN 后无法获取真实 IP

如果是 typecho 用户,当你启用了 Nginx CDN 加速后,你会发现后台获取到的用户评论 IP 都变成了 CDN 节点的,解决这个问题也很简单,在 typecho 的根目录的 config.inc.php 插入以下代码即可。

if (isset($_SERVER['HTTP_X_REAL_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

本站已开启 hong kong CDN 加速节点,已实现全站资源自动更新缓存,在开启 CDN 加速的情况下评论会及时异步请求显示,评论信息获取真实 IP.