简易的,简单又实用的动态域名管理系统

写在前面。谢谢 WordPress 主人 John 提供的空间,让我写下这个笔记。
———————
我在家的宽带上自建了台服务器。可是宽带拨号上网,IP不固定。想在网上找个免费的动态域名,注册极为麻烦,还要绑手机。放弃了。
想到自己有个域名,也有个VPS主机 (固定IP)。不如自己搞个动态域名用把。
———————-
自己的域名,比如 “testtest.info”,VPS主机的IP,”比如 1.2.3.4″。
去域名解析控制台,添加一条二级域名的NS记录,指向自己的VPS主机。
因为NS记录不能直接写IP。所以实际要添加两条记录。
比如:
dd.testtest.info.   ns   mydns.testtest.info
mydns.testtest.info.   A   1.2.3.4

这样就可以用三级域名做自己的动态域名了。
比如:www.dd.testtest.info
lala.dd.testtest.info
———————
VPS主机,我装的是CentOS7。系统安装好之后。
yum  install  bind-chroot  bind-utils   # bind老是出漏洞,装个chroot版感觉安全点。
修改配置文件 /etc/named.conf
options  {
listen-on port 53 { 127.0.0.1; any; };
listen-on-v6 port 53 { ::1; any; };
allow-query { localhost; any; };
recursion no; /* 关闭了所有的axfr,如要allow-recursion生效,必须为yes */
allow-recursion { localhost; };
allow-transfer { localhost; };
};
# 以上条目,原来有的保留。不相同的就修改。原来没有的就添加。

添加一个zone,在 /etc/named.rfc1912.zones 文件最后,添加:
zone “dd.testtest.info” IN {
type master;
file “dynamic/named.dd.testtest.info”;
allow-update { localhost; };
};
// 要求 named 对 dynamic/ 目录有写权限
// nsupdate 时会生成 named.dd.testtest.info.jnl
// named.service stop 时会改写 named.dd.testtest.info 文件

创建zone的初始解析文件, /var/named/dynamic/named.dd.testtest.info
如果 /var/named/dynamic目录不存在,就先启动一下 service  named-chroot  start
$TTL   600
@   IN  SOA   mydns.testtest.info.    email.invalid (1234  86400  3600  604800  10800)
@   NS    mydns.testtest.info.
@   A   1.2.3.4

service   named-chroot   stop;
service   named-chroot   start;
systemctl   enable   named-chroot;
#检查防火墙开放了 udp/53 的访问。
iptables   -A   INPUT   -p  udp   –dport  53   -j  ACCEPT   #一般查询用
iptables   -A   INPUT   -p  tcp   –dport  53   -j  ACCEPT    # axfr 用
———————-
下载: my-ddns-by-osn-20180824.tar.gz
解压,按照里头的 readme.php 的说明文件配置。就可以用了。
大致步骤是,
* 在MySQL中创建数据库,创建一张表,
* 修改配置文件 mysqli_new_db.php,  config.php
* 创建一条 crontab 定时任务。2分钟执行一次。
* 测试一下,就能用了。
————————————
使用方法(两种方法):
1.自动获取客户端IP,定时访问 http://testtest.info/ddns/ddns.php?key=xxxxxxxxx&domain=lala
2.强制指定IP,定时访问 http://testtest.info/ddns/ddns.php?key=xxxxxxxxx&domain=lala&ip=5.6.7.8
建议每10-15分钟访问一次更新链接。超过60分钟未更新,对应域名重置为127.0.0.1
——– osn 写于 20180824 —–
——— 完 ———–

wordpress无法上传pdf提示http error

找了很久,之前怀疑是因为文件大小限制,改到128仍然不行,找到一些文章说是因为限制了文件类型,要改源代码,当然是不科学的,直接冲进插件库搜file type,就找到了好东西 装插件:WP Extra File Types Activate settings>Extra File Types 勾上需要的,,保存,完工 还没完,搜了一圈发现没有pdf,还得自己动手在最下面添加自定义的: 保存,还是不行…… 按照找了一圈后的发现,先手动用sftp上传到了服务器,然后用Add From Server 塞进media Library里,可以先用了
最后终于找到问题的根源了:不知道什么时候手贱装了mod_security,看了/var/log/httpd/error_log,看到ModSecurity: Access denied with code 44 (phase 2). Match of “eq 0” against “MULTIPART_UNMATCHED_BOUNDARY” required.,然后就明朗了

bitnami/php-fpm:5.6配置

