다른 서버에서 호스팅되는 PHP에서 백업 스크립트를 실행하기 위해 한 서버에 크론 작업 설정이 있습니다.
내가 사용한 명령은
curl -sS http://www.example.com/backup.php
최근에 Cron이 실행될 때이 오류가 발생했습니다.
curl: (52) Empty reply from server
브라우저에서 직접 링크로 이동하면 스크립트가 제대로 실행되고 작은 백업 ZIP 파일이 생깁니다.
다른 서버에서 호스팅되는 PHP에서 백업 스크립트를 실행하기 위해 한 서버에 크론 작업 설정이 있습니다.
내가 사용한 명령은
curl -sS http://www.example.com/backup.php
최근에 Cron이 실행될 때이 오류가 발생했습니다.
curl: (52) Empty reply from server
브라우저에서 직접 링크로 이동하면 스크립트가 제대로 실행되고 작은 백업 ZIP 파일이 생깁니다.
curl
시간 초과가 발생 합니까? 연결 --connect-timeout <seconds>
및 전체 작업에 걸리는 기본 컬 대기를 늘려 보셨습니까 --max-time <seconds>
?
답변:
HTTPS를 수행하는 서버에서 curl이 일반 HTTP를 수행하도록 요청하면 이런 일이 발생할 수 있습니다.
예:
$ curl http://google.com:443
curl: (52) Empty reply from server
curl localhost:8443
나에게 빈 답장 오류를 주었다. curl -k https://localhost:8443
페이지를 제대로 게재했습니다.
Curl은 HTTP가 요청에 응답하지 않는 오류이므로 서버에서 응답이 없을 때이 오류를 표시합니다.
문제는 귀하와 문제의 호스트 사이에 방화벽이나 프록시와 같은 네트워크 인프라가 있다는 것입니다. 따라서이 작업을 수행하려면 해당 하드웨어를 담당하는 사람들과 문제에 대해 논의해야합니다.
SSL 연결의 경우 이것은 curl 및 Safari 요청 중에 segfault하는 이전 버전의 nginx 서버 문제로 인해 발생할 수 있습니다. 이 버그 는 nginx 버전 1.10 주변에서 수정되었지만 인터넷에는 여전히 많은 이전 버전의 nginx가 있습니다.
nginx를 관리자의 경우 : 추가 ssl_session_cache shared:SSL:1m;
로 http
블록은 문제를 해결해야한다.
나는 OP가 SSL이 아닌 경우를 요구하고 있다는 것을 알고 있지만 이것이 "서버로부터 빈 응답"문제에 대한 goole의 최상위 페이지이기 때문에 나는 내 머리를 두드리는 많은 중 하나이기 때문에 여기에 SSL 답변을 남겨두고 있습니다. 이 문제로 벽에.
제 경우에는 PHP APC 문제로 인해 발생했습니다. 먼저 살펴볼 곳은 Apache 오류 로그입니다 (Apache를 사용하는 경우).
이것이 누군가에게 도움이되기를 바랍니다.
이 curl -sS " http://www.example.com/backup.php "를 시도해 볼 수 있습니다. URL을 ""에 넣어서 저를 위해 일한 정확한 이유는 모르지만 URL을 " "는 서버에 대한 요청을 완료하거나 헤더 요청을 완료합니다.
나는 전에이 문제가 있었다. 동일한 포트 (3000)를 사용하는 다른 응용 프로그램이 있음을 알았습니다.
이것을 찾는 쉬운 방법 :
터미널에 입력하십시오 netstat -a -p TCP -n | grep 3000
( '3000'대신 사용중인 포트로 대체). 둘 이상의 청취가 있으면 이미 다른 것이 해당 포트를 점유하고 있습니다. 해당 프로세스를 중지하거나 새 프로세스의 포트를 변경해야합니다.
이것을 시도 하십시오 -> cURL을 거치지 않고 Telnet으로 연결하려는 사이트를 ping하십시오. 연결 시도가 반환하는 응답은 연결을 시도 할 때 cURL이 보는 것과 정확히 일치합니다 (하지만 도움이되지 않게 사용자로부터 난독 화됨). 이제 여기에 표시되는 내용에 따라 몇 가지 결론 중 하나를 그릴 수 있습니다.
이름 기반 가상 호스트 인 웹 사이트에 연결하려고합니다. 즉, IP 주소를 통해 연결할 수 없습니다. 호스트 이름에 문제가 있습니다. 무언가를 잘못 입력했을 수 있습니다. 매개 변수에 POST 대신 GET을 사용하면보다 구체적인 답을 얻을 수 있습니다.
이 문제는 100-continue 헤더와 관련이있을 수도 있습니다. 을 실행 curl_getinfo($ch, CURLINFO_HTTP_CODE)
하고 결과를 확인하십시오.
telnet hostname
과GET <url>
Https와 같은 보안 웹 사이트에 액세스하려고 할 때 발생합니다.
나는 당신이 's'를 놓쳤기를 바랍니다
URL을 curl -sS -u "username : password" https://www.example.com/backup.php로 변경해보십시오.