우분투 24.04 LTS Ningx+PHP+MariaDB 설치
✅ 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