繁体   English   中英

Linux上Azure App Service上的Wordpress上的“ cURL错误28:解决超时”

[英]“cURL error 28: Resolving timed out” on Wordpress on Azure App Service on Linux

我在Linux上使用自定义Docker容器在Azure应用服务上安装Wordpress的响应时间非常慢。 加载页面大约需要20-40秒。

我安装了故障排除插件,当对以下URL发出请求时,指示问题为“ cURL错误28:N毫秒后解析超时”

卷曲错误

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问题。 这是Azure中的resolv.conf文件。

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文件,并且应该使用Docker run命令选项设置DNS设置。 不建议直接更改这些文件。

Docker如何管理容器内部的DNS配置的确切详细信息可以从一个Docker版本更改为另一个版本。 因此,您不应该假设在容器内管理/etc/hosts、/etc/resolv.conf等文件的方式,不要理会这些文件,而应使用以下Docker选项。

但是,似乎无法在Azure中设置docker run参数。

curl的scm-site命令行在适用于Linux的Azure WebApps的主机上工作,而不是在docker容器内。

在GitHub moby/moby 上的https连接上, 容器内部的curl失败了 ,这与您的非常相似。 据此,我认为您需要通过PHP方法curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');来设置--tlsv1选项curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); 在Azure WebApp for Linux的docker容器内进行curl调用。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM