작은숲:위키노트/Nginx PHP-FPM 환경에서 flush: 두 판 사이의 차이
잔글 (문자열 찾아 바꾸기 - "분류:서버" 문자열을 "분류:위키노트/서버" 문자열로) |
|||
| 19번째 줄: | 19번째 줄: | ||
[[분류:PHP]] | [[분류:PHP]] | ||
[[분류:위키노트/웹]] | [[분류:위키노트/웹]] | ||
[[분류:서버]] | [[분류:위키노트/서버]] | ||
[[분류:위키노트/소프트웨어 설정]]{{퍼온문서|위키노트|{{#invoke:string|replace|{{PAGENAME}}|위키노트:|}}}}[[분류:위키노트에서 가져온 문서]] | [[분류:위키노트/소프트웨어 설정]]{{퍼온문서|위키노트|{{#invoke:string|replace|{{PAGENAME}}|위키노트:|}}}}[[분류:위키노트에서 가져온 문서]] | ||
2021년 3월 28일 (일) 12:38 판
PHP에서 flush() 함수를 쓰면 모든 처리가 끝나지 않더라도 출력값을 클라이언트에 전송할 수 있다. 하지만 PHP를 위키노트:PHP-FPM으로 실행시키고 아파치나 Nginx 같은 웹 서버가 중계하도록 하면 이 방법만으로는 해결할 수 없다. 중간에서 웹 서버가 버퍼링을 해버리기 때문이다. 따라서 출력값을 곧바로 전송하기 위해서는 웹 서버가 버퍼링을 하지 않도록 설정하거나 PHP에서 알려줘야 한다. Nginx의 경우 아래 내용을 설정 파일의 location 블럭 등에 추가한다.
gzip off;
proxy_buffering off;
아니면 PHP 소스에 아래 내용을 추가해 Nginx가 버퍼링을 하지 않도록 알려준다.
header('X-Accel-Buffering: no');
이제 flush() 함수로 출력값이 곧바로 보내지는 것을 확인할 수 있을 것이다.
참고
- (영어) Nginx: ngx_http_proxy_module
- (영어) PHP Flush that works… even in Nginx
- (영어) How to disable output buffering in nginx for PHP application
| PHP 7.0 | |
|---|---|
| PHP 5.6 | |
| PHP 5.5 | |
| 확장 기능 | |
| 활용 | |
| 소프트웨어 | |