MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针

如果在编辑的过程中遇到了什么问题,可以去讨论板提问。

为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证

MCBBS Wiki GitHub群组已上线!

您可以在回声洞中发表吐槽!

服务器状态监控。点击进入

本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>

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

来自MCBBS Wiki
跳到导航 跳到搜索
(创建页面,内容为“==PHP函数== 在新环境中应该关闭<code>putenv()</code>函数禁用。 ==插件== Variables插件在1.35版本已经停止维护,应使用替代插件MyVariables。 == 适用于1.35+,且一般发生在从老版本迭代升级来的Wiki上。 如果出现REST错误,你先要查看你LocalSetting.php是否有<code>wfLoadExtension( 'Parsoid' );</code> 若出现: <code>cURL error 77: Problem with the SSL CA cert (path? access rights?)</code> 代表PH…”)
 
→‎移动端缓存:​ // Edit via Wikiplus
 
(未显示2个用户的39个中间版本)
第1行: 第1行:
本页面记录了MCBBS Wiki环境配置时的一些坑及其解决方案,以便日后参考。
==PHP函数==
==PHP函数与拓展==
在新环境中应该关闭<code>putenv()</code>函数禁用。
在新环境中应该关闭<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版本已经停止维护,应使用替代插件MyVariables。
==
==扩展==
Variables 扩展在 1.35 版本由于解析器的一个 API 弃用会产生一个警告,在 LocalSetting.php 关闭即可。

<code>error_reporting(0);</code>

==VisualEditor==
===Parsoid服务问题===
适用于1.35+,且一般发生在从老版本迭代升级来的Wiki上。
适用于1.35+,且一般发生在从老版本迭代升级来的Wiki上。

如果出现REST错误,你先要查看你LocalSetting.php是否有<code>wfLoadExtension( 'Parsoid' );</code>
如果出现REST错误,你先要查看你LocalSetting.php是否有<code>wfLoadExtension( 'Parsoid' );</code>
===cURL证书问题===
若出现:
若出现:

<code>cURL error 77: Problem with the SSL CA cert (path? access rights?)</code>
<code>cURL error 77 || cURL error 60</code>
代表PHP部分CA证书没配置好。

下载https://curl.se/ca/cacert.pem
代表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>

保存到环境路径。
保存到环境路径。

在php配置文件中新加入(这里以当前Wiki服务器作示例)
在php配置文件中把curl和openssl部分修改成以下内容(这里以当前Wiki服务器作示例)
<nowiki>[curl]

curl.cainfo =/www/wwwroot/cacert.pem</nowiki>
<nowiki>[curl]</nowiki>

<code>curl.cainfo =/www/wwwroot/mcbbs.wiki/cacert.pem</code>

<nowiki>[openssl]</nowiki>

<code>openssl.cafile=/www/wwwroot/mcbbs.wiki/cacert.pem</code>

之后重载配置重启PHP。
之后重载配置重启PHP。

===编辑部分页面404问题===
若编辑部分页面时出现<code>Error contacting the Parsoid/RESTBase server (HTTP 404)</code>

如果服务器软件为Apache,指定以下配置<ref>[https://www.mediawiki.org/wiki/Extension:VisualEditor#Allowing_VisualEditor_on_page_titles_containing_slashes MediaWiki文档中的解决方法]</ref>:

<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>
以实现桌面端和移动端页面的分别缓存。

==本地化文字修改==
修改任何本地化文字,建议在MediaWiki命名空间下修改,而不是直接修改本地化文件。

一方面,如果插件更新了,你的修改也没了;另一方面,修改后的本地化文字可以随着数据库移动。

==隐藏文件(.)和资源缓存问题==
某些面板或配置工具会在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页面]]

2023年6月20日 (二) 09:11的最新版本

本页面记录了MCBBS Wiki环境配置时的一些坑及其解决方案,以便日后参考。

PHP函数与拓展

在新环境中应该关闭putenv()函数禁用。

添加fileinfo opcache memcached apcu imagemagick exif intlPHP拓展。

扩展

Variables 扩展在 1.35 版本由于解析器的一个 API 弃用会产生一个警告,在 LocalSetting.php 关闭即可。

error_reporting(0);

VisualEditor

Parsoid服务问题

适用于1.35+,且一般发生在从老版本迭代升级来的Wiki上。

如果出现REST错误,你先要查看你LocalSetting.php是否有wfLoadExtension( 'Parsoid' );

