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