리눅스

우분투 24.04 LTS Ningx+PHP+MariaDB 설치

greathuman 2025. 6. 27. 10:11

✅ 1. 시스템 업데이트

sudo apt update && sudo apt upgrade -y

업데이트중 문답이 나올 수 있는데 보안설정이나 SSH 설정을 손댄 적 있다면

keep the local version currently installed 선택(sshd_config 등 현재 설정 유지)

 

✅ 2. Nginx 설치

sudo apt install nginx -y

 

서비스 시작 및 부팅 시 자동 시작 설정:

sudo systemctl enable --now nginx

 

Nginx 서버 버전 숨기기

sudo vi /etc/nginx/nginx.conf


#server_tokens off; 추가

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;
    ...
}

sudo systemctl restart nginx

 

 

✅ 3. PHP 8.4 설치

 

Ubuntu 기본 저장소에는 PHP 8.4가 아직 없을 수 있으므로 ondrej/php PPA를 이용해야 함:

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

 

PHP 8.4 설치:

sudo apt install php8.4 php8.4-fpm php8.4-mysql php8.4-cli php8.4-curl php8.4-mbstring php8.4-xml php8.4-zip php8.4-bcmath -y

 

php-fpm 상태 확인:

sudo systemctl status php8.4-fpm

 

부팅 시 자동 시작 설정:

sudo systemctl enable php8.4-fpm

 

PHP 버전 숨기기 (X-Powered-By 제거)

sudo vi /etc/php/8.4/fpm/php.ini

#아래 항목 찾아서 Off로 수정
expose_php = Off

sudo systemctl restart php8.4-fpm

 

 

✅ 4. MariaDB 11.4 LTS 설치

Ubuntu 기본 저장소에는 아직 MariaDB 11.4가 없으므로 MariaDB 공식 저장소를 이용해야 함.

1) MariaDB 저장소 설정

sudo apt install curl gnupg -y

curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=11.4

 

2) 설치

sudo apt update
sudo apt install mariadb-server mariadb-client -y

 

서비스 시작 및 자동 시작:

sudo systemctl enable --now mariadb

 

보안 설정:

sudo mysql_secure_installation

(루트 비밀번호 설정, 익명 사용자 삭제, 테스트 DB 삭제 등 진행)

 

보안설정시 아래와 같은 질문 나올 수 있음

"Switch to unix_socket authentication [Y/n]"

  • Y (yes): 루트 로그인 시 비밀번호 대신 리눅스 시스템 사용자 인증(unix_socket) 을 사용하게 함
    → 예: sudo mysql은 가능하지만 mysql -u root -p는 안 됨
  • n (no): 루트 계정은 비밀번호로 인증
    → mysql -u root -p로 접속 가능

"Reload privilege tables now? [Y/n]"
→ 지금까지 설정한 사용자 권한 변경사항들을 즉시 적용할까요? Y

 

 

✅ 5. Nginx + PHP-FPM 연동 설정

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    index index.php index.html;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

 

설정 테스트 후 재시작:

sudo nginx -t
sudo systemctl restart nginx

 

✅ 6. MariaDB 접속 테스트

sudo mysql -u root -p

 

 

✅ 7. 방화벽 설정

UFW 방화벽 열기 (필요시): 안전하게 진행하려면?

 

1️⃣ SSH 허용

sudo ufw allow OpenSSH

또는 직접 포트 번호로:

sudo ufw allow 22/tcp

 

2️⃣ UFW 활성화

sudo ufw enable

"Command may disrupt existing ssh connections. Proceed with operation (y|n)?" 

명령어를 실행하면 기본적으로 모든 포트를 차단하고, 열어둔 포트만 허용하게 되기 때문에, SSH(포트 22)가 막혀서 현재 접속 중인 연결이 끊길 수 있다는 경고
미리 ssh를 허용했다면 y

sudo ufw allow 'Nginx Full'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from 111.111.111.111 to any port 3306 proto tcp #특정 IP만 접속허용

 

✅ 상태 확인

sudo ufw status

비활성화 상태는 ->  Status: inactive

 

✅ 8. MariaDB에 계정 생성

CREATE DATABASE DB명;
CREATE USER '계정명'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON DB명.* TO '계정명'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

 

✅ MariaDB 원격 접속 허용 설정

 

MariaDB 설정 파일 열기:

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

 

값 변경

bind-address = 0.0.0.0  #기본값 127.0.0.1

 

이는 모든 외부 IP에서 MariaDB 접속 허용이라는 의미. (보안상 방화벽 등으로 제한하는 것이 좋음)

 

재시작

sudo systemctl restart mariadb

 

 

✅ SFTP 설정

 

1. 사용자 testuser 생성

sudo adduser testuser

 

2. 웹사이트 디렉토리 생성

sudo mkdir -p /home/testuser/www
sudo chown -R testuser:testuser /home/testuser/www

 

3. SFTP 전용 접속 설정

sshd_config 수정

sudo nano /etc/ssh/sshd_config

 

맨 아래에 다음 추가:

Match User testuser
	ChrootDirectory /home/testuser
	ForceCommand internal-sftp
	AllowTCPForwarding no
	X11Forwarding no

 

4. 디렉토리 권한 설정

sudo chown root:root /home/testuser
sudo chmod 755 /home/testuser

# 웹 디렉토리는 testuser가 소유해야 하므로 다시 설정
sudo chown -R testuser:testuser /home/testuser/www

 

5. SSH 재시작

sudo systemctl restart ssh