cURL证书问题

若出现:

cURL error 77 || cURL error 60

代表PHP部分CA证书没配置好,一般发生在通过面板或一键配置工具安装的PHP上。[1]

下载https://curl.se/ca/cacert.pem

保存到环境路径。

在php配置文件中把curl和openssl部分修改成以下内容(这里以当前Wiki服务器作示例)

[curl]

curl.cainfo =/www/wwwroot/mcbbs.wiki/cacert.pem

[openssl]

openssl.cafile=/www/wwwroot/mcbbs.wiki/cacert.pem

之后重载配置重启PHP。

编辑部分页面404问题

若编辑部分页面时出现Error contacting the Parsoid/RESTBase server (HTTP 404)

如果服务器软件为Apache,指定以下配置[2]

AllowEncodedSlashes NoDecode

如果服务器软件为Nginx,指定以下配置[3]

location /rest.php/ {
    try_files $uri $uri/ /rest.php?$query_string;
}

Varnish

首先,要确保 Varnish 相关缓存逻辑正常工作,必须在 LocalSettings.php 设置 $wgUseCdn = true;

同时,指定$wgInternalServer 为 Wiki 的域名加 Varnish 监听端口。(如 $wgInternalServer = "http://example.org:6081";)。

并且 MediaWiki 给出的 vcl 规则已适用于大多数情况。

Parsoid 405

若编辑部分页面时出现连接至Parsoid/RESTBase服务器错误(HTTP 405)

配置以下 vcl 规则至sub vcl_recv中,直接请求 api.php 和 rest.php 不经过缓存。

if (req.url ~ "api.php" || req.url ~ "rest.php")
    return (pass);
}

Popups 导致的缓存失效

Popups 默认情况下无论是否开启埋点功能,都会初始化 sessionId 并存储于 cookies 中,导致请求不经过缓存。

编辑 extensions/Popups/includes/PopupsContext.php 的第 198 行:

return false;

即可实现仅登录用户启用 Popups 。

HTTP 反向代理模式下 PURGE 请求

方案来自于 Mooncell Wiki 的这篇专栏。

MediaWiki 默认情况下,页面更新时会发送 PURGE 代理请求 Varnish 清理缓存。这仅适用于 Varnish 被配置为 HTTP 正向代理模式时。

如果 Varnish 在 HTTP 反向代理模式下工作,编辑 includes/deferred/CdnCacheUpdate.php 的 297 行:

'Host' => $urlInfo['host'],

以及 304 行:

$reqs[] = ( $baseReq );

即可实现 MediaWiki 在 Varnish HTTP 反向代理模式下发送 PURGE 缓存清理请求。

移动端缓存

如果移动版页面和桌面版使用同一个域名,添加以下规则:

sub vcl_recv中:

	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";
	}

sub vcl_hash中:

hash_data(req.http.x-subdomain);

以实现桌面端和移动端页面的分别缓存。

本地化文字修改

修改任何本地化文字,建议在MediaWiki命名空间下修改,而不是直接修改本地化文件。

一方面,如果插件更新了,你的修改也没了;另一方面,修改后的本地化文字可以随着数据库移动。

隐藏文件(.)和资源缓存问题

某些面板或配置工具会在Apache或Nginx的配置中添加对隐藏文件的防护规则或者静态资源的缓存规则,导致某些页面或文件(如...MediaWiki:Common.js)无法正常显示。

要修复这个问题,只需要移除对应的规则即可。

数据库问题

编辑时数据库错误

类型 "Wikimedia\Rdbms\DBQeryError" 的致命错误

故障原因:数据表 <名字空间>_text 在导入时未设置主键和自动递增。

解决方案:设置 <名字空间>_text 'old_id' 字段为主键,自动递增。

备注:非常规的数据库导入会丢失一些结构信息。系统在录入更改时不会自动填写ID。

-- Sheep-realms讨论) 2020年5月8日 (五) 22:01 (CST)

搜索时数据库错误

类型 "Wikimedia\Rdbms\DBQeryError" 的致命错误

故障原因:数据表 <名字空间>_searchindex 崩溃。

解决方案:修复数据表 <名字空间>_searchindex

备注:错误的数据库操作或突然断电等物理因素可能会造成数据表崩溃。

--Sheep-realms讨论) 2020年4月27日 (一) 11:14 (CST)

注释与外部链接