카테고리 Archives: PHP

Rocky Linuix(v8.5) – nginx(v1.20.1-6) – php-fpm(v8.0.14) 설정

Rocky Linux 8.5 버전에서 nginx – php – mariadb 설치 방법 이다.

 

먼저 OS의 기본적인 설정을 해야 한다.

NetworkManager 를 여전히 사용중이기 때문에 nmtui 명령어로 아래 화면에서 네트워크 설정을 할 수 있다.

2022-01-13_143039

Minimal 설치 기준으로 일반 적인 설정이라고 보면 되겠다 ‘ㅅ’a

  1. atd 데몬을 사용 중지 한다. (보안 취약점이 될 소지가 있다.)
  2. 서버 타임존을 설정한다.
  3. rsyslogd사 설치되어야 로그 감사를 통한 서버 이상을 확인하기 용이 하다. (vim 은 내 친구이기 때문에 설치한다 = =a)
  4. rsyslog를 실행한다.
  5. selinux 이슈 발생시 사유 추적을 위해 분석 스크립트를 설치 한다.

selinux 이슈 발생 추적은 아래 명령어로 진행 한다.

 


 

서버 목적에 따른 firewalld 를 설정 한다.

firewalld 의 경우 전통적인 iptable 를 사용하지 않고 nftable 이란것을 사용하기 때문에 일시 중지를 위해 iptable -F 명령어로 값을 모두 날려도 작동 하지 않으니 유의 하자 ‘ ‘a

기초 사용법은 아래와 같다.

 


 

epel 레포지토리를 설치 하고 업그레이드를 통해 최신화 한다. (리부팅이 필요할지도 ‘ ‘a)

 

php 의 버전 선택 설치를 위해 Remi 레포지토리를 이용 하여 php 8.0 버전을 선택해서 설치 한다. (nginx 역시 1.20 버전으로 선택함)

php-fpm 설치와 라이브러리 설치를 구분한 이유는 일반 php를 설치하게 되면 의존성으로 httpd 가 설치되고 php-fpm 을 설치해야 nginx가 의존 설치 되기 때문이다.

 

MariaDB 10.6 설치 (레포지토리 생성 URL) CentOS 가 아닌 RHEL8의 레포지토리를 사용하였음.

 

/etc/nginx/conf.d/virtual.conf 파일에 가상호스트를 생성하고 php-fpm 과 sock 으로 연결 한다.

일단 여기 까지 진행된 경우 nginx – php – mariadb 조합의 사용이 가능하다.

내부 공용으로 쓰이는 부분은 params 파일로 별도로 만들어서 include 하는편이 좋다. ‘ㅅ’a

 

사이트용 계정 및 phpinfo() 파일을 생성하고 브라우져로 접속하여 확인 해 본다 ‘ㅅ’a

 

WEB 디렉토리를 기본이 아닌 /free/home/계정 으로 진행 했기 때문에 아래와 같이 selinux 설정 하고 적용 한다.

selinux 는 어렵지만 활성화 해두고 쓰면 보안이 매우 강려크 하다.

문제가 발생한경우 setenforce 0 명령어로 감시모드로 전환 하고 sealert 명령어로 예외 추적 하고, context를 추가한 뒤에 다시 setenforce 1 으로 활성화 하는 습관을 가지는게 좋다.

설정된 t콘텍스트 는 ls -lZ /경로/경로 으로 확인할 수 있다.

 


 

snapd 및 certbot (let’s encrypt) 를 설치 한다.

 

certbot을 활용한 인증서 발급 명령어 (nginx acme-challenge 를 설정한 이유는 디렉토리를 고정 사용하기 위해서이다.)

 

nginx ssl 설정은 일반 server { } 설정 사이에 listen 값을 교체 및 ssl 설정을 추가 하면 된다.

 

Docker for windows – centos8(php, httpd) 설치

Centos 8.1.1911 이 배포 되었다.

당장 OS 를 올릴 필요는 없지만 새로운 OS 가 추후에는 사용이 될것이기 때문에

Docker 환경에서 연습이 필요로 하다고 판단되어 Windows for Docker 를 이용하여 컨테이너를 생성하여 설치 테스트 및 작동 테스트를 해보았다 ‘ㅅ’a

사전에 c 드라이브를 분배 하여 w 드라이브에 workspace 를 생성 하였으며 컨테이너 웹 디렉토리와 연결한다. (windows 환경에서 php 개발 편의성)

 

물론 Docker 부분만 제외 한다면 Centos 8 에서 같은 방법으로 설치가 가능하다.

 

docker 에 centos 8 공식 이미지를 통해 컨테이너 생성을 한다.

 

Remi’s 레포지토리 추가 및 php 7.3 설치 (httpd 는 의존성에 의해 OS 기본 제공 되는 2.4.37이 설치 된다.)

 

apache 설정 (웹 디렉토리는 /var/www/html 으로 진행 하였음.)

 

php-fpm 설정

 

php.ini 설정 (파일 업로드 100M 와 숏코드만 사용 만 수정)

 

