웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > webdevetc

linux 환경에서 nginx 웹서버 설치 및 실행하기

Last Modified : 2018-02-02 / Created : 2017-07-04
29,219
View Count

리눅스 환경에서 nginx를 사용하여 웹서버를 구축하는 방법에 대하여 알아봅니다. nginx는 잘 알려진 apache와 같이 서버를 구동하는데 많이 사용되는 웹엔진입니다. 일단 자신의 개발 환경에 nginx를 설치합니다. 그리고 맨 아래에는 미들웨어로 사용된 uwsgi에 대하여도 설정 및 기타 사항을 함께 알아봅니다.




# 리눅스(Linux) 환경에 nginx를 설치하는 방법 알아보기

아래는 ubuntu 환경에서 nginx를 설치하는 명령어입니다.
sudo apt-get install nginx-full

설치가 완료되었다면 이제 설치된 폴더로 이동합니다.


! nginx 설정파일 수정하기

먼저 /etc/nginx/nginx.conf 파일이 있다는 가정 아래에 파일을 수정합니다.(설정 파일의 위치는 다를 수 있습니다.) 특히 /sites-available/안에 default 또는 사이트 이름을 사용하여 nginx의 설정을 별도로 관리하는 경우가 많으니 참고하시기 바랍니다.

설정 파일 내에는 많은 설정 옵션이 존재하는데 여기서 server에 해당하는 부분을 설정해야합니다. 만약 server로 시작하는 블록이 없다면 새로 추가하시기 바랍니다. 아래는 설정이 default 파일이라고 예로들어 설명하겠습니다.

@ /etc/nginx/sites-available/default
설정파일 내부의 http로 시작하는 블록을 찾고 그 안에 server로 시작하는 블록을 찾거나 없다면 새로 추가합니다. 아래설정은 간단한 프락시 서버를 구축합니다.
http {
  server {
    listen 8000;
    root /home/myName/webisfree;

    location / {
    }
  }
}

위와 같이 설정을 해주도록 합니다.

  • listen <- 포트 번호
  • root <- 서버 구동시 root가 될 경로
  • location <- 이동될 경로

이제 위 설정이 끝났다면 이를 /sites-enabled/에서 사용가능하도록 ln 명령어를 사용합니다.
$ sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled

먼저 nginx의 ini 파일의 에러, 이상 유무를 확인하니다.
$ nginx -t

문제가 없는 경우 이제 웹서버를 구동하기 위하여 service(systemctl) 등등을 사용합니다.
sudo service nginx start
sudo service nginx stop
sudo service nginx restart

위 명령어는 위에서부터 웹서버의 시작, 중지, 재시작을 나타냅니다. 서버를 시작하였다면 이제 서버가 잘 구동되는지 브라우저에서 8080포트로 접속하여 테스트를 수행합니다.



# uWSGI와 연동하는 방법

일반적으로 Python을 사용하는 경우 uWSGI를 미들웨어로 많이 사용합니다. 이때 wsgi를 설정하고 사용하기 위해서는 아래와 같이 nginx의 config 파일을 설정해야합니다. 설정 파일을 열어 아래와 같이 수정하도록 합니다.
server {
    listen 80;
    server_name webisfree.com;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/user/myName/mySocket.sock;
    }
}

server_name에는 해당하는 도메인 또는 ip를 입력합니다. 그 다음으로 location의 설정이 중요한데 uwsgi의 연결, 통신을 위해서 mySocket.sock이라는 소켓을 사용합니다. 위 설정을 추가합니다. 위 과정이 끝나면 이제 서버가 잘 구동하는지 다시 테스트 하도록합니다. 이때 서버의 재시작이 필요합니다.

wsgi는 Web Server Gateway Interface의 약자로 서버와 웹어플리케이션의 Python 사이에서 트래픽이 원할하게 동작하도록 하는 역할을 수행합니다. 참고로 이에대한 내용은 Python 표준인 PEP 333에 명시되어 있습니다.

Previous

nginx 웹서버 config 설정시 conflicting server name 에러 발생하는 경우

Previous

모듈과 컴포넌트의 이해