MCBBS Wiki:运维笔记:修订间差异

添加4,029字节 、​ 2023年6月20日 (星期二)
→‎移动端缓存:​ // Edit via Wikiplus
→‎本地化文字修改:​ // Edit via Wikiplus
标签移动版编辑 移动版网页编辑 高级移动版编辑
→‎移动端缓存:​ // Edit via Wikiplus
 
(未显示同一用户的19个中间版本)
本页面记录了MCBBS Wiki环境配置时的一些坑及其解决方案,以便日后参考。
==PHP函数与拓展==
在新环境中应该关闭<code>putenv()</code>函数禁用。
 
添加<code>fileinfo</code> <code>opcache</code> <code>memcached</code> <code>apcu</code> <code>imagemagick</code> <code>exif</code> <code>intl</code>PHP拓展。
==插件扩展==
Variables插件 扩展 1.35 版本已经停止维护由于解析器的一个 API 弃用会产生一个警告,在 LocalSetting.php 关闭报错即可。
 
<code>error_reporting(0);</code>
 
==VisualEditor==
===Parsoid服务问题===
<code>cURL error 77 || cURL error 60</code>
 
代表PHP部分CA证书没配置好,一般发生在通过面板或一键配置工具安装的PHP上。<ref>[https://stackoverflow.com/questions/72308681/mediawiki-1-37-2-visualeditor-error-contacting-the-parsoid-restbase-server-cu?r=SearchResults 解决方案来源]</ref>
 
下载<code>https://curl.se/ca/cacert.pem</code>
<pre>AllowEncodedSlashes NoDecode</pre>
 
如果服务器软件为Nginx,指定以下配置<ref>[https://www.nginx.com/resources/wiki/start/topics/recipes/mediawiki/ Nginx.com 示例配置]</ref>
 
<pre>location /rest.php/ {
try_files $uri $uri/ /rest.php?$query_string;
}</pre>
 
==Varnish==
首先,要确保 Varnish 相关缓存逻辑正常工作,必须在 LocalSettings.php 设置 <code>$wgUseCdn = true;</code>
 
同时,指定<code>$wgInternalServer</code> 为 Wiki 的域名加 Varnish 监听端口。(如 <code>$wgInternalServer = "http://example.org:6081";</code>)。
 
并且 MediaWiki 给出的 [[mw:Manual:Varnish_caching#Configuring_Varnish|vcl 规则]]已适用于大多数情况。
===Parsoid 405===
若编辑部分页面时出现<code>连接至Parsoid/RESTBase服务器错误(HTTP 405)</code>
 
配置以下 vcl 规则至<code>sub vcl_recv</code>中,直接请求 api.php 和 rest.php 不经过缓存。
<pre>if (req.url ~ "api.php" || req.url ~ "rest.php")
return (pass);
}</pre>
===Popups 导致的缓存失效===
Popups 默认情况下无论是否开启埋点功能,都会初始化 sessionId 并存储于 cookies 中,导致请求不经过缓存。
 
编辑 <code>extensions/Popups/includes/PopupsContext.php</code> 的第 198 行:
<pre>return false;</pre>
 
即可实现仅登录用户启用 Popups 。
===HTTP 反向代理模式下 PURGE 请求===
方案来自于 Mooncell Wiki 的[https://www.bilibili.com/read/cv17391941 这篇]专栏。
 
MediaWiki 默认情况下,页面更新时会发送 PURGE 代理请求 Varnish 清理缓存。这仅适用于 Varnish 被配置为 HTTP 正向代理模式时。
 
如果 Varnish 在 HTTP 反向代理模式下工作,编辑 <code>includes/deferred/CdnCacheUpdate.php</code> 的 297 行:
<pre>'Host' => $urlInfo['host'],</pre>
以及 304 行:
<pre>$reqs[] = ( $baseReq );</pre>
 
即可实现 MediaWiki 在 Varnish HTTP 反向代理模式下发送 PURGE 缓存清理请求。
===移动端缓存===
如果移动版页面和桌面版使用同一个域名,添加以下规则:
 
<code>sub vcl_recv</code>中:
<pre> remove req.http.x-subdomain;
if(req.http.User-Agent ~ "(?i)^(lg-|sie-|nec-|lge-|sgh-|pg-)|(mobi|240x240|240x320|320x320|alcatel|android|audiovox|bada|benq|blackberry|cdm-|compal-|docomo|ericsson|hiptop|htc[-_]|huawei|ipod|kddi-|kindle|meego|midp|mitsu|mmp\/|mot-|motor|ngm_|nintendo|opera.m|palm|panasonic|philips|phone|playstation|portalmmm|sagem-|samsung|sanyo|sec-|sendo|sharp|softbank|symbian|teleca|up.browser|webos)") {
set req.http.x-subdomain = "m";
}
 
if(req.http.Cookie ~ "mf_useformat=") {
set req.http.x-subdomain = "m";
}</pre>
<code>sub vcl_hash</code>中:
<pre>hash_data(req.http.x-subdomain);</pre>
以实现桌面端和移动端页面的分别缓存。
 
==本地化文字修改==
一方面,如果插件更新了,你的修改也没了;另一方面,修改后的本地化文字可以随着数据库移动。
 
==隐藏文件(.)和资源缓存问题==
某些面板或配置工具会在服务器Apache或Nginx的配置中添加对隐藏文件的防护规则或者静态资源的缓存规则,导致某些页面或文件(如[[...]]、[[MediaWiki:Common.js]])无法正常显示。
 
要修复这个问题,只需要移除对应的防护规则即可。
 
==数据库问题==
=== 编辑时数据库错误 ===
'''类型 "Wikimedia\Rdbms\DBQeryError" 的致命错误'''
 
'''故障原因:'''数据表 <code><名字空间>_text</code> 在导入时未设置主键和自动递增。
 
'''解决方案:'''设置 <code><名字空间>_text</code> 'old_id' 字段为主键,自动递增。
 
'''备注:'''非常规的数据库导入会丢失一些结构信息。系统在录入更改时不会自动填写ID。
 
--[[Image:SHEEP_REALMS_head.png|30px|link=User:Sheep-realms]] [[User:Sheep-realms|<span style="color:green;">Sheep-realms</span>]]([[User talk:Sheep-realms|讨论]]) 2020年5月8日 (五) 22:01 (CST)
 
=== 搜索时数据库错误 ===
'''类型 "Wikimedia\Rdbms\DBQeryError" 的致命错误'''
 
'''故障原因:'''数据表 <code><名字空间>_searchindex</code> 崩溃。
 
'''解决方案:'''修复数据表 <code><名字空间>_searchindex</code> 。
 
'''备注:'''错误的数据库操作或突然断电等物理因素可能会造成数据表崩溃。
 
--[[User:Sheep-realms|<span style="color:green;">Sheep-realms</span>]]([[User talk:Sheep-realms|讨论]]) 2020年4月27日 (一) 11:14 (CST)
==注释与外部链接 ==
<references />
 
要修复这个问题,只需要移除对应的防护规则即可。
[[分类:Wiki页面]]
维护员、​界面管理员、​巡查员、​监督员、​小部件编辑者
3,462

个编辑