📚 PHP 고급 - 8주차: 배포 및 운영 기초 (Linux 서버) - 03 웹 서버 (Nginx/Apache) 설정

2025. 9. 29. 10:43프로그램/PHP 고급

웹 서버의 역할과 PHP-FPM 연동

📚 PHP 고급 - 8주차: 배포 및 운영 기초 (Linux 서버) - 03 웹 서버 (Nginx/Apache) 설정

 

#웹_서버 (Web Server)는 클라이언트(브라우저)의 HTTP 요청을 받아들이고, 처리한 후 응답을 돌려주는 핵심 컴포넌트입니다. 현대의 PHP 환경에서 웹 서버는 PHP 코드를 직접 실행하지 않고, #PHP-FPM(FastCGI Process Manager)에 요청을 위임합니다. 웹 서버는 정적인 파일(HTML, CSS, 이미지)을 빠르게 처리하고, 동적인 PHP 요청만 PHP-FPM에 전달함으로써 #성능 을 극대화합니다. 🔗


1. Nginx 설정 (LEMP 스택)

#Nginx 는 가벼운 아키텍처와 높은 동시성 처리 능력으로 인해 현대의 #LEMP (Linux, Nginx, MySQL, PHP) 스택에서 가장 선호되는 웹 서버입니다.

Nginx 설치 (Ubuntu 기준)

Bash
 
sudo apt update
sudo apt install nginx

기본 설정 파일 (/etc/nginx/sites-available/default)

Nginx 설정의 핵심은 location 블록을 사용하여 요청을 분리하는 것입니다.

Nginx
 
server {
    listen 80;
    server_name your_domain.com; # 도메인 이름 또는 IP 주소

    root /var/www/html/my-project/public; # 프로젝트의 웹 루트 디렉터리

    index index.php index.html;

    # 1. 정적 파일 처리: 파일이 존재하면 직접 서빙
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 2. PHP 요청 처리: PHP-FPM으로 전달
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # PHP-FPM 소켓 또는 TCP 주소로 요청 전달
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; 
        # 또는 fastcgi_pass 127.0.0.1:9000;
    }

    # 3. .htaccess와 같은 숨김 파일 접근 차단
    location ~ /\. {
        deny all;
    }
}
  • root: PHP 애플리케이션의 #웹_루트_디렉터리 를 정확히 지정해야 합니다. (예: Laravel, Symfony 등은 보통 public 폴더가 루트입니다.)
  • location ~ \.php$: .php로 끝나는 모든 요청을 PHP-FPM으로 전달합니다.
  • fastcgi_pass: PHP-FPM의 #소켓 경로 또는 IP 주소와 포트(기본 9000번)를 지정하여 연동합니다.

2. Apache 설정 (LAMP 스택)

#Apache 는 모듈 기반의 유연성과 광범위한 호환성 덕분에 여전히 널리 사용됩니다. PHP-FPM과 연동하기 위해서는 mod_proxy_fcgi 모듈을 사용합니다.

Apache 설치 (Ubuntu 기준)

Bash
 
sudo apt update
sudo apt install apache2

PHP-FPM 연동 모듈 활성화

Bash
 
sudo a2enmod proxy proxy_fcgi

가상 호스트 설정 파일 (/etc/apache2/sites-available/000-default.conf)

ProxyPassMatch 지시자를 사용하여 PHP 요청을 PHP-FPM 소켓으로 전달합니다.

Apache
 
<VirtualHost *:80>
    ServerName your_domain.com
    DocumentRoot /var/www/html/my-project/public

    <Directory /var/www/html/my-project/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # PHP-FPM 연동 설정
    # .php 파일에 대한 요청을 PHP-FPM 소켓으로 전달
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"
    </FilesMatch>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • AllowOverride All: .htaccess 파일 사용을 허용합니다.
  • SetHandler: PHP-FPM 소켓 경로를 지정하여 요청을 위임합니다.

3. 웹 서버 서비스 관리

어떤 웹 서버를 사용하든, 설정 파일을 변경한 후에는 반드시 서비스를 **재시작(Restart)**해야 변경 내용이 적용됩니다.

서비스 관리 명령어 (systemd)

Bash
 
# Nginx의 경우
sudo systemctl restart nginx
sudo systemctl status nginx

# Apache의 경우
sudo systemctl restart apache2
sudo systemctl status apache2

# PHP-FPM의 경우 (웹 서버와 별개로 관리)
sudo systemctl restart php8.1-fpm

마치며

안정적인 #PHP_운영 은 웹 서버와 PHP-FPM의 연동 설정에 달려 있습니다. Nginx는 성능과 효율성 면에서 이점을 제공하며, Apache는 모듈 사용의 유연성을 제공합니다. 사용 환경에 맞는 웹 서버를 선택하고, fastcgi_pass나 ProxyPassMatch를 통해 PHP-FPM과의 소켓/TCP 연동을 정확히 설정하는 것이 고성능 서비스 구축의 핵심입니다. ⚙️

 

 

빠른속도, 간편한사용, 장애없는VPN, 사용이력없는 깨끗한 아이피

https://xn--299ao67b9qbmsf04c.net/

 

VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com