번개애비의 라이프스톼일

Centos7.x Minimal 에서 Nginx 1.18 + PHP 8.x 설치하기 본문

IT

Centos7.x Minimal 에서 Nginx 1.18 + PHP 8.x 설치하기

번개애비 2021. 2. 10. 15:33

이전까지 Go lang으로 DB 인터페이스 서버를 구성하고 php7.x 계열로 Front를 구성했었다.

사실 Front를 php로 사용했다기 보다는 Middle 성향으로 중간에서 Minify나 js 난독화, 통신암호화, 업/다운로드, Front JS만으로 보안해결이 안될때 등등등 수준으로만 사용하고 있다. 변태적인 셋팅이지만 나름 잘 운용중.. ㅎㅎ

이것도 규모가 중간이상이 되는 프로젝트에서나 굉장히 보수적인 트래픽 제어와 최단기 Response를 위해 극단적으로 셋업된 환경에서나 사용했고 요즘 주력은 Go 와 Primitive한 JS를 위주인듯하다.

 

근래에 php8 이 출시되었다고 해서 실서비스에 적용하기 위해 여러가지 테스트를 해본결과,

다행히도 큰 호환성이슈가 없어서 실서비스에 반영하고 있다. (DAU 10,000 급)

 

php8 부터는 JIT이 도입되면서 인터프리티도 아닌 컴파일도 아닌 살짝 애매한 상황이 되는것을 보면,

php도 이제 마지막 발악(?)을 하는듯... ㅎㅎㅎ

 

 

처음 CentOS 7.x Minimal 을 설치한 직후부터 진행하면 된다.

패키지 설치를 하기전 업데이트 먼저 진행해준다.

yum update

 

Minimal 설치버전에서는 ifconfig 명령어를 사용할 수 없으니, net-tools를 설치해준다.

yum install net-tools

 

웹서버의 시간정보는 중요한 기준정보가 되기도 하기 때문에 시간정보를 동기화를 한번 진행해준다.

yum install rdate
rdate -s time.bora.net

 

Nginx RPM을 다운로드받고 적용한다.

이는 nginx를 패키지로 설치하기 위함이다.

wget https://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm
rpm -Uvh nginx-1.18.0-1.el7.ngx.x86_64.rpm

 

Repository정보를 수정한다.

vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

:wq

 

Nginx 작동을 위한 관련 라이브러리를 설치한다.

yum -y install pcre-devel libxml2-devel zlib zlib-devel openssl openssl-devel gcc g++ cpp gcc-c++ libxslt libxslt-devel php-gd libgd-dev gd gd-devel perl perl-ExtUtils-Embed geoip-devel

 

Nginx를 설치한다.

yum install nginx

 

방화벽을 열어준다. (80, 443포트)

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

 

Nginx 서비스를 실행하고 부팅시 자동실행될 수 있도록 설정한다.

service nginx start
sudo systemctl enable nginx

 

 

서버아이피로 접속하여 아래화면이 나오는지 확인하보고, 아래화면이 나타나면 Nginx설치가 완료된 것이다.

Nginx 버전은 아래 명령어로 확인할 수 있다.

nginx -v

 

 

이제 PHP8을 설치하기 위해 yum 저장소를 추가한다.

epel 저장소를 활용하기 위해 다음의 명령어를 실행한다.

sudo yum -y install yum-utils
yum -y install epel-release
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

 

현재 yum 저장소에 지정된 php 버전을 알아낸뒤, 해당 버전을 비활성화 한다.

yum info php-fpm | grep Version
Version     : 5.4.45

yum-config-manager --disable remi-php54

 

 

다른 글들에서는 php-80 이나 php-8.0 이런식으로 설치하고 운용하는데 이전 php버전대들과 마찬가지로 사용하기 위해 yum 설치정보를 수정해야줘야 한다. 

(나중에 service php80-fpm restart 이런거 안할려면 미리 셋팅하는게 좋다.)

sudo yum-config-manager --enable remi-php80
or
sudo yum-config-manager --enable remi-php81

 

php와 기초적인 운영에 필요한 라이브러리들을 설치한다.

