본문 바로가기
컴퓨터 활용(한글, 오피스 등)/50_2.운영체제_리눅스

nginx 웹서버 구축

by 3604 2023. 7. 18.
728x90

안녕하세요, 일루넥스 개발팀 윤나영입니다.
이번 포스팅에서는 일루넥스 웹서버 구축에 사용되는 nginx로 웹서버를 띄워볼 것입니다. 스펙은 다음과 같습니다.

출처: https://blog.illunex.com/nginx-%EC%9B%B9%EC%84%9C%EB%B2%84-%EB%9D%84%EC%9B%8C%EB%B3%B4%EA%B8%B0/

  • 운영체제 : macOS
  • 사용 프로그램 : Homebrew
  • nginx 버전 : 1.19.8
 

Apache와 Nginx

본론으로 넘어가기 전에 nginx에 대한 역사를 알아보겠습니다.
apache와 nginx는 전 세계적으로 가장 큰 오픈소스 웹서버들입니다.
두 프로그램의 동작 원리는 다르지만 apache의 단점을 보완하고자 만들어진 게 nginx이다보니 nginx 출시 후 둘은 늘 비교 대상이 되어왔습니다.

1.1 Apache

Apache는 1995년도에 처음 출시된 후에 대표적인 웹서버로 자리매김하였으며,
요청 당 쓰레드 또는 프로세스가 처리하는 구조입니다. nginx보다 모듈이 다양하며 안정성, 호환성 등에 우세합니다.

1.2 Nginx

Apache보다 기능은 적은 대신 성능 면에서 우세합니다. 더 적은 자원으로 더 빠른 서비스를 제공할 수 있는 ‘경량화’된 웹서버로 핵심은 ‘빠름’입니다.
프로그램의 흐름이 이벤트에 의해 결정(event-based)이 되며 여러 개의 커넥션을 이벤트 핸들러를 통해 비동기 방식으로 처리합니다.
Apache에 비하여 스레드를 많이 사용하지 않기 때문에 CPU 소모도가 상대적으로 낮습니다.
적은 수의 스레드로 효율적인 일처리가 가능하기에 많은 접속자들이 와도 대응을 할 수 있습니다.

예전엔 nginx를 차세대 웹서버라고 불렀는데, 이제는 사용자가 가장 많이 사용하는 웹서버가 되었습니다.
출시 이후 늘 사용자 사용 1위를 차지했던 아파치는 2019년, nginx에게 1위 자리를 넘겨주게 되었습니다.

 

Nginx 프로세스

nginx는 하나의 master 프로세스와 여러 개의 worker 프로세스를 가집니다.
master 프로세스는 nginx의 성능을 측정하고 worker 프로세스를 관리합니다.
worker 프로세스는 요청을 처리하며, worker 프로세스 사이에 요청을 효율적으로 분배하기 위해 운영체제에 의존합니다.
worker 프로세스의 개수는 설정 파일에서 알 수 있는데 정의된 프로세스 개수와 사용 가능한 cpu 코어 숫자에 맞게 자동으로 조정됩니다.

 

본론

이제 nginx로 웹서버를 띄워보겠습니다.

2.1 다운로드

nginx를 사용하기 위해선 먼저 다운로드 해야 합니다.

brew install nginx

다운로드가 잘 되었는지 확인하려면 버전을 검색해보면 됩니다.

버전이 뜬다면 다운로드에 성공한 것입니다.

nginx -v

homebrew를 이용한 nginx는 다음과 같은 경로에 설치됩니다.

 

nginx를 설치하면 기본적으로 포트가 8080으로 잡혀있습니다.
homebrew로 설치하면 현재 로그인된 사용자(mac의 user)의 권한으로 진행되는데,
nginx는 root가 아닌 사용자가 nginx를 설치할 경우 1024 포트보다 작은 포트를 사용할 수 없도록 되어있습니다.

80 포트를 사용하고 싶다면 설정 파일의 포트를 변경한 후에 설정 적용 시 ‘sudo’를 붙여야 합니다.

설정파일 경로는 다음과 같습니다.

  1. sudo vi /usr/local/etc/nginx/nginx.conf

