[curl] 컬 오류 52 “서버에서 응답이 없습니다”는 무엇입니까?

다른 서버에서 호스팅되는 PHP에서 백업 스크립트를 실행하기 위해 한 서버에 크론 작업 설정이 있습니다.

내가 사용한 명령은

curl -sS http://www.example.com/backup.php

최근에 Cron이 실행될 때이 오류가 발생했습니다.

curl: (52) Empty reply from server

브라우저에서 직접 링크로 이동하면 스크립트가 제대로 실행되고 작은 백업 ZIP 파일이 생깁니다.



답변

HTTPS를 수행하는 서버에서 curl이 일반 HTTP를 수행하도록 요청하면 이런 일이 발생할 수 있습니다.

예:

$ curl http://google.com:443
curl: (52) Empty reply from server


답변

Curl은 HTTP가 요청에 응답하지 않는 오류이므로 서버에서 응답이 없을 때이 오류를 표시합니다.

문제는 귀하와 문제의 호스트 사이에 방화벽이나 프록시와 같은 네트워크 인프라가 있다는 것입니다. 따라서이 작업을 수행하려면 해당 하드웨어를 담당하는 사람들과 문제에 대해 논의해야합니다.


답변

제 경우에는 서버 리디렉션이었습니다. curl -L내 문제를 해결했습니다.


답변

100 % CPU 또는 메모리 사용률로 인해 서버가 응답하지 않을 때 발생할 수 있습니다.

sonarqube API에 액세스하려고 할 때이 오류가 발생했는데 전체 메모리 사용률로 인해 서버가 응답하지 않았습니다.


답변

응답이 비어있는 또 다른 일반적인 이유는 시간 초과입니다. cron 작업이 실행되는 위치에서 PHP / 대상 서버로의 모든 홉을 확인합니다. 예상보다 일찍 요청을 종료하는 라인 어딘가에 장치 / 서버 / nginx / LB / 프록시가있어 빈 응답이 발생합니다.


답변

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를 사용하는 경우).

이것이 누군가에게 도움이되기를 바랍니다.