메뉴 닫기

PHP NTS, TS (Apache, Nginx, IIS)

웹사이트를 운영할때 리눅스 서버는 Apache + MySQL or MariaDB + PHP 입니다.

간혹 Nginx + MySQL or MariaDB + PHP 도 사용하긴 합니다.

윈도우 서버에서는 보통은 IIS 기반으로 ASP 기반의 언어로 웹사이트를 구성하기도 하지만 PHP 를 사용하기도 합니다.

 

PHP 에는 TS (Thread Safety) 와 NTS (Non Thread Safe) 가 있습니다.

 

과거에는 PHP 버전이 Thread Safe 버전만 빌드되어 제공하고 있었습니다.

PHP 는 기본적으로 Multi-process 방식이었기 때문에 리눅스에서 사용하는데 문제가 없었습니다. 그러나 윈도우서버에서 PHP 를 사용하게 되자 TS버전으로 빌드하면 문제가 생겼습니다.

 

PHP 윈도우 기본 웹서버인 IIS 와 연동하기 위해서는 CGI (or FastCGI) 또는 ISAPI (Internet Server API) 방식으로 연동해야하는 기존까지 PHP 와 관련된 모듈들의 대부분이 Multi-process 방식으로 개발되었기 때문에 Multi-process 방식으로 개발된 ISAPI 로 연동했을때 서버가 다운되는 현상이 발생되었던 것입니다. 그래서 안정적인 CGI 방식으로 변경하여 사용했으나, 웹사이트가 너무 느렸고, 이런 느린부분을 해결하고자 Non Thread Safe 가 생기게 되었습니다.

 

TS (Thread Safe) 

– 멀티 쓰레드 기능 빌드

– 멀티 쓰레드 SAPI(Server API)와 PHP를 웹서버에 로드할 경우 TS 바이너리를 사용해야합니다. 즉, IIS 웹서버 위에 FastCGI 로 PHP 를 사용할 경우입니다.

 

NTS (Non Thread Safe)

-단일 쓰레드 전용 빌드

-멀티 프로세스 모드

-멀티 쓰레딩을 사용하지 않고 FastCGI 프로토콜을 통한 웹서버를 운영할경우 사용됩니다.

보통 Apache 웹서버에서 PHP를 사용할때 사용됩니다.

 

Windows Server + IIS (ISAPI) -> TS 버전

Windows Server + IIS (CGI or FastCGI) -> NTS 버전

Windows Server + Apache -> TS 버전

Linux Server + Apache prefork -> NTS버전

Linux Server + Apache worker,event -> TS 버전

Linux Server + Nginx (PHP-FPM FastCGI) -> NTS버전

 

리눅스는 # php -v 에서 확인가능합니다.

소스 설치인 경우 컴파일 옵션

php 5 ~ 7.4 

PHP 컴파일할때 TS 버전으로 빌드할경우 아래옵션추가

–enable-maintainer-zts

PHP 컴파일할때 NTS 버전으로 빌드할경우 아래옵션추가

–disable-maintainer-zts

 

php 8

PHP 컴파일할때 TS 버전으로 빌드할경우 아래옵션추가

–enable-zts

PHP 컴파일할때 NTS 버전으로 빌드할경우 아래옵션추가

–disable-zts

 

Linux 에서 yum 또는 apt-get 에서는 php는 기본설치가 nts입니다.

ts버전을 원하신다면 소스설치를 진행하시길 바랍니다.

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x