yum install php php-cli php-fpm php-mysqlnd php-mysql php-mysqli php-devel php-zip php-gd php-curl php-xml php-json php-intl php-mbstring php-mcrypt php-posix php-shmop php-soap php-sysvmsg php-sysvsem php-sysvshm php-xmlrpc php-opcache

 

 

부팅시 자동으로 php-fpm이 실행되도록 등록한다.

service php-fpm start
sudo systemctl enable php-fpm

 

 

Nginx와 php간 연동을 위해 셋팅을 진행한다.

vi /etc/php-fpm.d/www.conf

;user = apache //변경전
user = nginx

;group = apache//변경전
group = nginx

;listen.owner = nobody //변경전
listen.owner = nginx
 
;listen.group = nobody //변경전
listen.owner = nginx

;listen.mode = 0660 //변경전
listen.mode = 0660

;listen = 127.0.0.1:9000 //변경전
listen = /var/run/php-fpm/php-fpm.sock

;pm.max_children = 50 //변경전
pm.max_children = 130

;pm.start_servers = 5 //변경전
pm.start_servers = 30

;pm.min_spare_servers = 5 //변경전
pm.min_spare_servers = 30

pm.max_spare_servers = 35 //변경전
pm.max_spare_servers = 100

;pm.max_requests = 500 //변경전
pm.max_requests = 500

:wq

 

 

Nginx 서버 설정을 진행한다.

(이 설정은 주로 내가 자주 사용하는 Nginx 기본 셋팅이다.)

vi /etc/nginx/nginx.conf

user  nginx;
worker_processes  32;

error_log  /var/log/nginx/error.log crit;
pid        /var/run/nginx.pid;

events {
    worker_connections  256;
    use epoll;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server_tokens off;
    client_body_buffer_size 128k;
    client_header_buffer_size 1m;
    client_max_body_size 2000m;
    large_client_header_buffers 8 8k;
    output_buffers 1 32k;
    postpone_output 1460;
    client_header_timeout 3m;
    client_body_timeout   3m;
    send_timeout          3m;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log off;
    #access_log  /var/log/nginx/access.log  main;
    #open_file_cache max=1000 inactive=20s;
    #open_file_cache_valid 30s;
    #open_file_cache_min_uses 5;
    #open_file_cache_errors off;
    server_names_hash_bucket_size 64;
    server_names_hash_max_size 2048;
    keepalive_timeout 10;
    #keepalive_requests 10000;
    sendfile        off;
    tcp_nopush     off;
    tcp_nodelay    off;
    types_hash_max_size 2048;

    proxy_cache_path /home/nginx_cache/cache_file keys_zone=cache:10m levels=1:2 inactive=600s max_size=1g;

    gzip  on;
    gzip_buffers 16 8k;
    gzip_comp_level 6;
    gzip_http_version 1.0;
    gzip_min_length 1;
    gzip_types application/x-javascript text/css application/javascript text/javascript text/plain application/json application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/xml font/eot font/opentype font/otf image/svg+xml image/vnd.microsoft.icon;

    include /etc/nginx/conf.d/*.conf;
}


:wq

 

홈 디렉토리를 변경하기위해 기존 Nginx localhost 경로를 수정하고 권한을 부여한다.

cp -r /usr/share/nginx/html /home/localhost
chmod -R 755 /home/localhost
chown -R nginx:nginx /home/localhost
chcon -R -t httpd_sys_content_t /home/localhost/

 

Nginx localhost 경로를 서버설정에 반영하고 php-fpm 을 연동한다.

vi /etc/nginx/conf.d/default.conf

server {
    listen       80 default;
    server_name  _;
    add_header X-Frame-Options "SAMEORIGIN";
    charset utf-8;
    location / {
        root   /home/localhost;
        index  index.html index.htm index.php;
    }
    #error_page  404              /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/localhost$fastcgi_script_name;
        include        fastcgi_params;
    }
    location ~ /\.ht {
        deny  all;
    }
}

:wq

 

php8에 신규로 도입된 JIT을 활성화한다.

vi /etc/php-zts.d/10-opcache.ini

opcache.enable=1
opcache.jit_buffer_size=100M
opcache.jit=tracing

:wq

 

 

마지막으로 Nginx와 php-fpm 을 재시작해준다.

service nginx restart
service php-fpm restart

 

 

끄읏~

Comments