콘텐츠로 이동

Nginx 설정 가이드

Rocky Linux 운영 서버에서 Nginx 웹 서버를 설치하고
기본 Server Block 구성을 완료하기 위한 가이드임.


1. Nginx 설치

sudo dnf install -y nginx

설치 후 설정 파일 검사 및 서비스 활성화.

sudo nginx -t
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

2. 방화벽 설정

Nginx 웹 서비스 제공을 위해 HTTP/HTTPS 서비스 허용 필요.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

3. 관리 명령어

자주 사용하는 Nginx 서비스 관리 명령어는 다음과 같음.

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl enable nginx
sudo systemctl disable nginx
sudo systemctl status nginx

4. Nginx 파일 및 디렉터리 구조

웹 콘텐츠 경로

/usr/share/nginx/html
  • 기본 웹 콘텐츠 경로.
  • 운영 환경에서는 별도 디렉터리 사용을 권장함.

서버 설정 경로

/etc/nginx
  • Nginx 전체 설정 디렉터리.
/etc/nginx/nginx.conf
  • 전역 설정 파일.
/etc/nginx/conf.d/
  • Server Block 설정 파일 저장 경로.
  • 도메인 또는 프로젝트 단위로 파일 분리 권장함.
  • 예: [ProjectName].conf

로그 파일

/var/log/nginx/access.log
  • 모든 요청 로그 기록.
/var/log/nginx/error.log
  • 오류 로그 기록.

5. Server Block 설정

운영 환경에서는 기본 경로 대신 /var/www/[ProjectName] 사용을 권장함.

5.1 웹 디렉터리 생성

sudo mkdir -p /var/www/[ProjectName]

5.2 index.html 생성

<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Success! Your Nginx server is successfully configured.</h1>
    <p>This is a sample page.</p>
</body>
</html>

5.3 웹 디렉터리 권한 설정

sudo chown -R [User]:[Group] /var/www/[ProjectName]
sudo find /var/www/[ProjectName] -type d -exec chmod 0755 {} \;
sudo find /var/www/[ProjectName] -type f -exec chmod 0644 {} \;

5.4 Server Block 설정 파일 생성

파일 경로:

/etc/nginx/conf.d/[ProjectName].conf

설정 내용:

server {
    listen 80;
    listen [::]:80;

    server_name [ProjectName] www.[ProjectName];

    root /var/www/[ProjectName];
    index index.html index.htm;

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

5.5 설정 파일 검사

sudo nginx -t

5.6 Nginx 재시작

sudo systemctl restart nginx

5.7 SELinux 컨텍스트 설정 (조건부 적용)

SELinux Enforcing 환경에서 Nginx가 특정 디렉터리에 대해

읽기/쓰기 권한필요한 경우 : httpd_sys_rw_content_t ex) uploads 읽기 전용 권한필요한 경우 : httpd_sys_content_t ex) public

만 파일 컨텍스트를 설정함.

⚠ 프로젝트 전체에 부여하지 않음.

확인

sudo semanage fcontext -l | grep /var/www/[ProjectName]
  • 위 목록에서 없으면 -a 있으면 -m

업로드 디렉토리 예시

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/[ProjectName]/uploads(/.*)?"
sudo restorecon -Rv /var/www/[ProjectName]/uploads

정적 파일 읽기 전용 예시

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/[ProjectName]/public(/.*)?"
sudo restorecon -Rv /var/www/[ProjectName]/public

ex)

PROJECT="ProjectName"
PROJECT_ROOT="/var/www/${PROJECT}"
FOLDER="${PROJECT_ROOT}/uploads"
PATTERN="(/.*)?"

sudo semanage fcontext -a -t httpd_sys_rw_content_t "${FOLDER}${PATTERN}" 2>/dev/null || sudo semanage fcontext -m -t httpd_sys_rw_content_t "${FOLDER}${PATTERN}"
sudo restorecon -Rv "${FOLDER}"

sudo semanage fcontext -l | grep "^${FOLDER}(\s|$)"

PROJECT="ProjectName"
PROJECT_ROOT="/var/www/${PROJECT}"
FOLDER="${PROJECT_ROOT}/public"
PATTERN="(/.*)?"

sudo semanage fcontext -a -t httpd_sys_content_t "${FOLDER}${PATTERN}" 2>/dev/null || sudo semanage fcontext -m -t httpd_sys_content_t "${FOLDER}${PATTERN}"
sudo restorecon -Rv "${FOLDER}"

sudo semanage fcontext -l | grep "^${FOLDER}(\s|$)"

chcon 은 영구 설정이 아니므로 운영 표준으로 사용하지 않음.