Souce Install PHP 7.4 with OpenSSL 1.1.1 on CentOS 7

CentOS 7 에서 OpenSSL 1.1.1 버전과 함께 PHP 7.4 버전 컴파일 설치하는 방법에 대한 예제

 

// OpenSSL 보안 이슈 및 오래된 버전의 EOL 문제로 인해 최신버전을 권장

// 참고 URL: https://umount.net/openssl-심각한-보안-취약점-발견-cve-2020-1967/

// PHP를 직접 컴파일한 OpenSSL 1.1.1 버전으로 설치하기까지 몇시간의 삽질을 시도해야만 했습니다. 아무리 찾아도 질문만 있지 해결책을 발견 못했는데, 방법은 의외로 간단했습니다.

// PKG_CONFIG_PATH 를 설정하는 방법인데, 작업하는 소스파일이 이전에 make 된적이 있다면 오류가 발생합니다. make distclean 을 이용해서 초기화 후에 진행하시면 됩니다.

// 본 매뉴얼을 따라서 처음 설치하는 상황이라면 별 문제없이 진행됩니다.

 

의존성 패키지 설치

[root@172-16-11-99 /]# yum -y install gcc gcc-c++ autoconf make zlib-devel sqlite-devel

 

OpenSSL 다운로드 및 설치

[root@172-16-11-99 /]# cd /usr/local/src/
[root@172-16-11-99 src]# wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
[root@172-16-11-99 src]# tar xvzf openssl-1.1.1g.tar.gz
[root@172-16-11-99 src]# cd openssl-1.1.1g
[root@172-16-11-99 openssl-1.1.1g]# ./config --prefix=/usr/local/openssl-1.1.1g shared
[root@172-16-11-99 openssl-1.1.1g]# make -j$(nproc)
[root@172-16-11-99 openssl-1.1.1g]# make install

 

PHP 7.4 다운로드 및 설치

[root@172-16-11-99 openssl-1.1.1g]# cd /usr/local/src/
[root@172-16-11-99 src]# wget https://www.php.net/distributions/php-7.4.5.tar.gz
[root@172-16-11-99 src]# tar xvzf php-7.4.5.tar.gz
[root@172-16-11-99 src]# cd php-7.4.5
[root@172-16-11-99 php-7.4.5]# export PKG_CONFIG_PATH=/usr/local/openssl-1.1.1g/lib/pkgconfig
[root@172-16-11-99 php-7.4.5]# ./configure --prefix=/data/apps/src/php-7.4.5 --enable-fpm --with-zlib --enable-mysqlnd --with-config-file-path=/data/apps/src/php-7.4.5/etc/ --with-openssl
[root@172-16-11-99 php-7.4.5]# make -j$(nproc)
[root@172-16-11-99 php-7.4.5]# make install

 

유저 생성

[root@172-16-11-99 php-7.4.5]# useradd -M -r -s /sbin/nologin webuser

 

설정파일 복사 및 설정

[root@172-16-11-99 php-7.4.5]# cd /data/apps/src/php-7.4.5/etc
[root@172-16-11-99 etc]# cp php-fpm.conf.default php-fpm.conf

// 사이트 설정에 맞게 php-fpm.conf 수정

// 내 설정은 아래 값 참조 (절대값이 아니므로 반드시 참조로만 사용)

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = warning
emergency_restart_threshold = 10
emergency_restart_interval = 5s
process_control_timeout = 0s
rlimit_files = 1024
rlimit_core = 1024

[www]
user = webuser
group = webuser

listen.mode = 0666
listen = /data/apps/src/php-7.4.5/php-fpm.sock
listen.allowed_clients = 127.0.0.1
listen.owner = webuser
listen.group = webuser

pm = ondemand
pm.max_children = 2048
pm.process_idle_timeout = 10s
pm.status_path = /fpm_status

php_value[short_open_tag] = On
php_value[memory_limit] = 512M
php_value[max_execution_time] = 0
php_value[max_input_time] = -1
php_value[post_max_size] = 1024M
php_value[upload_max_filesize] = 1024M

request_terminate_timeout = 180s
catch_workers_output = yes

request_slowlog_timeout = 5s
slowlog = var/log/php-slow.log

 

[root@172-16-11-99 etc]# cp php-fpm.conf.default php-fpm.conf
[root@172-16-11-99 etc]# cp /usr/local/src/php-7.4.5/php.ini-production ./php.ini

// php.ini 파일을 자신에게 필요한 설정으로 수정하되 아래 항목들은 필수로 수정하길 권장

expose_php = Off
cgi.fix_pathinfo = 0
allow_url_fopen = Off
date.timezone = Asia/Seoul

 

systemd 파일 생성
: vi /etc/systemd/system/php-fpm.service

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
User=webuser
Group=webuser

Type=simple
PIDFile=/data/apps/src/php-7.4.5/var/run/php-fpm.pid
ExecStart=/data/apps/src/php-7.4.5/sbin/php-fpm --nodaemonize --fpm-config /data/apps/src/php-7.4.5/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

 

systemd 등록 및 실행

[root@172-16-11-99 etc]# systemctl enable php-fpm
[root@172-16-11-99 etc]# systemctl start php-fpm

 

PHP 정보 확인 (OpenSSL 1.1.1 확인)

[root@172-16-11-99 etc]# /data/apps/src/php-7.4.5/bin/php -i

You may also like...

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

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