curl https出现502,lnmp1.5版本,php 5.5.38的
$curl = curl_init();curl_setopt($curl, CURLOPT_URL, 'https://www.baidu.com');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
// 运行cURL,请求网页数据
$data = curl_exec($curl);
// 关闭cURL请求
curl_close($curl);
// 打印出抓取的测试数据
var_dump($data);
如果是http://www.baid.com就可以,https就不行了
opensslOpenSSL support enabled OpenSSL Library Version OpenSSL 1.0.2o27 Mar 2018 OpenSSL Header Version OpenSSL 1.0.2o27 Mar 2018
这是我curl信息
curlcURL support enabled cURL Information 7.58.0 Age 4 Features AsynchDNS Yes CharConv No Debug No GSS-Negotiate No IDN Yes IPv6 Yes krb4 No Largefile Yes libz Yes NTLM Yes NTLMWB Yes SPNEGO Yes SSL Yes SSPI No TLS-SRP Yes Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtmp, rtsp, smb, smbs, smtp, smtps, telnet, tftp Host x86_64-pc-linux-gnu SSL Version OpenSSL/1.1.0g ZLib Version 1.2.11
补上日志php-fpm日志
php-fpm.logjingmian@jingmian-TUF:/usr/local/php/var/log$ sudo cat php-fpm.log WARNING: child 20248 exited on signal 11 (SIGSEGV - core dumped) after 5555.544988 seconds from start
NOTICE: child 8578 started
WARNING: child 20261 exited on signal 11 (SIGSEGV - core dumped) after 5679.081480 seconds from start
NOTICE: child 8825 started
jingmian@jingmian-TUF:/usr/local/php/var/log$ 相同环境测试没有问题
你可以开慢日志看看,php-fpm只能看到是执行了很长时间超时了
已经开启慢日志,可以没有被记录到,应该执行,没有超时的,我只要一运行curl https就出错了,如果http就正常
我也修改/usr/local/php/etc/php.ini 将max_execution_time=0jingmian@jingmian-TUF:/usr/local/php/etc$ cat php-fpm.conf
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 0
request_slowlog_timeout = 2
slowlog = /usr/local/php/var/log/slow.log
jingmian@jingmian-TUF:/usr/local/php/etc$
jingmian@jingmian-TUF:/usr/local/php/var/log$ sudo cat php-fpm.log
jingmian 的密码:
WARNING: child 30680 exited on signal 11 (SIGSEGV - core dumped) after 90.737680 seconds from start
NOTICE: child 31652 started
WARNING: child 30828 exited on signal 11 (SIGSEGV - core dumped) after 89.754000 seconds from start
NOTICE: child 31702 started
WARNING: child 31652 exited on signal 11 (SIGSEGV - core dumped) after 0.975027 seconds from start
NOTICE: child 31749 started
jingmian@jingmian-TUF:/usr/local/php/var/log$ 我刚刚测试了,升级php7,curl https就可以了,同样是下面的代码
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://www.baidu.com');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
// 运行cURL,请求网页数据
$data = curl_exec($curl);
// 关闭cURL请求
curl_close($curl);
// 打印出抓取的测试数据
var_dump($data);
而且我试了更新到5.6.40版本也不行,只能在php7才成功,这个问题有办法解决吗?有些代码,我这里不支持php7的 常见问题里有说明
5.6.40,lnmp下测试过没问题 在 lnmp1.5 php5.6 下面遇到了同样的问题,四处搜了一下这个 bug 好像众说纷纭的样子。
这个 bug 在我这里只出现在 ubuntu 18.04 lts 系统下面,这个版本里如果换成 lnmp1.4 干脆通不过安装,1.5 又 curl 坏掉,很尴尬。在同一个机器下起 ubuntu 16.04 的系统则一切正常,1.5 和 1.4 都没有任何问题
看起来不是一个 php 本身的问题,因为这东西奇怪就奇怪在它不会产生任何错误跟踪信息……不管怎么操作都只会给你返回502,没有明确的日志和诊断数据,起码在 lnmp 这一套东西里是没有找到日志。而在cli下跑测试代码会直接停在 curl_exec 上面,报错信息为
“段错误 (核心已转储)”
根据这个信息去查的话,在 /var/log/kern.log 的日志里会有这么一条记录
Nov7 15:16:43 user-virtual-machine kernel: [ 3828.249377] php: segfault at 7f2d7bad8c00 ip 00007f2d7bad8c00 sp 00007ffc12c593d8 error 15 in libssl.so.1.1
看起来像是 ssl 编译或者这个 openssl 的库有什么问题,或者刚好这个新系统的版本兼容性出现了些什么问题,参考网上现有的解决方案可能干掉 php 重新编译一次就会好,但是总之我换镜像了……我这边虚拟机换系统比装个包快…… :L
[ 本帖最后由 neko.cc 于 2018-11-7 15:29 编辑 ] 新系统一般只能新版安装包上做到适配,curl坏掉没具体信息没法说
ubuntu 18.04+版本采用的是最新的openssl 1.1,之前的ubuntu基本都是1.0的版本,openssl1.1安装低于php7的版本会报错,采用另外单独编译安装的openssl 1.0.2 进行安装,别的没区别
页:
[1]