리눅스에 APM(Apache + PHP + MySQL) 설치 및 연동

Share

Last Updated on 1월 4, 2024 by Jade(정현호)

안녕하세요 
포스팅은 오라클 클라우드 프리티어, APM 스택구성, 도메인 설정, 워드프레스 구축까지 이어지는 연재 글의 중간 글로 이번에는 APM 스택구성에 대한 내용을 다루고 있습니다.

다른 버전의 구성에 대한 정보는 중간에 링크가 있으며 다음 단계 포스팅은 하단에 링크 정보가 있습니다.

이전글

 • 오라클 클라우드 프리티어 1
 • 오라클 클라우드 프리티어 2
 • 오라클 클라우드 프리티어 3
 • 오라클 클라우드 프리티어 4
           

APM - Apache + PHP + MySQL 의 약자

APM 은 웹 서버를 구축하고 PHP 로 작성된 웹 어플리케이션을 구동하기 위해 이전부터 많이 사용해온 스택입니다.

PHP 를 구동 하기 위한 서버 스택의 구성은 여러가지 방식으로 할 수 있습니다.

  • Apache + PHP(mod_php) + MySQL(또는 MariaDB)
  • Apache + PHP-FPM + MySQL(또는 MariaDB)
  • Nginx + PHP-FPM + MySQL(또는 MariaDB)


이번 글에서는 yum(rpm)으로 Apache + PHP + MySQL 와 PHP-FPM 방식 2가지를 내용을 알아보도록 하겠습니다.


*  APM/LEMP ,도메인 설정 등을 완료 후 워드프레스 이외 제로보드XE 나 라이믹스(Rhymix),그누보드 등으로 사이트를 구축하는 데 사용하시면 됩니다.
              

설치 환경

OS: CentOS 7.8 
APACHE2.4.46 (codeit) + PHP 7.4 + MySQL5.7

설치순서는 Apache -> MySQL -> PHP 순으로 설치하였으며 작업은 root 유저로 진행하였습니다.



Apache 버전
CentOS 7.8 버전의 기본 YUM Repository 에서 받을 수 있는 Apache의 최신버전은 2.4.6 버전 입니다.

HTTP/2 적용을 위해서는 mod_httpd2 모듈이 필요하고 해당 모듈을 사용하기 위해서는 Apache 2.4.17이상 버전부터 지원되기 때문에 별도의 외부의 YUM Repository 를 추가하여 Apache 를 최신버전으로 설치하는 내용으로 업데이트(변경) 되었습니다.


PHP 버전
PHP 도 7.2버전에서 7.4 버전으로 내용이 업데이트 되었습니다.



[참고1] 오라클 클라우드 프리티어 구성 후 Ubuntu 환경에 Nginx PHP MariaDB 환경 구성을 원하시면 아래 포스팅을 참조하세요


