# 内存限制
maxmemory 128mb
# 客户端连接数限制
maxclients 5000
# 日志级别
loglevel warning
# 关闭AOF
# 全用来做缓存,没必要启用AOF
# 启用RDB就行了
appendonly no
# 内存策略
# volatile-lru: 尝试淘汰设置了过期时间的键中最近最少使用的(LRU)键。
# allkeys-lru: 淘汰所有键中最久未使用的键,而不论它们是否设置了过期时间。
# volatile-ttl: 尝试淘汰设置了过期时间且剩余生存时间(TTL)最短的键。
# 还有其他策略如volatile-random、allkeys-random等。
maxmemory-policy allkeys-lru
标签: WordPress
-
在WordPress中使用Redis,对应的一些Redis配置
-
在WordPress中实施Cloudflare Turnstile
Cloudflare Turnstile 是一种现代的 CAPTCHA 替代方案,它不仅能够有效阻止机器人行为,还能提供更好的用户体验。
(更多…) -
WordPress中发送邮件相关的调整
通过SMTP服务器来发送邮件,同时将发送任务放入Action Scheduler队列。
(更多…) -
WordPress生成缩略图优化
WordPress默认情况下会给上传的每一张图片都生成几个不同大小的缩略图,一般情况下问题不大,但是如果存在短时间上传大量图片的场景,会导致服务器整体卡顿。
(更多…) -
为WordPress站点添加关键词和描述标签
关键词和描述标签作为SEO的基础配置,在wordpress中没有默认添加,这里记录一下在Wordpress中自动添加关键词和描述标签的方法。
(更多…) -
在WordPress中给没有封面图的文章增加默认缩略图
/** * 增加默认的文章特色图 */ add_filter( 'post_thumbnail_html', 'my_post_thumbnail_html' ); function my_post_thumbnail_html( $html ) { if ( empty( $html ) ) { $default_images = [ get_theme_root_uri() . '/twentytwentythree/assets/images/default-featured-image-1.jpg', get_theme_root_uri() . '/twentytwentythree/assets/images/default-featured-image-2.jpg', get_theme_root_uri() . '/twentytwentythree/assets/images/default-featured-image-3.jpg' ]; $index = mt_rand(0, count($default_images) - 1); $html = "<img src="{$default_images[$index]}"/>"; } return $html; }
-
WordPress常用插件
WordPress提供了完善的插件机制,通过使用插件,我们可以优化Wordpress的性能、丰富Wordpress的功能,但是插件市场的插件实现也良莠不齐的,记录一些使用体验优秀的插件,主要推荐官方的插件。
(更多…) -
WordPress/woocommerce性能优化
默认安装的 WordPress 性能表现很一般,尤其如果添加了 woocommerce 插件后,后台总有一种卡顿的感觉,为了提升 WordPress/woocommerce 的使用体验,需要进行一些性能优化操作。WordPress 本身是一个基于 PHP 实现的程序,因此要优化使用体验就要在 LNMP/LAMP 架构的组件配置上进行调整。这篇文章介绍一些 LNMP 架构中,对于 WordPress 性能有影响的配置项,理论上应该也适用于其他 PHP 项目。
(更多…) -
如何避免WordPress/Woocommerce网站被黑
WordPress本身的安全性相对来说还是值得信任的,但是依然还是有一些缺点,那么如何避免Wordpress站点被黑呢?我们来看看纯净Wordpress站点存在的一些安全隐患吧。
(更多…) -
使用WordPress作为小程序后端——小程序请求前置检查
小程序默认提供了一个固定格式的referer格式,具体可以参考官方文档:网络请求。如下:
https://servicewechat.com/{appid}/{version}/page-frame.html
由于这个referer是不可以手动设置的,因此透过这个referer,我们可以对请求进行一个简单的前置检查,过滤一些简单的脚本。同时,我们也能通过这个前置检查来了解请求的身份,即小程序APPID,当需要同时支持多个小程序时,这一点还是很有意义的。
一个简单实现
/** * 小程序请求通用前置检查 */ function precheck($referer) { $result = preg_match("/^https://servicewechat.com/(.*?)/(.*?)/page-frame.html$/", $referer, $matches); if (!$result || empty($matches) || !isset($matches[1]) || !isset($matches[2])) { return false; } return true; }
在Wordpress中的使用
通过这个简单的函数,我们可以对小程序发起的请求进行一个简单的前置检查。那么如何应用到Wordpress中呢?
通过阅读Wordpress的文档,可以了解注册rest路由的函数是register_rest_route,具体参考文档:register_rest_route。注册路由可以配置三个回调函数,分别是permission_callback,validate_callback和callback。我觉得这个检查更适合用在permission_callback,即当无法通过检查的时候,我们实际上可以认为这是一个非法请求,我们对之前的实现进行一些修改:
/** * 小程序请求通用前置检查 */ function precheck(WP_REST_Request $request) { $referer = $request->get_header('referer'); $result = preg_match("/^https://servicewechat.com/(.*?)/(.*?)/page-frame.html$/", $referer, $matches); if (!$result || empty($matches) || !isset($matches[1]) || !isset($matches[2])) { return false; } return true; }
暂存获取到的APPID和VERSION,方便之后使用
在前面的代码里,我们通过一个简单的正则,对referer进行了一个简单的检查,但是匹配的一些结果我们没有暂存下来,为了方便之后获取APPID和VERSION信息,我们再次扩展一下:
/** * 小程序请求通用前置检查 */ function precheck(WP_REST_Request $request) { $referer = $request->get_header('referer'); $result = preg_match("/^https://servicewechat.com/(.*?)/(.*?)/page-frame.html$/", $referer, $matches); if (!$result || empty($matches) || !isset($matches[1]) || !isset($matches[2])) { return false; } $request->set_attributes([ 'app_id' => $matches[1], 'version' => $matches[2] ]); return true; }
封装
为了更方便使用,我们再次进行一点简单的封装。
/** * 给所有的路由添加默认的前置检查钩子 */ function register_wechat_mp_rest_route($route_namespace, $route, $args = [], $override = false) { add_filter( 'wechat_mp_permission_callback', precheck, 10, 2 ); if (isset($args['permission_callback'])) { if (!is_array($args['permission_callback'])) { $args['permission_callback'] = [ $args['permission_callback'] ]; } foreach ($args['permission_callback'] as $callback) { add_filter( 'wechat_mp_permission_callback', $callback, 10 , 2 ); } } $args['permission_callback'] = function (WP_REST_Request $request) { return apply_filters( 'wechat_mp_permission_callback', true, $request ); }; return register_rest_route($route_namespace, $route, $args, $override); } /** * 小程序请求通用前置检查 */ function precheck($permission, WP_REST_Request $request) { if ($permission === false) { return false; } $referer = $request->get_header('referer'); $result = preg_match("/^https://servicewechat.com/(.*?)/(.*?)/page-frame.html$/", $referer, $matches); if (!$result || empty($matches) || !isset($matches[1]) || !isset($matches[2])) { return false; } $request->set_attributes([ 'app_id' => $matches[1], 'version' => $matches[2] ]); return true; }
好,到这里,我们的前置检查相关的代码就完成了。下一篇的时候我们来实现一下用户认证。
-
使用WordPress作为小程序后端——APPID有效性前置检查
上一篇实现了一个简单的前置检查,这一篇我们来聊一聊如何实现APPID的有效性检查。上一篇中,我们只是简单的将APPID获取到并传递到了请求处理函数中,这一篇,我们来实现一个APPID有效性的前置检查,或者叫中间件。
APPID的检查相对比较简单,我们可以透过一种比较Wordpress的方式来实现:
add_filter('wechat_mp_permission_callback', function ($permission, WP_REST_Request $request) { if ($permission === false) { return false; } $wechat_mp_apps = apply_filters( 'wechat_mp_apps', [] ); $attrs = $request->get_attributes(); return array_key_exists($attrs['app_id'], $wechat_mp_apps); }, 10, 2);
-
构建WordPress插件、主题开发镜像
构建PHP镜像
PHP内置服务器的路由脚本可以参考这个链接:使用PHP内置服务器运行WORDPRESS
FROM php:8.1.27-alpine RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && mkdir /code && docker-php-ext-install mysqli CMD [ "php", "-S", "0.0.0.0:8080", "-t", "/code", "/code/router.php" ]
配置compose
version: "3" services: wordpress: build: . volumes: - /Users/ianzhi/Code/php/wordpress:/code restart: always ports: - 8080:8080 mysql: image: mysql:8.0.36 environment: MYSQL_ROOT_PASSWORD: 'root' expose: - 3306 ports: - 3306:3306
-
使用Caddy反向代理WordPress
具体配置
xxx.xxxx.xxx { tls youremail@yourmailserver root * /path/to/wordpress # GZIP和FPM配置 encode gzip file_server php_fastcgi php:9000 # 静态文件配置 @static_files { path_regexp .(?:css|js|woff2?|svg|gif|map|png|jpg|webp|gif|jpeg|mp4|mp3|wav|mov|heic) } header @static_files { Cache-Control "public, max-age=15778463" X-Robots-Tag "none" X-Permitted-Cross-Domain-Policies "none" X-Frame-Options "SAMEORIGIN" X-Download-Options "noopen" X-Content-Type-Options "nosniff" # Referrer-Policy "no-referrer" } # 禁止访问的目录/文件 @disallowed { #path /wp-cron.php #path /xmlrpc.php path *.sql path /wp-content/uploads/*.php path /wp-content/uploads/*.html path /wp-content/debug.log } rewrite @disallowed =404 }