Nginx设置严格域名校验

配置 HTTP/HTTPS 网站时,Nginx 默认不严格校验 Host/SNI 字段。也就是说,假如我们只配置了 server_name 2dan.cc www.2dan.cc,但用户使用 IP 地址访问,仍然会访问到这个网站(server);另外使用 https://IP 访问,再查看SSL证书,会泄露IP上绑定的域名。

解决:

一、配置默认 server

要解决问题很简单,我们用 default_server 设置默认服务器就行了。对于 HTTP 协议,可以这么写:

server {
    listen 80 default_server;
    return 444;
}

其中 444 是 Nginx 自定义的、非 HTTP 标准的状态码,表示关闭连接;写成 403 之类也没问题。server_name 省略不写。

HTTPS 类似,但需要 SSL 证书。可以用现成的证书,但其中会有域名等信息。如果介意,自签名一张就好。

要自签名证书,我们先生成私钥(任选其一):

openssl genrsa -out /opt/self-signed.key 2048 # 2048 位 RSA
openssl ecparam -name secp384r1 -genkey -out /opt/self-signed.key # 384 位 ECC

然后根据私钥生成证书:

openssl req -new -x509 -days 3650 -key /opt/self-signed.key -out /opt/self-signed.crt -subj "/C=CN/ST=NULL/L=NULL/O=NULL/OU=NULL/CN=Please-enable-SNI"

其中 3650 是有效期天数,这里是 10 年。Please-enable-SNI 就是通用名称(Common Name),一般这里就是主域名,但我们自签名可以随便写,反正不受信任,也不需要被浏览器信任。

- 阅读剩余部分 -

SeaCMS使用定时任务软件实现自动生成

使用定时任务软件访问以下网址即可:

生成首页链接:
你的网址/后台目录/admin_makehtml2.php?action=index&by=video&password=cookie加密码

生成列表页链接:
你的网址/后台目录/admin_makehtml2.php?action=allchannel&password=cookie加密码

生成当天更新内容页链接:
你的网址/后台目录/admin_makehtml2.php?action=daysview&password=cookie加密码

cookie加密码位置:
后台 系统 - 网站资料设置 - cookie加密码

CloudFlare使用api修改域名解析NS为第三方NS

官方文档 https://developers.cloudflare.com/api/operations/registrar-domains-update-domain

修改方法

curl --request PUT \
  --url https://api.cloudflare.com/client/v4/accounts/账户ID/registrar/domains/2dan.cc\
  --header 'Content-Type: application/json' \
  --header 'X-Auth-Email: [email protected]' \
  --header 'X-Auth-Key: xa3a22e7388ca555827e78e1e8hca7f22b280' \
  --data '{
  "auto_renew": true,
  "locked": false,
  "name_servers": [
    "mussel.dnspod.net",
    "crystal.dnspod.net"
  ],
  "privacy": true
}'

- 阅读剩余部分 -

Cloudflare使用api自由切换SSL证书颁发机构

介绍

Cloudflare目前Free计划提供四种证书
DigiCert CF默认签发的证书,兼容性更广,证书链也更短,只有一级中间证书,证书为期一年
Let’s Encrypt 证书为其三个月更换,有被墙的黑历史,慎用
Google Trust Services 其三个月更换
Sectigo 这个仅作为备份,不能主动启用,在控制台使用应该是随机分配的,没办法指定。

切换方法

curl -X PATCH "https://api.cloudflare.com/client/v4/zones/你的域名区域ID/ssl/universal/settings" \
     -H "X-Auth-Email: 你的CF邮箱" \
     -H "X-Auth-Key: 你的APIKEY" \
     -H "Content-Type: application/json" \
     --data '{"enabled":true,"certificate_authority":"digicert"}'

- 阅读剩余部分 -

Linux自动备份网站文件和MySQL数据到远程服务器

本地生成备份

创建备份文件夹

mkdir -p /home/bakup

创建本地备份脚本文件

vi /root/bakup.sh

写入:

#打包网站文件
tar zcvpf /home/backup/blog-`date +%Y%m%d%H%M`.tar.gz /home/wwwroot/2dan.cc/* --exclude={'list','view','news'}

#导出数据库至独立文件
databases=`mysql --user=root -p123456 -e "show databases;" | grep -Ev "(Database|mysql|information_schema|performance_schema)"`
for db in $databases; do
  mysqldump -uroot -p123456 --lock-tables=false --databases $db | gzip > "/home/bakup/$db-`date +%Y%m%d%H%M`.sql.gz"
done
#删除3天前的备份
find /home/backup/  -name "*.gz" -type f -ctime  +3 | xargs rm -rf

- 阅读剩余部分 -