Openlitespeed 修改php最大上传大小

在管理面板里,可以修改,找到Virtual Host的General的最下面【
php.ini Override】加入

php_value upload_max_filesize 200M
php_value post_max_size 200M

也可以直接修改 lsphp 的配置文件了。比如lsphp7.4的配置文件在

/usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini

upload_max_filesize = 100M
post_max_size = 100M

Arch Linux服务器配置php-fpm并开启http/2

我之前是用libphp的方式安装的php,就是安装 php7-apache 这个包,但是这种方法不支持http/2,所以我换成了 php-fpm

具体的配置方法看arch wiki就可以了

Apache HTTP Server – ArchWiki (archlinux.org)

但我按wiki的方法配置好后,打开什么页面都是503

原因是我使用的是php7,安装的包也是 php7-fpm,arch linux最新的版本是php8了,所以配置默认是php8的,需要修改一下 SetHandler 

DirectoryIndex index.php index.html
<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php-fpm7/php-fpm.sock|fcgi://localhost/"
</FilesMatch>

然后重启一下 httpd 服务就行了

开启http/2也很简单 Apache HTTP Server – ArchWiki (archlinux.org)

取消注释

LoadModule http2_module modules/mod_http2.so

加入以下行就行了

Protocols h2 http/1.1

可以在以下网址测试网站是否开启http/2

Arch Linux 服务器开启BBR提高网络带宽和降低延迟

为内核加载 bbr 模块

echo "tcp_bbr" > /etc/modules-load.d/modules.conf

将默认的拥塞算法设置为 bbr

echo "net.core.default_qdisc=fq" > /etc/sysctl.d/bbr.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/bbr.conf

重启服务器后验证一下

sysctl net.ipv4.tcp_congestion_control

net.ipv4.tcp_congestion_control = bbr

打开bbr后,网站速度感觉快了一些

将网站服务器换成openlitespeed带来的速度提升

原来 nginx + phpfpm

换成 ols+lsphp 后

安装 lscache后

开启 lscache 一些优化合并css、js等配置后

vps用的digitalocean的,换起来很简单,直接新建一个droplet可以选择cyberpanel的模板,配置起来方便一点(尽管我感觉操作还是不够直接),然后将原来网站目录打包下载过来(用内网ip下载,速度有200mb/s),然后数据库导进来就行了

网站文件移动过来后记得要修改权限,然后生成.htaccess文件,在wordpress后台固定链接里重新配置一下会自动生成文件,但是要在cyberpanel里重新点修改rewrite规则,然后确认一下才会生效

因为我域名是解析到浮动ip的,所以我在digitalocean里把浮动ip重新绑定一下新droplet就好了,不用修改dns解析,太方便了

迁移过来后明显感觉比nginx快很多,但其实个人网站追求这点速度没必要,我也是折腾着玩的

解决 WP 图像后期处理失败,可能是服务器忙或没有足够的资源。请尝试上传较小的文件。推荐的最大尺寸为2500像素。

我的服务器是NGINX,所以先查看NGINX的错误日志

tail /var/log/nginx/error.log -n 10

上传一次大图像,然后看日志最后一条的信息是

2021/04/23 10:17:11 [error] 212420#212420: *166782 client intended to send too large body: 6849556 bytes, client: 120.85.112.147, server: zuoridangnian.com, request: “POST /wp-admin/async-upload.php HTTP/1.1”, host: “zuoridangnian.com”, referrer: “https://zuoridangnian.com/wp-admin/upload.php”

错误是:

client intended to send too large body

解决办法是:

在NGINX配置文件中添加

client_max_body_size 80m;

添加在 server 内对单独网站生效,添加在 http 块中对所有网站生效

如果你的服务器错误日志中是其它错误,就查其它的解决办法

WordPress 🏳‍🌈无限滚动Infinite scroll折腾记录

WP的滚动加载文章插件有很多,支持最好是jetpack里的滚动设置,但是安装这个插件会调用一些wp.com的资源,会降低网站速度,所以我还是放弃这个安装jetpack了。

