나만의 웹 사이트나 블로그를 운영하려면 웹 서버가 있어야 한다.
웹 서버는 대개 Apache(아파치)Nginx(엔진엑스)로 나뉜다.
물론 아파치도 많이 유명하지만, Nginx는 가볍고 빠른 성능으로 유명하다.
또한 아파치와 엔진엑스 모두 전 세계적으로 많은 웹사이트에서 사용되고 있다.
이 글에서는 Nginx를 사용하여 쉽고 빠르게 나만의 웹 서버를 구축하려고 한다.

리눅스에서 Nginx 설치하기

패키지 설치 명령어를 통해 Nginx 웹 서버를 설치해보자.

sudo apt install nginx
ShellScript

Nginx 서버 구성하기

설정 파일 디렉토리 설명

엔진엑스는 /etc/nginx/ 디렉토리에 설정 파일을 저장한다.
기본 설정 파일은 /etc/nginx/nginx.conf 이며,
가상 호스트 설정은 /etc/nginx/sites-available/ 디렉토리에 위치해 있다.

PHP-FRM 버전 확인 (PHP 기반일 경우, 워드프레스의 경우 필수)

Nginx가 PHP-FRM(프록시)를 통해 PHP 요청을 처리하기 위해서 PHP 버전을 확인해야 한다.
아래의 명령어를 통해 PHP-FPM 파일의 버전을 확인할 수 있다.

cd /var/run/php
ls
ShellScript
현재 실행중인 php의 버전을 확인하는 예시 이미지

포스팅에서는 ‘php8.1-fpm.sock’ 파일이 확인되었다.
버전별로 파일 이름이 다를 수 있다.
반드시 확인 후 아래의 Nginx 구성 설정 파일에 맞게 수정해주어야 한다.

Nginx 구성

이 글에서는 PHP 기반의 워드프레스를 호스팅하려 한다.
Nginx에서 워드프레스를 호스팅할 수 있도록 설정 파일을 만들어준다.
위에서 언급하였지만, 가상 호스팅 설정은 /etc/nginx/sites-available/ 디렉토리이다.

# Nginx의 wordpress 설정 파일 만들기
sudo nano /etc/nginx/sites-available/wordpress
ShellScript

다음 내용을 파일에 추가한다.
내용은 자신의 환경에 맞게 수정해주어야 한다.