포트를 8080에서 80으로 변경하면 됩니다.

  1. server {
  2. listen 80;
  3. server_name localhost;

포트가 80이 아닐 때 일부 서비스에서 인코딩 혹은 서버와의 통신 오류가 발생할 수 있으므로 80번 포트로 지정해 놓는 게 좋습니다.

 

2.2 사이트 설정

nginx를 사용하는 방법은 여러가지가 있는데, 일루넥스에서는 하나의 서버에서 여러 개의 사이트를 띄우는 방법을 사용하고 있습니다.

이걸 가상 호스트(Virtual Hosts) 기능이라고 하는데, nginx를 포함한 거의 모든 웹서버에서 해당 기능을 가지고 있습니다.

  1. 띄우려는 사이트들을 설정하고
  2. 그 사이트들을 nginx 서버와 연결하면 됩니다.

sites-available, sites-enable 폴더에서 설정 및 연결할 수 있습니다.

sites-available 폴더에는 연결하려는 서비스에 대한 사이트 정보를 정의하면 되고,
sites-enabled 폴더에는 available의 파일의 심볼링크를 걸면 됩니다.

만약 폴더가 없다면 만들면 됩니다.

mkdir sites-available
mkdir sites-enabled

sites-avaliable 폴더에서 정보를 입력합니다.

server {
 listen 80;
 server_name 도메인명;
 server_name ip주소;
 root 루트경로;
 index index.html;

 access_log /var/log/nginx/파일명.access.log;
 error_log /var/log/nginx/파일명.error.log;
 location / {
     try_files $uri /index.html =404;
  }
}

sites-enabled 폴더에서 심볼링크를 겁니다. ln = link입니다.

sudo ln -s ../sites-available/파일명 .

설정을 적용하기 전에 작성한 파일에 이상이 없는지 확인합니다.

-t는 nginx에 설정된 파일들을 테스트로 실행시켜볼 수 있스빈다.

sudo nginx -t

successful 이라는 답을 얻으면 성공입니다.

에러가 있다면 nginx는 failed 답과 함께 원인을 알려줍니다.

 

2.3 설정 적용

설정을 해준 후에는 적용을 해야 합니다.

nginx를 reload 해주면 됩니다.

sudo brew service reload nginx
sudo systemctl reload nginx

reload와 restart의 차이점은 ‘서버 중단 여부’입니다.

reload는 서버를 중단시키지 않고 명령어를 입력한 시점부터 설정 파일에서 변경된 사항만 적용합니다.

restart는 이름 그대로 서버를 껐다가 켭니다.

설정 파일 적용 시 서버를 중단시키지 않기 위해서 reload를 사용하는 것이 좋습니다.

그 외 명령어들은 다음과 같습니다.

시작 명령어

sudo brew services start nginx

중지 명령어

sudo brew services stop nginx

재시작 명령어

sudo brew services restart nginx

상태확인 명령어

sudo brew services status nginx
 

2.4 디렉토리 설정

만든 디렉토리의 소유권을 nginx 기본 사용자인 www-data에게 넘겨야 합니다.

chown은 change own의 약자로, 파일의 소유자나 그룹을 변경할 때 사용합니다.

sudo chown -R $USER:www-data /디렉토리경로

디렉토리 권한이 755가 아니라면 변경합니다.

chmod는 change mode로 파일의 사용권한을 변경할 때 사용합니다.

755로 설정하면 사용자와 그룹은 파일 읽기, 쓰기, 실행 모두 가능하고 그 외는 읽기와 실행만 가능합니다.

sudo chmod -R 755 /디렉토리경로
 

2.5 확인

서버가 잘 띄워졌는지 확인합니다.

netstat -anv | grep LISTEN
 

마지막으로 nginx 웹서버를 접속합니다.

설정된 페이지나 위 페이지가 뜨면 성공!

 

마치며

macOS에서 nginx를 설치해보았습니다.
nginx를 사용하면 여러 웹사이트를 한 곳에서 관리할 수 있으며 트래픽 이슈에도 대응할 수 있습니다.
이 외에도 proxy 서버를 띄워서 보안을 강화하거나 로드 밸런스와 붙여서 트래픽 부하를 줄일 수 있습니다.

728x90