Server

Server

Ubuntu 우분투에서 웹 서버 환경 구축하기: Nginx, PHP,

페이지 정보

profile_image
영삼이
0건 83회 25-03-28 17:44

본문

우분투에서 웹 서버 환경 구축하기: Nginx, PHP, MariaDB 설치 가이드

안녕하세요! 이 가이드에서는 우분투 서버에 Nginx 웹 서버, PHP, 그리고 MariaDB 데이터베이스를 설치하고 구성하는 방법을 단계별로 안내해 드리겠습니다. 이 조합은 흔히 LEMP 스택(Linux, Nginx, MySQL/MariaDB, PHP)이라고 불리며, 웹 애플리케이션을 호스팅하기 위한 강력한 환경을 제공합니다.

목차

  1. 우분투 시스템 업데이트
  2. Nginx 웹 서버 설치
  3. PHP 설치 및 구성
  4. MariaDB 설치 및 보안 설정
  5. PHP와 Nginx 연동
  6. 웹 사이트 테스트
  7. 추가 설정 및 팁

1. 우분투 시스템 업데이트

먼저 시스템의 패키지 목록을 업데이트하고 설치된 패키지를 최신 버전으로 업그레이드합니다.

[code=bash]

패키지 목록 업데이트

sudo apt update

설치된 패키지 업그레이드

sudo apt upgrade -y [/code]

2. Nginx 웹 서버 설치

Nginx는 가볍고 성능이 좋은 웹 서버로, 많은 동시 연결을 효율적으로 처리할 수 있습니다.

[code=bash]

Nginx 설치

sudo apt install nginx -y

Nginx 서비스 시작

sudo systemctl start nginx

시스템 부팅 시 자동 시작되도록 설정

sudo systemctl enable nginx

Nginx 상태 확인

sudo systemctl status nginx [/code]

Nginx가 성공적으로 설치되었는지 확인하려면 웹 브라우저에서 서버의 IP 주소를 방문해보세요. Nginx 기본 페이지가 표시되어야 합니다.

3. PHP 설치 및 구성

Nginx와 함께 작동하려면 PHP-FPM(FastCGI Process Manager)을 설치해야 합니다.

[code=bash]

PHP 및 필요한 모듈 설치

sudo apt install php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip -y

PHP 버전 확인

php -v [/code]

PHP 설치가 완료되면 PHP 구성 파일을 수정하여 보안을 강화합니다.

[code=bash]

PHP 구성 파일 열기 (버전에 따라 경로가 다를 수 있습니다)

sudo nano /etc/php/8.1/fpm/php.ini [/code]

파일에서 다음 설정을 찾아 수정하세요:

[code=ini] ; 최대 업로드 파일 크기 제한 upload_max_filesize = 20M

; POST 데이터 최대 크기 post_max_size = 20M

; 메모리 제한 memory_limit = 256M

; 커넥션 타임아웃 max_execution_time = 30

; PHP 에러 로깅 (개발 환경에서만 On으로 설정) display_errors = Off error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT error_log = /var/log/php_errors.log [/code]

변경 후 PHP-FPM 서비스를 재시작합니다:

[code=bash] sudo systemctl restart php8.1-fpm [/code]

4. MariaDB 설치 및 보안 설정

MariaDB는 MySQL의 포크로, 호환성이 높으면서도 추가 기능과 개선 사항을 제공합니다.

[code=bash]

MariaDB 설치

sudo apt install mariadb-server mariadb-client -y

MariaDB 서비스 시작

sudo systemctl start mariadb

시스템 부팅 시 자동 시작되도록 설정

sudo systemctl enable mariadb

MariaDB 상태 확인

sudo systemctl status mariadb [/code]

MariaDB 초기 보안 설정을 위해 다음 명령을 실행합니다:

[code=bash] sudo mysql_secure_installation [/code]

이 스크립트는 다음 설정을 묻습니다:

  • root 비밀번호 설정
  • 익명 사용자 제거
  • 원격 root 로그인 비활성화
  • 테스트 데이터베이스 제거
  • 권한 테이블 다시 로드

