728x90
우분투에서 NGINX와 PHP-FPM을 설치하고 연동하는 방법
테스트 환경
구분 | 호스트 이름 | 아이피 주소 | 비고 |
NGINX | jnode1 | 192.168.0.122 | |
PHP-FPM | jnode2 | 192.168.0.112 |
NGINX 서버 설정
NGINX 설치
sudo apt-get update
sudo apt-get install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring apt-transport-https
curl -fsSL https://nginx.org/keys/nginx_signing.key \
| gpg --dearmor | sudo tee /etc/apt/keyrings/nginx_signing.asc >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/nginx_signing.asc] \
http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt-get update
sudo apt-get install -y nginx
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_$(date +"%Y%m%d-%H%M%S")
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf_$(date +"%Y%m%d-%H%M%S")
NGINX 설정
nginx.conf 편집
sudo vim /etc/nginx/nginx.conf
더보기
---
sudo tee /etc/nginx/nginx.conf > /dev/null << 'EOF'
user www-data www-data;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
EOF
---
default.conf 편집
sudo vim /etc/nginx/conf.d/default.conf
더보기
---
sudo tee /etc/nginx/conf.d/default.conf > /dev/null << 'EOF'
server {
listen 80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.php index.html index.htm;
charset utf-8;
access_log /var/log/nginx/default.access.log main;
error_log /var/log/nginx/default.error.log;
location / {
try_files $uri $uri/ =404;
}
#location ~ \.php$ {
location ~ \.(php|html|htm)$ {
root /usr/share/nginx/html;
fastcgi_index index.php;
fastcgi_pass 192.168.0.112:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
access_log /var/log/nginx/nginx_php.access.log;
error_log /var/log/nginx/nginx_php.error.log;
}
location ~ /\.ht {
deny all;
}
location ~ ^/(nginx_status)$ {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 192.168.0.0/24;
deny all;
}
location ~ ^/(status|ping)$ {
fastcgi_pass 192.168.0.112:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
access_log off;
allow 127.0.0.1;
allow 192.168.0.0/24;
deny all;
}
}
EOF
---
NGINX 설정 테스트
sudo nginx -t
NGINX 재시작
sudo systemctl restart nginx
NGINX 서비스 상태 확인
sudo systemctl status nginx
NGINX 상태 페이지 호출
curl http://localhost/nginx_status
728x90
PHP-FPM 서버 설정
PHP-FPM 설치
export PHP_VERSION="8.3"
sudo apt-get update
sudo apt-get install -y zlib1g-dev software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php${PHP_VERSION}-fpm php${PHP_VERSION}-cli \
php${PHP_VERSION}-common php${PHP_VERSION}-dev
sudo apt-get install -y php-pear php${PHP_VERSION}-gd php${PHP_VERSION}-xml \
php${PHP_VERSION}-curl php${PHP_VERSION}-igbinary php${PHP_VERSION}-zip
sudo cp /etc/php/${PHP_VERSION}/fpm/php-fpm.conf \
/etc/php/${PHP_VERSION}/fpm/php-fpm.conf_$(date +"%Y%m%d-%H%M%S")
sudo cp /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf \
/etc/php/${PHP_VERSION}/fpm/pool.d/www.conf_$(date +"%Y%m%d-%H%M%S")
sudo mkdir -p /var/log/php-fpm
PHP-FPM 설정 파일
php-fpm.conf 편집
sudo vim /etc/php/${PHP_VERSION}/fpm/php-fpm.conf
더보기
---
sudo tee /etc/php/${PHP_VERSION}/fpm/php-fpm.conf > /dev/null << EOF
include = /etc/php/${PHP_VERSION}/fpm/pool.d/*.conf
[global]
pid = /run/php/php-fpm.pid
error_log = /var/log/php-fpm/php-fpm.log
daemonize = yes
EOF
---
www.conf 편집
sudo vim /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf
더보기
---
sudo tee /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf > /dev/null << 'EOF'
[www]
; 사용자와 그룹 설정
user = www-data
group = www-data
; 소켓과 권한 설정
listen = 0.0.0.0:9000
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
;listen.allowed_clients = 127.0.0.1
; 프로세스 관리 설정
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
; Health check 경로 설정
ping.path = /ping
pm.status_path = /status
; 요청 종료 및 슬로우 로그 설정
request_terminate_timeout = 30
request_slowlog_timeout = 10
slowlog = /var/log/php-fpm/www-slow.log
; 액세스 로그 설정
access.log = /var/log/php-fpm/www-access.log
access.format = "[%t] %m %{REQUEST_SCHEME}e://%{HTTP_HOST}e%{REQUEST_URI}e %f pid:%p TIME:%ds MEM:%{mega}Mmb CPU:%C%% status:%s {%{REMOTE_ADDR}e|%{HTTP_USER_AGENT}e}"
; 에러 로그 및 로그 기록 활성화 설정
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
EOF
---
phpinfo() 파일 생성
sudo mkdir -p /usr/share/nginx/html
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/phpinfo.php
nginx 및 php-fpm 정보 페이지
sudo vim /usr/share/nginx/html/index.php
더보기
---
sudo tee /usr/share/nginx/html/index.php > /dev/null << 'EOF'
<?php
// NGINX 정보
$nginx_ip = $_SERVER['SERVER_ADDR'];
$nginx_root = $_SERVER['DOCUMENT_ROOT'];
// PHP-FPM 정보
$php_fpm_ip = gethostbyname(gethostname());
$php_fpm_version = phpversion();
$php_fpm_root = realpath(dirname(__FILE__));
// PHP-FPM 모듈 정보
ob_start();
phpinfo(INFO_MODULES);
$php_fpm_modules = ob_get_clean();
// 출력
echo "<h1>Server Information</h1>";
echo "<h2>NGINX Information</h2>";
echo "<p><strong>- NGINX IP Address:</strong> {$nginx_ip}</p>";
echo "<p><strong>- NGINX Root Directory:</strong> {$nginx_root}</p>";
echo "<h2>PHP-FPM Information</h2>";
echo "<p><strong>- PHP-FPM IP Address:</strong> {$php_fpm_ip}</p>";
echo "<p><strong>- PHP-FPM Version:</strong> {$php_fpm_version}</p>";
echo "<p><strong>- PHP-FPM Root Directory:</strong> {$php_fpm_root}</p>";
echo "<h2>PHP-FPM Modules</h2>";
echo "<pre>{$php_fpm_modules}</pre>";
?>
EOF
---
PHP-FPM 권한 설정(파일 권한 설정)
sudo chown -R www-data:www-data /usr/share/nginx/html
sudo chmod -R 755 /usr/share/nginx/html
PHP_FPM 설정 테스트
sudo php-fpm${PHP_VERSION} -t
PHP-FPM 서비스 재시작
sudo systemctl restart php${PHP_VERSION}-fpm
PHP-FPM 서비스 상태 확인
sudo systemctl status php${PHP_VERSION}-fpm
FastCGI 서버의 IP와 포트 확인
sudo netstat -plnt | grep 9000
PHP-FPM 상태 페이지 호출
curl http://localhost/status
NGINX, PHP-FPM 삭제
export PHP_VERSION="8.3"
sudo tee remove_package.sh > /dev/null << 'EOF'
#!/bin/bash
sudo apt purge -y nginx
sudo rm -rf /etc/nginx /var/log/nginx /usr/share/nginx
sudo apt purge -y php${PHP_VERSION}-fpm php${PHP_VERSION}-common php${PHP_VERSION}-cli php${PHP_VERSION}-* php-*
sudo rm -rf /etc/php/${PHP_VERSION} /var/log/php-fpm /usr/share/nginx
sudo apt autoremove -y
sudo apt autoclean
EOF
bash remove_package.sh
728x90
'리눅스' 카테고리의 다른 글
[draft] ss 명령어 (0) | 2024.10.06 |
---|---|
[draft] CentOS 7의 EOL 문제로 인해 발생하는 패키지 설치 오류를 해결하는 방법 (0) | 2024.10.05 |
[draft] 우분투에서 로컬 파일 시스템을 백엔드로 사용하는 JuiceFS를 구성하는 방법 (2) | 2024.09.26 |
[draft] fuser 명령어 (0) | 2024.09.20 |
[draft] 우분투에서 Office 365를 통한 Postfix 릴레이를 설정하는 방법 (0) | 2024.09.20 |