[참고2CentOS 8 버전에서 APM(Apache PHP MariaDB) 설치는 아래 포스팅을 참조하세요


[참고3] CentOS 7 버전에서 소스 컴파일(Source Compile) 을 통해서 APM 구성에 대한 내용은 아래 포스팅을 참조하세요


[참고4] Rocky Linux 8 버전에서 APM(Apache PHP MySQL) 구성에 대한 내용은 아래 포스팅을 참조하세요

         

Apache

먼저 YUM Repository 등록을 진행하도록 하겠습니다.


EPEL 활성화

[root]# yum -y install epel-release yum-utils
   * Oracle Linux7 에서 EPEL설치는 아래 참조


CodeIT 저장소를 추가

[root]$ cd /etc/yum.repos.d
[root]$ wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo

[root]# yum clean all


가능 버전 확인

[root]# yum info httpd
Available Packages
Name : httpd
Arch : x86_64
Version : 2.4.46


설치 진행

[root]# yum -y install httpd httpd-devel apr \
apr-util apr-devel apr-util-devel gcc gcc-c++ \
pcre-devel apr-util-openssl mod_http2 \
apr-util libnghttp2 libnghttp2-devel \
expat-devel libxml2-devel \
mod_proxy_html

[참고] Source Compile 설치는 아래 글을 참조하시면 됩니다.


[참고] RHEL/CentOS7 이 아닌 Oracle Linux7에서 EPEL Repository 설치는 아래의 방법을 이용합니다
(RHEL7/CentOS7 환경은 바로 MySQL 설치 내용을 보시면 됩니다)

[root]# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root]# rpm -ivh epel-release-latest-7.noarch.rpm
[root]# yum clean all


추가적으로 repository를 활성화할 내역이 있습니다.

/etc/yum.repos.d 디렉토리 내에 oracle linux7 파일에서 ol7_optional_latest를 활성화합니다.
파일은 public-yum-ol7.repo 나 oracle-linux-ol7.repo 입니다.

[ol7_optional_latest]
name=Oracle Linux $releasever Optional Latest ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/optional/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1


enabled=0 을 1 로 변경합니다.
      

MySQL

MySQL 설치 시 OS mysql 계정과 mysql 그룹은 자동 추가가 됩니다


MySQL Repository 설치


[root]# rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

[root]# yum clean all


필요 패키지 설치

[root]# yum -y install libaio libaio-devel \
numactl-devel numactl \
ncurses ncurses-devel ncurses-libs ncurses-static \
openssl openssl-devel bison readline \
gcc gcc-c++ cmake glibc


MySQL community 버전 설치

[root]# yum -y install mysql-community-server mysql-community-devel


root 패스워드 변경

[root]# systemctl start mysqld


mysql 를 처음 시작하고 로그에서 임시 비밀번호를 확인할 수 있습니다.

[root]# cat /var/log/mysqld.log | grep "temporary password"
[Note] A temporary password is generated for root@localhost: RTZwovJ#r8*:


[root]# mysql -uroot -p

Enter password: <==위에서의 비밀번호 입력, RTZwovJ#r8*:


mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '변경할 패스워드';

                        <-- 패스워드는 복잡도를 고려해야 합니다.
mysql> flush privileges;
mysql> exit;


MySQL 파라미터 추가 및 수정


[root]# vi /etc/my.cnf
[mysqld] 항목 아래에 내용을 추가하면 되며 [mysqld_safe] 내용도 같이 추가합니다.

user=mysql
innodb_buffer_pool_size = 384M
innodb_file_per_table=ON
bind-address=0.0.0.0
character-set-client-handshake=OFF
skip-character-set-client-handshake
init-connect=SET NAMES 'utf8mb4' COLLATE 'utf8mb4_general_ci'
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
secure-file-priv=""
show_compatibility_56 = On
log_timestamps=SYSTEM
innodb_buffer_pool_load_at_startup = ON
innodb_buffer_pool_dump_at_shutdown = ON
max_connections = 1000


[mysqld_safe]
open-files-limit = 16384



ulimit 설정 추가

[root]# vi /etc/security/limits.conf
apache 와 mysql 유저에 대한 ulimit 값을 추가로 설정을 합니다.

apache hard nofile 65536
apache soft nofile 65536
apache soft nproc 16384
apache hard nproc 16384

mysql hard nofile 65536
mysql soft nofile 65536
mysql soft nproc 16384
mysql hard nproc 16384



MySQL 를 재시작 합니다.

[root]# systemctl restart mysqld


MySQL 파라미터 관련해서는 아래 글에서 더 참조하시면 됩니다.

      

PHP

PHP 설치를 위한 Repository 설치

CentOS 7.8 기준으로 yum repository에 등록된 php 최신 버전은 5.4.16 입니다
그 이상 버전을 사용하려면 먼저 REMI repository 설치를 해야 합니다.

[root]# yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm


repository 설치 후 repo 파일을 수정


[root]# vi /etc/yum.repos.d/remi.repo

name=Remi's RPM repository for Enterprise Linux 7 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/7/remi/$basearch/
#mirrorlist=https://rpms.remirepo.net/enterprise/7/remi/httpsmirror
mirrorlist=http://cdn.remirepo.net/enterprise/7/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi


enable=0 -> enable=1 로 수정


PHP 7.4 설치

[root]# yum -y install php74 php74-php-common \
php74-php-fpm php74-php-gd php74-php-xml \
php74-build php74-php php74-php-devel \
php74-php-mysqlnd php74-php-opcache \
php74-php-mbstring php74-php-pdo \
php74-php-pecl-crypto php74-php-pecl-imagick \
php74-php-pecl-imagick-devel php74-php-pecl-mcrypt \
php74-php-pecl-zip php74-php-bcmath \
php74-php-pecl-mysql curl curl-devel \
libpng libpng-devel libwebp libwebp-devel \
libXpm libXpm-devel openssl openssl-devel \
autoconf zlib zlib-devel freetype freetype-devel \
gd gd-devel libmcrypt libmcrypt-devel \
libtool-ltdl-devel libxml2-devel \
libxml2 libcurl libcurl-devel


* 터미널에 붙여 넣었을 때 문제가 발생시 노트패드(메모장) 에 먼저 붙여 넣은 뒤 다시 복사하여 터미널에 붙여 넣기를 해보시기 바랍니다.

* 버전은 8.0까지 설치할 수 있으며 작성된 어플리케이션에 따라서 호환되는 버전을 사용하시면 됩니다.


설치 완료 후 확인

[root]# php74 -v
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies



[root]# ls -al /etc/httpd/conf.modules.d/ | grep php74-php
-rw-r--r--. 1 root root 300 Sep 30 14:55 15-php74-php.conf



[root]# ls -al /etc/httpd/modules/ | grep php74
lrwxrwxrwx. 1 root root 55 Oct 5 12:09 libphp74.so 
  -> /opt/remi/php74/root/usr/lib64/httpd/modules/libphp7.s



php 설정 변경 ( mod_php 와 php-fpm 공통)

[root]# vi /etc/opt/remi/php74/php.ini

아래 5개는 주석 제거 및 내용 수정


date.timezone = Asia/Seoul
expose_php = Off

post_max_size = 500M
upload_max_filesize = 200M
memory_limit = 512M
       

mod_php 로 연동

먼저 apache와 연동을 mod_php 로 하는 방법에 대해서 기술하겠습니다.
PHP-FPM은 아래에 내용이 있습니다.


Apache 설정 변경

/etc/httpd/conf/httpd.conf  파일을 수정 

[root]# vi /etc/httpd/conf/httpd.conf


ServerName www.example.com:80

-> 주석 해제


아래 Directory 사이의 내용을 변경 합니다.
<Directory "/var/www/html">
        .... 사이의 내용...
</Directory>


#Options Indexes FollowSymLinks
-> 주석 처리 후 아래 내용으로 입력

Options MultiViews FollowSymLinks
-> 내용 추가 


#AllowOverride None
-> 주석 처리 후 아래 내용으로 입력

AllowOverride All
-> 내용 추가

=> 저장 후 편집 완료 합니다  :wq


[참고] yum으로 PHP가 설치하면 /etc/httpd/conf.d/php74-php.conf 파일이 생성되게 됩니다.

파일내 주요 설정 내용들이 추가되어 있는 상태입니다.


PHP 확인을 위한 phpinfo.php 생성

/var/www/html 에 아래 내용으로 아래의 phpinfo.php 파일을 만듭니다.

[root]# vi /var/www/html/phpinfo.php

<?php

phpinfo();
?>


OS 방화벽 오픈


# 80 포트 추가

firewall-cmd --permanent --add-port=80/tcp

# 80 포트 삭제(참고)

firewall-cmd --permanent --remove-port=80/tcp

# 정책 재반영 및 방화벽 정책 확인

firewall-cmd --reload;firewall-cmd --list-all


Apache 재시작 및 PHP 로드 확인

[root]# systemctl restart httpd

apache를 재시작 후 웹브라우저에서 phpinfo.php 파일이 정상적으로 로드 되는지 확인합니다.
http://ip주소/phpinfo.php




위에서 "Server API" 를 보게 되면 지금은 Apache 2.0 Handler 로 표기되는 것을 확인할 수 있습니다.
     

PHP-FPM 으로 Apache 연동

이번에는 Apache 와 PHP 연동을 PHP-FPM 으로 하도록 하겠습니다.

향후 Nginx 로의 변경시 변경이 자유롭고 Apache MPM방식을 event(thread) 방식을 사용할 수 있는 장점이 있습니다.

성능 또한 Apache + mod_php 방식에 비해 PHP-FPM을 사용하여 별도로 php 로직을 처리해주는것이 성능적으로도 더 좋다고 확인되고 있습니다.

그래서 이미 이전 부터 php-fpm 을 많이 사용하는 추세입니다.


Apache 설정을 변경

/etc/httpd/conf/httpd.conf  파일 수정

[root]# vi /etc/httpd/conf/httpd.conf


ServerName www.example.com:80
-> 주석 해제


-> 아래 쪽에 2개 내용추가
ServerTokens Prod
ServerSignature Off


아래 Directory 사이의 내용을 변경합니다.
<Directory "/var/www/html">
        .... 사이의 내용...
</Directory>


#Options Indexes FollowSymLinks
-> 주석 처리 후 아래 내용으로 입력

Options MultiViews FollowSymLinks
-> 내용 추가 

#AllowOverride None
-> 주석 처리 후 아래 내용으로 입력

AllowOverride All
-> 내용 추가 


15-php74-php.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/15-php74-php.conf

<IfModule !mod_php5.c>
    <IfModule prefork.c>
           # LoadModule php7_module modules/libphp74.so
   </IfModule>
</IfModule>

=> PHP-FPM 을 사용하기 위해서는 mod_php 모듈을 unload 해야 함으로 LoadModule php7_module 주석 처리합니다


00-mpm.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/00-mpm.conf
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

=> 주석 처리

LoadModule mpm_event_module modules/mod_mpm_event.so
=> 주석 해제
   * php-fpm 사용시 event-mpm방식을 사용할 수 있습니다.


00-proxy.conf 파일 수정

[root]# vi /etc/httpd/conf.modules.d/00-proxy.conf
아래 4개 내용 추가 

ProxyRequests Off
ProxyErrorOverride on
ProxyTimeout 600
ProxyPreserveHost On


php-fpm.conf 파일 수정

[root]# cd /etc/opt/remi/php74
[root]# vi php-fpm.conf

daemonize = yes
-> 주석으로 되어 있다면 주석을 해제 합니다.

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
;log_level = notice
-> PHP-FPM 데몬의 Log level Default 는 notice 입니다.
-> 문제에 대한 분석이나 초기 설정 후 확인 등이 필요하다면 debug 레벨로 변경하여 사용해도 됩니다.

include=/etc/opt/remi/php74/php-fpm.d/*.conf
-> include 로 하여 php74/php-fpm.d/ 아래 *.conf  절이 주석처리 되어 있는지 확인합니다.
-> 버전 등에 따라 맨위나 맨아래, 혹은 맨 위나 맨 아래 둘 다 있을 수 있습니다.
-> 주석처리가 해제되어 있는 지만 체크하면 됩니다.



Socket Directory 생성 및 tmpdir 관련 설정

[root]# mkdir -p /run/php/
 ==> socket 이 생성될 위치를 먼저 생성해줍니다.


재부팅 후에 디렉토리가 생성될 수 있도록 설정

[root]# cd /usr/lib/tmpfiles.d
[root]# vi php.conf

d /run/php 0755 root root -
==> php.conf 파일에 내용 입력



php-fpm www.conf 파일 수정

[root]# cd /etc/opt/remi/php74/php-fpm.d
[root]# vi www.conf


; pool name ('www' here)
[www]
-> PHP Pool 이름을 지정하는 항목입니다.
-> 프로그램명이나 사이트 명이나, 업무가 있다면 업무명 등을 입력하여도 됩니다.
-> Pool 혹은 Container 의 식별, 이름입니다. 기본으로 www 지정되어 있습니디.
-> Pool은 conf 파일 별로 여러개의 Pool을 만들 수 있습니다. 이때는 Pool 별로 이름을 지정하여 겹치지 않게 해야 합니다.


= 주석 해제 및 apache 로 내용을 변경합니다. mode 는 0660 으로 합니다.
user = apache

group = apache
listen.owner = apache
listen.group = apache
listen.mode = 0660


listen = /run/php/php-fpm.sock
=> 이부분은 접속을 받는 방식을 설정하는 부분으로 Socket(UDS) 방식으로 사용하거나 IP 방식으로 사용하거나 둘 중 하나를 선택하여 설정해야 합니다.

=> IP 방식으로는 아래와 같이 지정할 수 있습니다.
listen = 123.123.123.123.123:9000

listen = 127.0.0.1:9000
listen = 9000 <== 이와 같이 IP 없이 포트만 기재하면 모든 주소에서 접속이 가능한 상태입니다.
(listen on a TCP socket to all addresses)


소켓 방식은 아래와 같이 파일명을 지정해주면 됩니다.

listen = /run/php/php-fpm.sock

같은 서버에서 apache 와 php-fpm 사용하는 설정으로 할 것임으로 socket 을 지정하여 설정하도록 하겠습니다

같은 서버내 라도 IP를 사용할수 있고 사용하여도 됩니다.


FPM 프로세스

# 프로세스 수와 관련된 pm 으로 시작하는 파라미터 가 있습니다
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 40
pm.max_requests = 500

* 위의 설정값은 예시입니다.

pm.max_children 는 설정된 PHP Pool(여기서는 www) 내에서 가동할 수 있는 최대 자식 프로세스 수를 의미합니다.

pm.start_servers 는 php-fpm 을 실행할 때 초기에 생성하는 자식 프로세스의 개수입니다

pm.min_spare_servers 는 idle 상태의 자식 프로세스 개수가 이 개수보다 작으면 자식 프로세스를 생성합니다

pm.max_spare_servers 는 idle 상태의 자식 프로세스의 최대 개수를 의미합니다.

pm.max_requests 는 각 프로세스가 최대 request를 처리하는 수 입니다.
500 으로 설정되어 있다면 500번 request 후 프로세스를 다시 생성합니다
프로세스가 점진적인 메모리 증가에 대한부분을 방지할 수 있습니다.
apache 에서 유사한 설정으로는 MaxRequestsPerChild 있습니다.


[참고] PHP-FPM 메모리 사용현황 및 세션 계산


아래 명령어를 이용하면 현재 fork된 php-fpm 프로세스 당 메모리 사용량을 확인할 수 있습니다.
[root]# ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

시스템에 가용한 메모리나 사용할 정도에서 프로세스당 사용메모리를 나누어서 최대 자식프로세스 개수를 산정해도 되겠습니다


ex) PHP에 6GB 를 사용하려고 함 , PHP-FPM이 현재 사용중인 메모리량이 대략 60MB 임

6000MB / 60MB = 자식 프로세스 개수 100개 로 설정

이와 같이 각 시스템 마다 메모리 상황을 고려하여 적절한 pm.max_children 값을 선정하여 설정하면 되겠습니다.


로그 관련 파라미터 수정

로그 관련된 파라미터의 주석 해제와 변경을 합니다.

access.log = /var/opt/remi/php74/log/php-fpm/$pool.access.log
   -> 주석 해제 및 경로 지정


access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
--> 주석제거

slowlog = /var/opt/remi/php74/log/php-fpm/$pool.slow.log

--> 주석제거, 파일명 변경

request_slowlog_timeout = 5
--> 주석제거, 내용변경

--> 단위는 초로 5는 예시 입니다. 해당 시간은 선택해서 변경하시면 됩니다.

catch_workers_output = yes
-> 주석 제거 
-> main error log 파일에 worker 의 에러 로그가 같이 기록되게 됩니다.

php_admin_value[error_log] = /var/opt/remi/php74/log/php-fpm/www-error.log
-> 주석 제거


php_admin_flag[log_errors] = on
-> 주석제거 


php74-php.conf 파일 수정

[root] vi /etc/httpd/conf.d/php74-php.conf


아래의 내용을 추가, <IfModule mod_php7.c> 아닌 곳에 설정을 하면 됩니다.

<IfModule mod_php7.c> 위쪽에 적절한 곳에 설정하면 됩니다.

이부분은 2가지 방식으로 설정할 수 있으며 위에서 PHP-FPM의 Listen 방식에 따라 Apache에서도 설정이 달라 집니다.


Unix Socket 방식으로 사용시

# php-fpm options
  <FilesMatch \.(php|phar)$>   
     SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost"
 </FilesMatch>

-> SetHandler 절에 파일명은 위에서 설정한 PHP-FPM의 Socket의 경로와 파일명이 같아야 합니다
-> PHP-FPM : listen=/run/php/php-fpm.sock   사용시 


IP 방식으로 사용시

아래와 같이 아이피나 호스트명을 사용합니다.

# php-fpm options
  <FilesMatch \.(php|phar)$>
    #  SetHandler "proxy:fcgi://127.0.0.1:9000"
    #  SetHandler "proxy:fcgi://localhost:9000"
    SetHandler "proxy:fcgi://node3:9000"

  </FilesMatch>

-> PHP-FPM :   listen = 127.0.0.1:9000 이나  listen = 9000 사용시


PHP Opcache 파라미터

[참고] PHP 5.5 버전 부터 기본에 포함되었으며 이전에는 zend optimizer 를 별도로 설치 및 plugin 하여 사용하였습니다.

사용 용도는 컴파일 / 실행 / 결과 의 순으로 처리되는 PHP에 대해서 Opcache(예전의 Zend Optimizer)를
이용하여 컴파일된 PHP 코드를 메모리에 Cache 해서 접속요청에 더 빠르게 응답을 줄수 있는 기능입니다


php7.x 버전부터 Opcache 의 기본 메모리가 128M  입니다.

메모리를 변경하거나 다른 파라미터를 조정하고자 한다면 10-opcache.ini 에서 설정할 수 있습니다.


[root]# cd /etc/opt/remi/php74/php.d
[root]# vi 10-opcache.ini


10-opcache.ini 파일에는 opcache 의 활성화 내용부터 해서 기본적으로 사용 될수 있는 파라미터는
주석이 해제되어 활성화가 되어 있는 상태입니다.


opcache의 파라미터의 간략한 설명은 아래와 같습니다.

opcache.enable=1 - Zend Opacache 활성화 여부 결정 , 1일때 활성화됨


opcache.enable_cli=1 - PHP CLI 버전에서(명령행 버전에서도) Zend Opcache 활성화 여부 결정


opcache.memory_consumption - 캐쉬에 사용할 메모리 크기. 7.0부터 기본 크기는 128M


opcache.interned_strings_buffer=8 - 메모리에서 interned 문자열을 위해 사용할 메모리량


opcache.fast_shutdown=1 - 활성화 시 accelerated code 에 대해서 사용되어짐


opcache.interned_strings_buffer - Opcache 가 사용하는 내부 스트링( class name 이나 file등)을 저장하기 위한 메모리의 크기.


opcache.max_accelerated_files - Opcache 가 캐쉬할 최대 파일 갯수.

opcache.validate_timestamps - Default 1 / 0(off)이 아닐 경우 opcache.revalidate_freq 에 설정된
시간마다 코드와 캐쉬의 변경 여부를 체크한다.



validate_timestamps 가 꺼져 있을 경우 코드의 변경 여부를 체크하지 않으므로 PHP 소스가 수정되어도 반영되지 않는다.

그러므로 변경 사항을 반영하려면 httpd 를 재기동하거나 httpd 에 SIGUSR2 시그널을 전송해야 한다.


opcache.file_cache_only=1 - makes sure that the in-memory opcache is disabled and only files are used, which is what you want for CLI.

1 로 설정할 경우 in-memory opcache 사용이 안됨 = php-fpm 에서 사용할수 없음


그래서 메모리 관련하여 수정이 필요 할 경우 아래와 같이 용량을 늘려서 사용할 수 있습니다.

opcache.memory_consumption=256
    -> 입력의 예시 이며 단위는 MB 입니다
    -> 이부분(메모리 변경) 은 필수는 아닙니다.


php-fpm 서비스 활성화 및 시작

[root]]# systemctl enable php74-php-fpm

[root]]# systemctl start php74-php-fpm


프로세스 및 포트 오픈 확인

[root]]# ps -ef| grep php

root 6389 1 0 17:18 ? 00:00:00 php-fpm: master process (/etc/opt/remi/php74/php-fpm.conf)
apache 6390 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6391 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6392 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6393 6389 0 17:18 ? 00:00:00 php-fpm: pool www
apache 6394 6389 0 17:18 ? 00:00:00 php-fpm: pool www


listen을 IP 으로 사용 할 경우

[root]]# netstat -antp | grep 9000

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 6389/php-fpm: maste


listen을 Unix Socket 으로 사용 할 경우

[root]]# ls -al /run/php
srw-rw----. 1 apache apache 0 Oct 24 16:25 php-fpm.sock


OS 방화벽 오픈

# 80 포트 추가
firewall-cmd --permanent --add-port=80/tcp

# 80 포트 삭제(참고)
firewall-cmd --permanent --remove-port=80/tcp

# 정책 재반영 및 방화벽 정책 확인

firewall-cmd --reload;firewall-cmd --list-all


phpinfo.php 생성

/var/www/html 에 아래 내용으로 phpinfo.php 파일을 생성합니다.

[root]]# cd /var/www/html
[root]]# vi phpinfo.php

<?php
phpinfo();
?>


Apache 재시작


[root]# systemctl restart httpd

브라우저에서 접속하여 PHP 정보 정상적으로 로드 되는지 확인합니다.
http://ip주소/phpinfo.php



phpinfo 에서 보이는 것 같이 mod_php 와 다르게 "Server API" 가 FPM/FastCGI 로 바뀐 걸 확인할 수 있습니다.


이제 phpMyAdmin 을 이용하거나 DB 접속을 하는 PHP 를 통해 DB 접속을 확인하시면 됩니다.




이어지는 다음글 :  웹 기반 MySQL 관리툴 - phpMyAdmin

 

연관된 글
Apache 웹 방화벽 - Mod_Security

무료 도메인 발급 받기 - freenom.com

무료 SSL 인증서 발급 및 HTTP/2 적용

PHP8.0 발표 소식 및 Compile 설치

CentOS 8 지원 종료 및 정책 변경 안내 - 새로운 Rocky Linux 소개

 

                  

12
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x