ubuntu에서 nginx사용하기

Ubuntu에서 웹 서버를 운영하려면 여러 가지 선택지가 있지만, 그중에서도 Nginx는 가볍고 빠른 성능 덕분에 많이 사용된다. 개인적으로도 필요할 때마다 설정 방법을 찾아보곤 하는데, 매번 검색하는 것보다 한 번 정리해 두면 두고두고 참고하기 좋을 것 같아 이 글을 작성하게 되었다.

Nginx 설치 및 기본 실행

패키지 목록 업데이트 및 설치

sudo apt update && sudo apt install nginx -y

nginx 설치확인

nginx -v

Nginx 서비스 실행 및 관리

서비스 시작/중지/재시작

sudo systemctl start nginx  
sudo systemctl stop nginx  
sudo systemctl restart nginx

부팅 시 자동 실행 설정

sudo systemctl enable nginx  

방화벽 설정 UFW(Uncomplicated Firewall) 사용

UFW(Uncomplicated Firewall)는 Ubuntu 및 Debian 기반 시스템에서 제공되는 방화벽 관리 도구

방화벽 설정 목록 보기

sudo ufw app list

Nginx Full: HTTP와 HTTPS를 모두 허용.
Nginx HTTP: HTTP 트래픽만 허용.
Nginx HTTPS: HTTPS 트래픽만 허용.
OpenSSH: SSH 원격 접속 허용.

특정 포트 허용하기

sudo ufw allow <포트번호>
# sudo ufw allow 8080

특정 포트를 특정 프로토콜만 허용하기

sudo ufw allow <포트번호>/<프로토콜>
# sudo ufw allow 3306/tcp
# sudo ufw allow 53/udp

특정 IP에서 특정 포트로 접근 허용하기

sudo ufw allow from <IP주소> to any port <포트번호>

192.168.1.100에서만 22번(SSH) 포트 접근 허용

sudo ufw allow from 192.168.1.100 to any port 22

특정 대역대(IP Range)에서 특정 포트 허용하기

sudo ufw allow from <IP대역> to any port <포트번호>

192.168.1.0/24 대역에서만 3306 포트 허용

sudo ufw allow from 192.168.1.0/24 to any port 3306

설정 적용 및 확인

방화벽 규칙 적용

sudo ufw reload

현재 허용된 포트 및 규칙 확인

sudo ufw status

nginx 방화벽 허용

sudo ufw allow 'Nginx Full'

활성이 아니라면 아래 명령어 사용

sudo ufw enable

불필요하게 방화벽 규칙이 추가되었을 때 제거 방법

sudo ufw status numbered

위 명령어를 사용하면 번호가 나옴

sudo ufw delete [번호]

nginx 상태 확인

systemctl status nginx

nginx 기본 설정 경로 및 설정 파일 찾기

운영 체제 기본 경로
Ubuntu/Debian: /etc/nginx/nginx.conf
CentOS/Red Hat: /etc/nginx/nginx.conf
macOS (Homebrew): /usr/local/etc/nginx/nginx.conf
Custom Build: /usr/local/nginx/conf/nginx.conf

nginx 찾기 명령어

sudo find / -name "nginx.conf"

Nginx 설정 파일의 문법 및 구문 오류를 검사하는 명령어

sudo nginx -t

nginx 서버 블록 작성

Nginx 서버 블록은 Nginx 웹 서버에서 도메인 및 요청 처리 방식을 정의하는 설정 단위. 이를 통해 서로 다른 도메인이나 서브도메인에 대해 별도의 설정을 적용

Ubuntu 및 Debian: /etc/nginx/sites-available/
CentOS 및 RHEL: /etc/nginx/conf.d/ (기본적으로 이 경로에서 개별 설정 파일을 읽음)
macOS (Homebrew): /usr/local/etc/nginx/conf.d/
Windows: 설치 디렉토리\conf.d\

파일 생성 및 작성

sudo vi /etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com;

    root /var/www/example;
    index index.html;

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

server: Nginx에서 하나의 서버 블록(Server Block)을 정의

listen: Nginx가 요청을 수신할 포트를 정의

  • 브라우저에서 http://example.com 요청이 들어오면 이 블록이 요청을 처리

server_name: 이 서버 블록이 처리할 도메인 이름을 지정합니다.

  • example.com으로 요청된 트래픽만 이 서버 블록이 처리합니다.
  • 와일드카드(*.example.com)나 정규식으로 여러 도메인을 처리할 수도 있습니다.
  • 모든 도메인 _
  • 로컬 localhost

root: 요청된 정적 파일을 제공할 웹 루트 디렉토리를 설정합니다.

  • 예: http://example.com/index.html 요청이 들어오면 /var/www/example/index.html 파일을 반환합니다.

index: 기본적으로 반환할 인덱스 파일을 지정합니다.

location: 요청된 URL 경로(여기서는 /)에 대한 처리 방법을 정의합니다.

  • 슬래시(/)는 루트 경로를 의미하며, 이 블록은 모든 요청에 기본적으로 적용됩니다.

try_files $uri $uri/ =404;: 요청된 파일이나 디렉토리가 존재하는지 확인하고, 없으면 404 오류를 반환합니다.

  • $uri → 사용자가 요청한 경로 (예: /about)
  • $uri/ → 요청한 경로가 디렉터리인지 확인 (예: /about/)
  • =404 → 위의 파일이나 디렉터리가 없으면 404 에러 반환

서버 블록 활성화

심볼릭 링크 설정

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

심볼릭 링크를 잘못 설정할 수도 있는데

sudo nginx -t # 심볼릭 링크 잘못 설정되었으면 failed 메시지 나옴

연결 확인

ls -l /etc/nginx/sites-enabled/

example이 잘못된 것을 확인할 수 있음, 심볼릭 링크 제거

sudo rm /etc/nginx/sites-enabled/example

설정 적용 (nginx reload)

sudo systemctl reload nginx

permission denied 권한이 없는 문제

example 파일은 생성했지만 호스팅 해야하는 파일들이 옴겨지지 않음 permission denied라 나옴

폴더 권한 설정

# 계정: sangmin 
sudo chown -R sangmin:sangmin /var/www/example

또 다른 방법으로는 www-data 그룹에 계정을 추가하는 방법

sudo usermod -aG www-data sangmin
sudo chown -R www-data:www-data /var/www/example
sudo chmod -R 775 /var/www/example
exit # 다시 로그인 하기 위해 나가기

Leave a Comment