感谢一位朋友(osn)帮助建立了多版本php环境(php5-fpm和php7-fpm共存),centos7+nginx+php-fpm7.1。这个环境下需要用到5.6版本的PHP。直接用yum装5.6版,会和之前装的7.1冲突。所以只好让PHP5跑在docker里了。下面是配置说明。 参考这个说明,如果系统跑php5.6,docker中跑php7,也可以。 或者用docker跑多个版本的php也行。 centos7安装后,用epel源安装nginx1.12,然后用webtatic源装php71w-fpm和php71w-cli。然后装了很多php71w-gd,php71w-pdo,…..的php支持。 php7在nginx的配置,支持PATH_INFO: 创建文件:/etc/nginx/default.d/php71w-fpm.conf ————– location ~ \.php($|/) { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; fastcgi_split_path_info   ^(.+?\.php)(/.*)$;   # 非贪婪匹配 if (!-e   $document_root$fastcgi_script_name) { return   404; } fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO   $fastcgi_path_info  if_not_empty; include   fastcgi_params; } ————– docker是用自带源(extras)  yum安装的。 php的docker镜像有很多。选择了bitnami/php-fpm。因为他的images体积小,才200多MB,版本齐,5.6, 7.0, 7.1, 7.2都有。 这个镜像的说明: https://store.docker.com/community/images/bitnami/php-fpm 拉取镜像,指定php5.6版本,执行: docker pull bitnami/php-fpm:5.6 测试容器,先启动起来看看,9000已经被7.1占用,5.6映射到9001: docker run -d –name phpfpm56 -v /data/web/php5:/app/web/php5 -p 127.0.0.1:9001:9000 bitnami/php-fpm:5.6 我的nginx网站的 root是 /data/web 修改nginx的配置,增加php5.6在目录/data/web/php5/的支持。 在server{  }中添加一个location{  }。这个配置是支持php的PATH_INFO的。 我把配置写在独立文件中了,然后在nginx配置中 include 进去。 我的例子:server { listen …. server_name …. root ….. include /data/config/nginx/phpfpm56.conf;   <—-加了这行 ……. } 我的独立配置文件为 /data/config/nginx/phpfpm56.conf  内容如下。 ————– location /php5/ { location ~ \.php($|/) { fastcgi_pass   127.0.0.1:9001; fastcgi_index  index.php; fastcgi_split_path_info   ^(.+?\.php)(/.*)$;   # 非贪婪匹配 if (!-e   $document_root$fastcgi_script_name) { return   404; } fastcgi_param  SCRIPT_FILENAME   /app/web$fastcgi_script_name; #fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO   $fastcgi_path_info  if_not_empty; include   fastcgi_params; fastcgi_param  DOCUMENT_ROOT   /app/web; } } ————– 建个文件 /data/web/php5/info.php   内容为 <?php   phpinfo(); ?> 浏览器访问 http://你的站/php5/info.php ,如果看到,说明成功了。 —————- 正式配置php-fpm5.6: 把php-fpm56 的配置文件copy到宿主机上,方便修改配置。 之前测试,启动的phpfpm56的容器,先别关。 cd /data/config/phpfpm56/    # 这个目录是宿主机上的目录,把配置文件copy出来。 docker cp phpfpm56:/opt/bitnami/php/etc/php-fpm.conf . docker cp phpfpm56:/opt/bitnami/php/etc/environment.conf . docker cp phpfpm56:/opt/bitnami/php/etc/common.conf . docker cp phpfpm56:/opt/bitnami/php/etc/php.ini . ——– 如果以后需要进入容器,以apache的身份执行命令(因为容器里头没有sudo),则做,否则跳过。 docker cp phpfpm56:/etc/passwd . #增加一行, apache:x:48:48:apache:/app:/bin/bash docker cp passwd phpfpm56:/etc/passwd # 就可以在container中su apache 了 ——– #host机上的配置文件,刚才从容器中copy出来的。 /data/config/phpfpm56/common.conf /data/config/phpfpm56/environment.conf /data/config/phpfpm56/php-fpm.conf /data/config/phpfpm56/www.conf     #如果需要,自行创建 /opt/bitnami/php/etc/php.ini # 以上配置文件中,对log的配置(我在php-fpm.conf中配置了log输出,具体配置不贴出来了) /opt/bitnami/php/logs/phpfpm56-error.log /opt/bitnami/php/logs/phpfpm56-www-slow.log /opt/bitnami/php/logs/phpfpm56-www.log ————— ## 未使用的配置 # common.conf 中就是 user=48   group=48 两行。一般php-fpm都以apache身份运行。 -v /data/config/phpfpm56/common.conf:/opt/bitnami/php/etc/common.conf \   # 抛弃。因内容直接写入 www.conf 或 php-fpm.conf 了 # 这个www.conf 我没用到。 -v /data/config/phpfpm56/www.conf:/opt/bitnami/php/etc/www.conf:ro \ # 这个配置应该可以获取到宿主机的IP。但失败了,不知道为什么。所以没用它。直接把IP写参数里了。 $(docker network inspect –format='{{range .IPAM.Config}}{{.Gateway}}{{end}}’ bridge) ————— docker container stop phpfpm56       # 停止container docker rm phpfpm56                          # 删除container # 重建container docker run -d –name phpfpm56 \ –add-host=mainhost:172.17.0.1 \    <—-宿主机的机器名, IP. –restart always \ -v /data/config/phpfpm56/php-fpm.conf:/opt/bitnami/php/etc/php-fpm.conf:ro \ -v /data/config/phpfpm56/php.ini:/opt/bitnami/php/etc/php.ini:ro \ -v /var/log/phpfpm56:/opt/bitnami/php/logs \ -v /data/web:/app/web \        <—-直接把网站的root映射到容器中。 -p 127.0.0.1:9001:9000   bitnami/php-fpm:5.6 # 设置容器开机自动启动。 docker update –restart always phpfpm56 # 检查 iptables 规则,允许container访问mysql, 检查mysql用户可以从 172.17.0.% 登陆和访问数据库。 # 下面这句,是用来进入容器执行命令的。 docker container exec -it phpfpm56 /bin/bash ————— 增加php5.6的工作目录, 比如 /data/web/newphp56 1. 修改 /data/config/nginx/phpfpm56.conf , 增加一个 location /newphp56/ {  } 配置, 内容copy前一个location的。 2. service nginx reload 注: php5.6-docker 中访问主机的MySQL,使用机器名, mysql-hostname:’mainhost’, 比如: $db=new mysqli(‘mainhost’,’用户名’,’密码’,’db name’); 或(不建议直接用IP): $db=new mysqli(‘172.17.0.1′,’用户名’,’密码’,’db name’); 因为如果容器迁移,宿主机的IP有可能会改变。 ————— 或者把location 中的关于php5.6的配置,单独写到一个文件中。比如 /xxx/handlephp56.conf 需要增加那个目录 就写: location /xxxx/ { include /xxx/handlephp56.conf; } 重启nginx,就行了。 —————

WordPress htaccess 默认内容

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress