웹사이트를 운영할때 리눅스 서버는 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버전을 원하신다면 소스설치를 진행하시길 바랍니다.