我这里用的是 Catch Infinite Scroll,我的主题是官方的twentytwenty 2020主题。本来我好想用2021主题的,但对比了一下,我还是更喜欢2020的一些细节局部,干脆就用2020算了

默认安装好这个插件就直接实现滚动加载了,我猜测是这个插件会识别当前主题自动设置选择器。但我用的是我自己的子主题,所以要自己设置一下选择器

  • Navigation Selector是分页器的选择器 nav.navigation
  • Next Selector 是下一页的链接选择器,a 元素 nav.navigation .nav-links a.next
  • Content Selector 不填。填了无法实现加载,我也不知道怎么回事
  • Item Selector 是单个文章的选择器 article.status-publish

填好之后这个插件就会把原来的分页器换成 read more 的按钮

但是我又发现一个问题,用2020主题加载的话,文章之间的 hr 分隔栏是正常显示的。但是子主题就不会显示 hr 元素

所以我在子主题里把hr元素放到 article 里了

while (have_posts()) {
  $i++;

  the_post();

  get_template_part("template-parts/content", get_post_type());
}
<article <?php post_class(); ?> id="post-<?php the_ID(); ?>">

<?php if(is_archive()||is_home()) : ?>
    <hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />
<?php endif; ?>
...

接下来设置一下加载按钮的样式,默认就是个 read more 链接,我把它改成2020主题的按钮样式

#infinite-handle span button,
#infinite-handle span button:focus,
#infinite-handle span button:hover {
    background: #cd2653;
    border: none;
    border-radius: 0;
    color: #fff;
    cursor: pointer;
    display: inline-block;
    font-weight: 600;
    letter-spacing: 0.0333em;
    line-height: 1.25;
    margin: 0;
    opacity: 1;
    padding: 18px 24px;
    text-align: center;
    text-decoration: none;
    text-transform: uppercase;
    transition: opacity 0.15s linear;
    font-family: 'Lato', sans-serif;
    font-size: 17px;
}

加到子主题的style.css文件或者wp自定义主题里都行。

另外还要设置一下第一篇文章上面不需要分隔栏


#site-content article.status-publish:first-child hr {
	display:none;
}

.archive-header + article hr {
	display:none;
}

好了。到此完成,不用jetpack完美实现无限加载

获取WP网站内文章中失效的图片

import mysql.connector
import re
import requests
connection = mysql.connector.connect(host='localhost',
                                     database='wordpress',
                                     user='root',
                                     password='')

sql_select_Query = "select post_content,ID,post_title from wp_posts where post_status='publish' and post_type='post'"
cursor = connection.cursor()
cursor.execute(sql_select_Query)
# get all records
records = cursor.fetchall()

p = re.compile(r'<img.+?src=[\'"]([^\'"]+)[\'"].*?>')
fw=open('urls.txt','w', encoding='utf-8')
images = []

for i in records:
    # print(i[0])
    urls = p.findall(i[0])
    if len(urls):
        for url in urls:
            if(requests.get(url).status_code!=200):
                print(url)
                fw.write(str(i[1]) + ' ' + i[2] + '\n')
                fw.write(url + '\n')

WordPress错误:[] cURL error 60: SSL certificate problem: unable to get local issuer certificate

原因:SSL证书缺少根证书

如果你是自己上传的证书,那就是只设置了秘钥和域名证书

如果下载的SSL证书有三个文件

ca_bundle.crt 根证书

certificate.crt 域名证书

private.key 秘钥

如果是Apache服务器,则是这样设置

SSLEngine                on
SSLCertificateFile       /etc/ssl/certificate.crt
SSLCertificateKeyFile    /etc/ssl/private.key
SSLCertificateChainFile  /etc/ssl/ca_bundle.crt

如果是Nginx服务器,则要把 certificate.crt 和 ca_bundle.crt 文件合并

cat certificate.crt ca_bundle.crt  certificate.crt

然后这样设置

ssl                  on;
ssl_certificate      /etc/ssl/certificate.crt; 
ssl_certificate_key  /etc/ssl/private.key;