번개애비의 라이프스톼일
Centos7.x Minimal 에서 Nginx 1.18 + PHP 8.x 설치하기 본문
이전까지 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
끄읏~
'IT' 카테고리의 다른 글
맥에서 한글 자음 모음 분리 될때 윈도우에서 수정하는 방법 (0) | 2021.03.25 |
---|---|
MySQL INDEX(인덱스)를 이용한 성능 최적화 팁 (2) | 2021.02.10 |
Windows 환경에서 MySQL 데이터베이스를 데이터베이스별로 자동으로 백업하기 (0) | 2020.12.30 |
Kimsq 1버전대 파일첨부 오류 수정 [플래시파일업로드 문제점 해결] (6) | 2020.09.11 |
ESP32에서 SCT013를 이용하여 전력을 측정하여 WIFI로 데이터보내기 (0) | 2020.06.05 |