apache 및 php-fpm 시작 및 활성화

 

docker hub: https://hub.docker.com/r/san0123/centos8-apache24-php73

도커 이미지(latest)의 경우 php-fpm 이 아닌 libphp7.so 으로 httpd-profork 방식으로 설정 되어 있다. (ssl, http2 등 사용 불가)

php 7.4 : https://hub.docker.com/r/san0123/centos8-apache24-php74


ps. MariaDB 10.4 설치

mariadb 는 centos 에서 10.3.17 이 제공되지만 업데이트는 잘되지 않기 때문에 mariadb 에서 제공 되는 repo를 추가하고 설치한다.

 

mariadb 시작 및 활성화

 

webtatic 저장소를 이용한 php 7 설치

php 는 httpd 의존이기 때문에 php를 설치하는것만으로 httpd 가 설치 된다.
즉 httpd 먼저 설치하고 php를 설치해야 한다.

webtatic의 php 는 기본적으로 nts 이며 apache 가 prefork mpm 이 아닐 경우(worker, event) zts 모듈이 로딩이 되므로 매우 편리하게 사용할 수 있다.
아울러 yum을 이용한 설치이기 때문에 더 훌륭하다 =3=b

 

레포지트리 설치

 

php7 설치

 

httpd 의 mpm 방식은 아래와 같이 확인한다.

httpd -V 의 값에서 MPM 이 worker 로 확인 되었기 때문에 cron 등에 등록을 하려면 zts-php 명령어를 써야 한다.
worker 방식은 메모리를 적게 쓰지만 다종의 웹솔루션을 운영하기엔 적합하지 않다.
다만 apache 2.4.27 에서 부터 http/2 를 지원하는데 있어서 profork 방식을 더 이상 지원하지 않는다.

 

서버에서 php 명령어 실행은 아래와 같이 한다.

 

httpd를 worker MPM 으로 설치 하고 webtatic 제공의 php 를 설치한 서버에서 오라클 접속을 사용하기 위해 oci8 익스텐션 설치 진행은 아래와 같이 진행 했다.
phpize, config-php 역시 각각 zts-phpize, zts-php-config 의 것을 사용한다.

 

설치된 oci8 은 웹문서에서 phpinfo(); 로 호출하거나 리눅스 쉘에서 아래와 같이 확인이 가능하다.

 

PS. webtatic 에서는 php70w-odbc를 제공 하므로 yum 설치로 odbc를 이용할 수 있다.

CentOS6 에서 php7 – memcache 설치

php7 버전에서는 pecl 을 이용하여 pecl-php-memcache 를 사용할수 없다.

php7에서 memcached 를 이용하시 위해서는 php-memcached 를 사용한다.
이프로그램을 필수 라이브러리로 libmemcached, libmemcached-devel 를 필요로 한다.

라이브러리설치는 CentOS7 의 경우 yum으로 설치진행을 할 수 있다. ( libmemcached-devel-1.0.16-5.el7.x86_64 )

 

다만 CentOS6에서는 yum 설치를 할경우 어이없이 낮은 버전인 0.31 이 설치되어 php-memcached 를 설치 할 수 없다.
때문에 별개의 패키지를 다운 받아 RPM 설치를 해야 한다.

 

php-memcached 설치방법.

 

아래와 같이 설치된 so파일을 불러오도록 설정하고

php.ini 파일에 session 생성을 memcache를 쓰도록 한다.

이후 php 에서는 세션 스타트 후에 session_regenerate_id 을 호출해야 한다.

 

PS. 별도 세션폴더를 지정하여 쓰는 프로그램의 경우 오류가 난다.( 그누보드등 )

php.ini 에서 업로드 파일 사이즈를 지정하는 옵션

post_max_size 는 upload_max_filesize 보다 20% 크게 지정해야 한다.
통신 비트는 일반적으로 8bit 후 2bit의 별도의 패리티비트(오류정정)가 포함된다

upload_max_filesize /  post_max_size
.              10M                     12M
.              20M                     24M
.              40M                     48M
.              60M                     72M
.              80M                     96M
.             100M                    120M

post_max_size 사이즈가 만약 100M 를 넘어 간다면 memory_limit(기본값 128M)를 최소 40M 가량 더해 적용한다.
이외에도 업로드 되는 파일의 사이즈가 매우 크다면 네트워크 속도를 고려하여 max_execution_time, max_input_time 을 늘려 PHP 실행시간 제한을 늘려야 한다.

 

memory_limit, max_execution_time, 는 PHP_INI_ALL 이기 때문에 php함수인 ini_set() 혹은 .htaccess 에서 php_value 로 설정이 가능하다.
post_max_size, upload_max_filesize, max_input_time 의 경우 PHP_INI_PERDIR, PHP_INI_SYSTEM 의 가변성을 가지기 때문에 php함수인 ini_set() 혹은 .htaccess 에서 php_value 로 선언할 수 없다.

각 php.ini 설정값의 가변성 여부는 http://php.net/manual/kr/ini.list.php 에서 확인할 수 있다.