server {
    listen 80;
    server_name server_name; # 자신의 도메인 입력
    root your website root directory; # 웹 사이트의 루트 디렉토리

    index index.php index.html index.htm; # 기본 인덱스 파일 설정

    location / { # 루트 URL에 대한 요청 처리
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ { # .php로 끝나는 URL에 대한 요청 처리
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/phpx.x-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht { # .ht로 시작하는 파일에 대한 요청 처리
        deny all;
    }
}

##### 예시 #####

#server {
#    listen 80;
#    server_name eunbyeol.co.kr; # 자신의 도메인 입력
#    root /var/www/html/wordpress; # 웹 사이트의 루트 디렉토리
#
#    index index.php index.html index.htm; # 기본 인덱스 파일 설정
#
#    location / { # 루트 URL에 대한 요청 처리
#        try_files $uri $uri/ /index.php?$args;
#    }

#    location ~ \.php$ { # .php로 끝나는 URL에 대한 요청 처리
#        include snippets/fastcgi-php.conf;
#        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
#        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#        include fastcgi_params;
#    }

#    location ~ /\.ht { # .ht로 시작하는 파일에 대한 요청 처리
#        deny all;
#    }
#}
ShellScript

환경에 맞게 변경해야 할 부분

  • server_name : 자신의 도메인을 입력한다.
  • root : 자신의 웹 사이트 파일이 위치한 루트(최상위) 디렉토리를 입력한다.
  • fastcgi_pass : 위에서 확인한 PHP-FPM의 버전 정보가 포함되어 있던 파일의 이름으로(예: php8.1-fpm.sock) 입력한다.

추가한 내용을 저장한다.

  1. Ctrl + X (컨트롤+X)를 누르고 ‘Y’를 눌러 작성한 내용을 저장한다.
  2. 엔터를 눌러 파일명 변경 없이 파일 쓰기 작업을 마무리한다.

Nginx PHP FPM 구성 설명

listen 80;
server_name eunbyeol.co.kr;
root /var/www/html/wordpress;

index index.php index.html index.htm;
ShellScript

기본 설정

  • listen 80
    • 웹 서버가 포트 80에서 들어오는 HTTP 요청을 수신하도록 설정
  • server_name eunbyeol.co.kr(예시)
    • 이 서버 블록이 처리할 도메인 이름 지정
  • root /var/www/html/wordpress (예시)
    • 웹사이트의 루트 디렉토리 설정
    • WordPress를 예로 들자면, 파일들이 이 경로에 위치해야 한다.
  • index index.php index.html index.htm
    • 기본 인덱스 파일 지정
    • 요청된 디렉토리에 대한 파일을 찾을 때 우선 순위를 가짐
location / {
    try_files $uri $uri/ /index.php?$args;
}
ShellScript

기본 위치 설정

  • location /
    • 루트 URL ( / )에 대한 요청 처리
  • try_files $uri $uri/ /index.php?$args (예시)
    • $uri 에 해당하는 파일이 있는지 확인하고, 없다면 $uri/ 디렉토리가 있는지 확인
    • 만약 두 경우 모두 해당하지 않으면 /index.php 를 요청하면서 쿼리 스트링( $args )을 함께 전달
      • 즉, 존재하지 않는 페이지에 대한 요청을 index.php 로 전달하여 WordPress의 내부 라우팅 시스템이 이를 처리하게 함
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
ShellScript

PHP 파일 처리

  • location ~ .php$
    • .php 로 끝나는 URL에 대한 요청 처리
  • include snippets/fastcgi-php.conf
    • 일반적으로 PHP 설정에 필요한 기본 FastCGI 설정 포함
  • fastcgi_pass unix:/var/run/php/php8.1-fpm.sock (예시)
    • PHP-FPM 소켓 경로를 지정합니다.
    • PHP-FPM이 이 소켓을 통해 Nginx와 통신
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;:
    • FastCGI 서버에 전달되는 SCRIPT_FILENAME 매개변수 설정
    • 이는 실제 PHP 파일의 경로를 가리킴
      • $document_rootroot 디렉토리 (예: /var/www/html/wordpress )
      • $fastcgi_script_name 은 요청된 PHP 파일의 경로
  • include fastcgi_params
    • FastCGI 매개변수 포함
    • 일반적으로 FastCGI 서버와의 통신에 필요한 추가 설정이 포함되어 있음
location ~ /\.ht {
    deny all;
}
ShellScript

.ht 파일 접근 차단

  • location ~ /.ht
    • .ht 로 시작하는 파일에 대한 요청 처리
  • deny all
    • 모든 접근 차단
    • 이는 .htaccess 파일에 대한 접근을 방지하여 보안을 강화하기 위함

요약

이 설정은 eunbyeol.co.kr 도메인에서 WordPress 사이트를 실행할 수 있도록 Nginx를 구성하는 예제이다.
HTTP 요청을 처리하고, PHP 파일을 PHP-FPM을 통해 실행하며,
.ht 로 시작하는 파일에 대한 접근을 차단하여 보안을 강화하는 구성이다.

웹 사이트 활성화 하기

이번에는 Nginx가 웹 사이트를 사용할 수 있도록 활성화해보자.

sudo ln -s /etc/nginx/sites-available/생성한 설정 파일 이름 /etc/nginx/sites-enabled/

# 예시
# sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
ShellScript

ln -s 명령어는 심볼릭 링크(소프트 링크)를 생성하는 기능이다.
링크 위치를 /etc/nginx/sites-enabled/ 로 지정함으로써,
Nginx에서 활성화된 사이트 설정을 링크를 통해 어떤 사이트의 설정을 로드할지 지정해준다.
ln -s 이 후 첫 번째 경로에는 가상 호스팅 설정에서 자신이 지정한 설정 파일 이름으로 변경해주자.

변경 사항 적용을 위한 Nginx 재시작하기

설정 파일을 수정한 후에는 Nginx를 재시작하여 변경 사항을 적용해야 한다.

sudo systemctl restart nginx
ShellScript

웹 서버 구축 확인

이제 웹 브라우저에서 내가 설정한 도메인으로 접속하면,
Nginx에서 설정한 기본 루트 디렉토리(예: /var/www/html/wordpress )에 저장된 웹페이지가 나타난다.
웹 사이트가 구축되었다. 이제 자유롭게 운영해보자!

Similar Posts

댓글 남기기