MediaWiki 1.35 тайм-аут parsoid при попытке использовать VisualEditor

#mediawiki

#mediawiki

Вопрос:

Я установил mediawiki на сервер Amazon ec2.
На сервере есть только apache, php, mariadb и mediawiki

Я использую mediawiki 1.35, с помощью встроенных VisualEditor и ParsoidPHP
я могу использовать VisualEditor для редактирования новой страницы, но он не сохраняется, и когда я редактирую существующую страницу, я получаю синий индикатор выполнения, за которым следует ошибка:
Ошибка при обращении к серверу Parsoid / RESTBase: (ошибка curl: 28) Был достигнут тайм-аут
Я попытался настроить parsoid, используя инструкцию, которую я нашел в Интернете :

 $wgVirtualRestConfig['modules']['parsoid'] = [
        // URL to the Parsoid instance - use port 8142 if you use the Debian package - the parameter 'URL' was first used but is now deprecated (string)
        'url' => 'http://myIpAddress:8000',
        // Parsoid "domain" (string, optional) - MediaWiki >= 1.26
        'domain' => 'myIpAddress',
        // Parsoid "prefix" (string, optional) - deprecated since MediaWiki 1.26, use 'domain'
        'prefix' => 'myIpAddress',
        // Forward cookies in the case of private wikis (string or false, optional)
        'forwardCookies' => true,
        // request timeout in seconds (integer or null, optional)
        'timeout' => null,
        // Parsoid HTTP proxy (string or null, optional)
        'HTTPProxy' => null,
        // whether to parse URL as if they were meant for RESTBase (boolean or null, optional)
        'restbaseCompat' => null,
];
  

Лучший эффект, который я получаю, — это 404 или 400. Эта конфигурация не работает.
Я не внес никаких других изменений в настройки.

если я вызову parsoid напрямую:
http://MyIpAddress/api.php?action=visualeditoramp;paction=parseamp;page=Main_Page

Я вижу тайм-аут таким образом:

 {
    "error": {
        "code": "apierror-visualeditor-docserver-http-error",
        "info": "Error contacting the Parsoid/RESTBase server: (curl error: 28) Timeout was reached",
        "*": "See http://MyIpAddress/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at amp;<https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announceamp;> for notice of API deprecations and breaking changes."
    }
}
  

Комментарии:

1. Это должно работать из коробки, если вы вообще не касаетесь $wgVirtualRestConfig .

2. Я добавил конфигурацию только после того, как потратил много времени на ошибку. Я получаю сообщение об ошибке, независимо от того, есть она там или нет.

3. Наличие непустой конфигурации для модуля Parsoid приведет к ошибке (хотя обычно я ожидаю другого) — см. Эту проверку .

Ответ №1:

Основываясь на моем тестировании, похоже, что parsoid использует переменную $ wgServer для создания локального подключения к rest.php
Используя curl, я могу подключиться к http://localhost/rest.php/v1/page/Main_Page
Но, не для того, чтобы http://myipaddress/rest.php/v1/page/Main_Page или http://mydomainname/rest.php/v1/page/Main_Page оба эти тайм-аута. Сервер apache не может подключиться к самому
себе, поэтому, теоретически, я должен иметь возможность установить

 $wgVirtualRestConfig['modules']['parsoid']['domain']='localhost';
  

Но это приводит к 404 вместо тайм-аута.

В конце концов, я добавил свое доменное имя в /etc/hosts и указал его на 127.0.0.1, и это работает нормально. Это похоже на взлом, и я должен использовать доменное имя, а не только IP.

Ответ №2:

Мы сталкивались с этой проблемой несколько раз.

В одном случае это был вопрос контроля доступа.

Parsoid выполняет HTTP-запросы к сайту MediaWiki. Мы ограничиваем доступ к определенным действиям, используя расширение Lockdown, и нам пришлось освободить Parsoid, что можно сделать несколькими способами, например:

 if (($_SERVER['REMOTE_ADDR'] !== '127.0.0.1') amp;amp; ($_SERVER['REMOTE_ADDR'] !== $_
SERVER['SERVER_ADDR'])) {
# don't lock down any pages for Parsoid, or the VisualEditor will break on them
    wfLoadExtension('Lockdown');
}