PHP 7.3을 yum 설치하고 info.php 로 확인해보면 아래와 같이 Server API 정보가 나온다.
PHP를 Apaceh + PHP + DB를 각각 분리하는 구조로 만들려면 PHP-FPM 을 설치하고 설정을 제대로 해주어야 한다.
PHP 7.3 yum 설치 방법은 간단하다.
#Step 1 – Prerequsitis yum -y install epel-release # Remi 저장소를 설치하고 활성화한다. yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum 패키지를 관리 yum -y install yum-utils
#Step 2 – Install Apache2 yum -y install httpd
#Step 3 – Install PHP and FastCGI # Disable repo for PHP 5.4 yum-config-manager --disable remi-php54 yum-config-manager --enable remi-php73
yum -y install --enablerepo=remi-php73 php php-cli mod_ssl php-fpm php-common php-imap php-ldap yum -y install --enablerepo=remi-php73 php-curl php-hash php-iconv php-json php-openssl php-zip yum -y install --enablerepo=remi-php73 php-pdo php-process php-mysqlnd php-devel php-mbstring php-mcrypt php-soap php-bcmath yum -y install --enablerepo=remi-php73 php-pgsql php-libxml php-pear php-gd php-ssh2 php-xmlreader yum -y install --enablerepo=remi-php73 php-xml php-xmlrpc php-pecl-apc php-sockets yum -y install --enablerepo=remi-php73 php-tokenizer php-zlib php-gmp php-Icinga php-intl |
설치 후에 환경 설정을 제대로 해주는 것이 PHP-FPM을 이용할 수 있는데, Virtual Host 설정 방법이 간단하지가 않더라.
보통 자료가 Apache 서버 대신 NGINX 서버로 설정하는 방법이 많이 검색된다.
Apache 서버와 PHP 서버를 분리해서 테스트를 해보고 성공하면 관련 코드를 간단하게 적어둘 생각이다.
같은 서버에서 Apache + PHP-FPM 설치하는 방법은 아래 사이트를 참조하면 해결할 수 있다.
설치 참고 사이트
https://webinformation.tistory.com/101
yum 설치하는 것을 한꺼번에 지우는 방법이다.
환경설정이 맞지 않아서 여러번 테스트 하다보니 개별 삭제가 너무 귀찮아서 한꺼번에 지우는 방법을 적어둔다.
# 설치 확인 rpm -qa | grep httpd rpm -qa | grep php rpm -qa | grep MariaDB
## 설치된 것 한꺼번에 지우기 rpm -qa | grep httpd >list # vi list로 해서 삭제 안할 리스트는 선별 제거한다. sudo yum -y remove $(awk '{print $1}' <list)
rpm -qa | grep php >list # vi list로 해서 삭제 안할 리스트는 선별 제거한다. sudo yum -y remove $(awk '{print $1}' <list) |
DB서버에 MariaDB 10.3 설치 방법
vi /etc/yum.repos.d/MariaDB.repo # MariaDB 10.3 CentOS repository list - created 2019-01-13 00:47 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
yum -y install MariaDB-server MariaDB-client
# mariadb 부팅 시 자동 시작 설정 systemctl enable mariadb
# mariadb 시작 (둘 중 하나 실행) systemctl start mariadb service mariadb start
# mariadb 상태 확인 service mariadb status
# Maria DB 보안 설정하기 mysql_secure_installation 비밀번호 입력
vi /etc/my.cnf.d/server.cnf [mysqld] character-set-server = utf8 collation-server = utf8_general_ci
service mariadb restart mysql -u root -p status quit
semanage port -a -t mysqld_port_t -p tcp 3306
############################ ### root 패스워드 분실 복구 #### ############################ # 서비스 정지 systemctl stop mariadb
# mariadb 안전모드 실행 sudo /usr/bin/mysqld_safe --skip-grant &
# 패스워드 변경 mysql -uroot mysql update user set password=password('변경할비밀번호') where user='root'; flush privileges; exit;
# 접속 테스트 mysql -uroot -p 비밀번호 입력
# 서비스 재시작 systemctl restart mariadb
|
CentOS 6.10 기반
PHP 5.6.40 yum 설치로 PHP-FPM 설치하는 방법
https://tecadmin.net/setup-httpd-with-fastcgi-and-php-on-centos-redhat/ 에 잘 나와 있다.
이 코드에서는 Apache +PHP-FPM 을 하나의 서버에서 동작하도록 되어 있다.
Virtual Host 설정을 해주어야 하는데 /etc/httpd/conf/httpd.conf 파일의 맨 하단에 Virtual Host 설정을 추가해주면 바로 동작이 되더라.
Virtual Host 설정 안해주면 phpinfo 정보로 위와 같은 그림만 확인되고 실제 PHP개발 코드가 동작이 안되더라.
아직 서버를 분리시켜서 테스트는 못해봤다. IP주소 설정 등을 해주어야 하므로 약간의 세팅 정보 변경이 필요할 거 같다.
rpm -qa | grep remi-release rpm -qa | grep epel-release yum -y install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm yum list remi-release
yum-config-manager --disable remi-php54 yum-config-manager --disable remi-php73 yum-config-manager --enable remi-php56
yum -y --enablerepo=remi,remi-php56 install httpd php php-cli mod_fcgid php-common php-devel php-ldap php-mbstring php-mcrypt php-mysqlnd php-sockets yum -y --enablerepo=remi,remi-php56 install php-pecl-apc php-pear php-pdo php-pgsql php-pecl-mongo php-sqlite php-pcre php-gmp yum -y --enablerepo=remi,remi-php56 install php-pecl-memcache php-pecl-memcached php-gd php-xml php-snmp php-libxml php-curl php-openssl |
# 아래를 주석처리하면 PHP-PFM이 동작된다. vi /etc/httpd/conf.d/php.conf # <FilesMatch \.(php|phar)$> # SetHandler application/x-httpd-php # </FilesMatch>
vi /var/www/cgi-bin/php.fastcgi #!/bin/bash
PHPRC="/etc/php.ini" PHP_FCGI_CHILDREN=4 PHP_FCGI_MAX_REQUESTS=1000 export PHPRC export PHP_FCGI_CHILDREN export PHP_FCGI_MAX_REQUESTS exec /usr/bin/php-cgi
chown apache:apache /var/www/cgi-bin/php.fastcgi chmod +x /var/www/cgi-bin/php.fastcgi
vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> ServerName localhost ServerAdmin jsk005@naver.com DocumentRoot /var/www/html ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/html"> Options +Indexes +FollowSymLinks +ExecCGI AddHandler php-fastcgi .php Action php-fastcgi /cgi-bin/php.fastcgi AllowOverride All Order allow,deny Allow from All </Directory> </VirtualHost>
#Verify PHP-FPM version /usr/sbin/php-fpm -version
service httpd restart
|
## 보안설정 chmod 640 /etc/httpd/conf/httpd.conf chown root:root /etc/httpd/conf/httpd.conf chmod 640 /etc/php.ini chown root:root /etc/php.ini
#부팅시 자동 시작 설정 chkconfig httpd on
## httpd.conf 파일 수정 vi /etc/httpd/conf/httpd.conf ServerName localhost
DocumentRoot "/var/www/html" <Directory "/var/www/html"> # 허용하지 않은 디렉토리를 액세스할 수 있으므로 가능하면 FollowSymLinks 를 삭제하는 것이 좋다. Options IncludesNoExec AllowOverride None Order deny,allow Allow from all </Directory>
vi /etc/php.ini ;시간설정 (앞에 ;지울것) 을 지우고 아래 내용 추가 date.timezone = "Asia/Seoul" ;<? 와 <?php 둘다 인식하게 함 short_open_tag = On ; PHP 가 받아들이는 POST data 최대 크기 ;default 8M 로 되어 있음, upload_max_filesize 보다 크게 설정해야 함 post_max_size = 60M memory_limit = 128M upload_max_filesize = 50M
; error_reporting 세팅 ;개발환경 ;error_reporting = E_ALL ; 실제 환경, 경고메시지 출력 안됨 ;error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED ; 해킹의 먹이감이 되므로 평소에는 Off 로 해둔다. 에러가 있을 경우 디버깅 가능하도록 에러 메세지를 출력해준다. display_errors = Off ; 평소에는 해제(Off)한다. 개발환경에서는 디버깅 가능하도록 On하면 에러 메세지를 출력해준다. display_startup_errors = Off log_errors = On ; 에러 로그 파일 설정이 없으면 Apache 로그 파일에 기록된다. ; 퍼미션 설정해서 /home/user/log/php.log 과 같이 설정 ;error_log = filename
; register_globals = On 으로 하면, PHP 스크립트의 변수 값을 임의로 변경할 수 있는 취약성이 있다. ; off 로 설정한 후, $_GET, $POST 를 사용해서 사용자가 전달한 값을 얻어야 한다. register_globals = Off
;UTF-8 로 문자 인코딩 설정하기 ;해당 부분을 찾아서 아래와 같이 수정 default_charset = "UTF-8" [mbstring] mbstring.language = Korean mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off
|