보안을 위해 모든 질문에 'Y'(예)로 답하는 것이 좋습니다.

데이터베이스 및 사용자 생성

웹 애플리케이션을 위한 데이터베이스와 사용자를 생성합니다:

[code=bash]

MariaDB에 root로 로그인

sudo mysql -u root -p

MariaDB 프롬프트에서 다음 명령 실행

[/code]

[code=sql] -- 새 데이터베이스 생성 CREATE DATABASE mywebsite;

-- 새 사용자 생성 및 권한 부여 CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_secure_password'; GRANT ALL PRIVILEGES ON mywebsite.* TO 'myuser'@'localhost'; FLUSH PRIVILEGES;

-- 변경사항 확인 SHOW GRANTS FOR 'myuser'@'localhost';

-- 종료 EXIT; [/code]

5. PHP와 Nginx 연동

Nginx가 PHP 파일을 처리할 수 있도록 서버 블록을 구성해야 합니다.

[code=bash]

기본 Nginx 구성 파일 수정

sudo nano /etc/nginx/sites-available/default [/code]

다음 구성으로 파일 내용을 대체하세요:

[code=nginx] server { listen 80 default_server; listen [::]:80 default_server;

# 웹 사이트 루트 디렉토리
root /var/www/html;

# 기본 index 파일
index index.php index.html index.htm;

# 서버 이름 (도메인 또는 IP)
server_name _;

location / {
    try_files $uri $uri/ =404;
}

# PHP 파일 처리 설정
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;
}

# .htaccess 파일 접근 거부
location ~ /\.ht {
    deny all;
}

} [/code]

PHP 버전이 다른 경우 fastcgi_pass 경로를 적절히 수정해주세요 (예: php7.4-fpm.sock).

구성을 저장하고 Nginx를 재시작합니다:

[code=bash]

Nginx 구성 테스트

sudo nginx -t

구성이 유효하면 Nginx 재시작

sudo systemctl restart nginx [/code]

6. 웹 사이트 테스트

PHP가 제대로 동작하는지 확인하기 위해 간단한 PHP 정보 파일을 생성합니다:

[code=bash]

PHP 정보 파일 생성

sudo nano /var/www/html/info.php [/code]

다음 내용을 추가합니다:


<?php phpinfo(); ?>


웹 브라우저에서 http://your_server_ip/info.php를 방문하여 PHP 정보 페이지가 표시되는지 확인합니다.

테스트 후에는 보안을 위해 이 파일을 제거하는 것이 좋습니다:

[code=bash] sudo rm /var/www/html/info.php [/code]

7. 추가 설정 및 팁

파일 권한 설정

웹 서버가 파일을 읽고 쓸 수 있도록 적절한 권한을 설정합니다:

[code=bash]

웹 디렉토리 소유권 변경

sudo chown -R www-data:www-data /var/www/html

기본 권한 설정

sudo chmod -R 755 /var/www/html [/code]

방화벽 설정

UFW(Uncomplicated Firewall)를 사용하여 필요한 포트만 열어둡니다:

[code=bash]

UFW 설치

sudo apt install ufw -y

SSH, HTTP, HTTPS 허용

sudo ufw allow ssh sudo ufw allow http sudo ufw allow https

방화벽 활성화

sudo ufw enable

방화벽 상태 확인

sudo ufw status [/code]

SSL/TLS 인증서 설치 (HTTPS)

Let's Encrypt를 사용하여 무료 SSL 인증서를 설치할 수 있습니다:

[code=bash]

Certbot 설치

sudo apt install certbot python3-certbot-nginx -y

인증서 발급 및 Nginx 구성 자동 업데이트

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

인증서 자동 갱신 테스트

sudo certbot renew --dry-run [/code]

결론

이제 우분투 서버에 Nginx, PHP, MariaDB를 성공적으로 설치하고 구성했습니다. 이 환경에서 WordPress, Drupal, Laravel, 또는 기타 PHP 기반 웹 애플리케이션을 호스팅할 수 있습니다.

추가 문의나 문제가 있으면 댓글로 알려주세요. 행복한 웹 개발 되세요!

댓글목록

등록된 댓글이 없습니다.