Souce Install PHP 7.4 with OpenSSL 1.1.1 on CentOS 7

PHP 7.4(with OpenSSL 1.1.1) 소스 인스톨(컴파일) 설치 가이드

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

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

PHP 를 수동으로 컴파일 설치한 OpenSSL 1.1.1 버전으로 설치하기까지 몇시간의 삽질을 시도해야만 했습니다. 방법은 의외로 간단했습니다. PKG_CONFIG_PATH 를 설정하는 방법이며 만약 설치시 오류가 발생한다면 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 --enable-mysqlnd --with-fpm-systemd --with-zlib --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 = 65535
rlimit_core = 0

[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 = 4096 pm.process_idle_timeout = 10s pm.status_path = /fpm_status php_value[short_open_tag] = On php_value[memory_limit] = 1024M 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

LimitCORE=infinity
LimitNOFILE=65536

Type=forking
PrivateTmp=true

PIDFile=/data/apps/src/php-7.4.5/var/run/php-fpm.pid
ExecStart=/data/apps/src/php-7.4.5/sbin/php-fpm --daemonize --fpm-config /data/apps/src/php-7.4.5/etc/php-fpm.conf --pid /data/apps/src/php-7.4.5/var/run/php-fpm.pid
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -s QUIT $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