«ошибка 28 cURL: истекло время ожидания» на WordPress в службе приложений Azure в Linux

Моя установка WordPress в службе приложений Azure в Linux с использованием пользовательского контейнера Docker имеет очень медленное время отклика. Загрузка страниц занимает около 20-40 секунд.

У меня установлен плагин для устранения неполадок, который указывает, что проблема заключается в том, что «ошибка 28 cURL: разрешение истекло по истечении N миллисекунд» при выполнении запросов на следующие URL-адреса

ошибки скручивания

cURL отлично работает в командной строке scm-site. Например, это работает хорошо.

curl -X POST http://api.wordpress.org/core/version-check/1.7/

редактировать
Если я ssh в контейнер и запустить этот код PHP, он работает нормально.

<?php

$url = 'http://api.wordpress.org/core/version-check/1.7/';

$fields = array(
'version' => urlencode('4.8.1'),
'php' => urlencode('7.1.8'),
'locale' => urlencode('fi'),
'mysql' => urlencode('5.6.26.0'),
'local_package' => urlencode('fi'),
'blogs' => urlencode('1'),
'users' => urlencode('4'),
'multisite_enabled' => urlencode('0'),
'initial_db_version' => urlencode('26691')
);

foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

curl_exec($ch);

curl_close($ch);

Возвращает следующее.

root@71c3bba3a35e:/home/site/wwwroot# php curl.php
{"offers":[{"response":"upgrade","download":"http:\/\/downloads.wordpress.org\/release\/wordpress-4.8.1.zip","locale":"en_US","packages":{"full":"http:\/\/downloads.wordpress.org\/release\/wordpres
s-4.8.1.zip","no_content":"http:\/\/downloads.wordpress.org\/release\/wordpress-4.8.1-no-content.zip","new_bundled":"http:\/\/downloads.wordpress.org\/release\/wordpress-4.8.1-new-bundled.zip","par
tial":false,"rollback":false},"current":"4.8.1","version":"4.8.1","php_version":"5.2.4","mysql_version":"5.0","new_bundled":"4.7","partial_version":false}],"translations":[]}

Мой образ Docker использует php: 7.1.8-apache.

Вот мой Dockerfile.

FROM php:7.1.8-apache
EXPOSE 80 443 2222

RUN apt-get update -y && apt-get install -y --no-install-recommends \
ssl-cert \
ca-certificates \
apt-utils \
vim \
curl \
mysql-client \
openssh-server \
libmcrypt-dev \
libcurl4-gnutls-dev \
libicu-dev \
&& docker-php-ext-install -j$(nproc) iconv \
mcrypt \
mysqli \
json \
mbstring \
curl \
intl \
&& echo "root:Docker!" | chpasswd \
&& ln -s /home/LogFiles /var/log/apache2

ENV APACHE_CONFDIR=/etc/apache2 \
APACHE_ENVVARS=/etc/apache2/envvars \
APACHE_LOCK_DIR=/var/lock/apache2 \
APACHE_LOG_DIR=/var/log/apache2 \
APACHE_RUN_DIR=/var/run/apache2 \
APACHE_PID_FILE=/var/run/apache2/apache2.pid \
APACHE_RUN_USER=www-data \
APACHE_RUN_GROUP=www-data

WORKDIR /usr/local
COPY config/wprun.sh config/wp-config.php /usr/local/
COPY config/sshd_config /etc/ssh/
COPY config/php.ini /usr/local/etc/php/RUN chmod 755 wprun.sh && \
rm -R /var/www/html && \
a2enmod rewrite && \
a2enmod expires && \
a2enmod include && \
sed -i "s@/var/www@/home/site/wwwroot@" /etc/apache2/sites-enabled/000-default.conf && \
sed -i "s@/var/www@/home/site/wwwroot@" /etc/apache2/apache2.conf

CMD ["/bin/bash","wprun.sh"]

Редактировать 2
это Выпуск GitHub кажется похожим. Есть предложение использовать Решатели OpenDNS. Может ли это быть проблемой DNS? Если так, то как это работает с Docker и Azure?

Редактировать 3
Кажется, это проблема DNS. Это файл resolv.conf в Azure.

search reddog.microsoft.com
nameserver 127.0.0.11
options timeout:1 attempts:5 ndots:0

Когда я изменяю nameserver на 8.8.8.8, страницы загружаются через одну-две секунды. Также все ошибки cURL уходят.

Если я правильно понимаю, Docker монтирует файл resolv.conf хост-машины и настройки DNS должны быть установлены с помощью параметров команды запуска Docker. Не рекомендуется изменять эти файлы напрямую.

Точные детали того, как Docker управляет конфигурациями DNS внутри
контейнер может меняться с одной версии Docker на другую. Так что вы
не следует предполагать, как файлы, такие как / etc / hosts,
/etc/resolv.conf управляются внутри контейнеров и оставляют файлы
и использовать вместо этого следующие параметры Docker.

Однако установить параметры запуска Docker в Azure не представляется возможным.

0

Решение

Командная строка scm-site для curl работает на хост-компьютере Azure WebApps для Linux, а не внутри контейнера докера.

Есть проблема Сбой curl внутри контейнера при соединении https на GitHub moby/moby, что очень похоже на ваше. В соответствии с этим, я думаю, что вам нужно установить --tlsv1 опция через метод PHP curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); для вашего вызова curl внутри док-контейнера Azure WebApp для Linux.

Надеюсь, поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector