Nginx 설치

BinaryHyeok·2023년 3월 20일
0
post-thumbnail

Nginx로 포트포워딩을 하기 위해서 EC2에 설치한다.


Nginx

1. ubuntu에 Nginx 설치

sudo apt update
sudo apt install nginx
  • 버전확인
sudo dpkg -l nginx

2. UFW 방화벽 nginx 포트 열기

nginx는 ufw 방화벽과 관련된 3개의 프로필이 존재한다.
1. Nginx Full - 80 & 443 포트를 둘다 연다.
2. Nginx HTTP - 80 포트만 연다.
3. Nginx HTTPS - 443 포트만 연다.

이후 SSL을 적용할 예정이기 때문에 Nginx Full 프로필을 사용한다.

프로필 허용
sudo ufw allow 'Nginx full'

방화벽 다시 로드
sudo ufw reload

방화벽 상태 확인
sudo ufw status

완료 된 후, 서버도메인:80을 입력해서 Nginx 기본 랜딩 페이지가 뜨면 성공이다.

3. nginx 설정

EC2의 /etc/nginx 경로로 오게되면 nginx.conf 파일과 conf.d 폴더가 존재한다.

  • nginx.conf
    - nginx의 설정이 들어가는 파일
  • conf.d
    - nginx.conf에서 include로 불러올 수 있는 conf 파일 저장 폴더

3-1. nginx.conf 설정

다음 명령어를 통해 nginx.conf 파일을 연다.

sudo vim nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 1024;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        
        
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        #include /etc/nginx/sites-enabled/*;
}


mail {
        # See sample authentication script at:
        # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript

        # auth_http localhost/auth.php;
        # pop3_capabilities "TOP" "USER";
        # imap_capabilities "IMAP4rev1" "UIDPLUS";

        #server {
        #       listen     localhost:110;
        #        protocol   pop3;
        #        proxy      on;
        #}

        #server {
        #        listen     localhost:143;
        #        protocol   imap;
        #        proxy      on;
        #}
}
  • worker_processess : 몇개의 워커 프로세스를 생성할 것인지 지정하는 지시어이며 1이면 모든 요청을 하나의 프로세스로 실행하겠다는 뜻이다.
    CPU 멀티코어 시스템에서 1이면 하나의 코어만으로 요청을 처리하는 것이다. 보통 auto로 사용하는 경우가 많다.

  • error_log : 로그 레벨을 설정하는 지시어

  • pid : nginx의 마스터 프로세스 id정보가 저장된다.

  • events 블록 : 이벤트 블록은 네트워크 동작 방법과 관련된 설정이다.

    • worker_connections : 하나의 프로세스가 처리할 수 있는 커넥션의 수
    • 즉, 최대 접속자 수는 worker_processes X worker_connections가 된다.
  • http 블록 : 하위에 server 블록, 그리고 location 블록을 갖는 루트 블록이다. 여기에서 선언된 값은 하위 블록에 상속된다.

    • include : 옵션 항목을 설정해둔 파일의 경로를 지정하는데 보통 파일 확장명과 MIME 타입 목록을 지정한다.
    • default_type : 옥텟 스트림 기반의 http를 사용한다는 지시어
    • upstream 블록 : origin 서버라고도 하는데, 여기서는 WAS, 웹 어플리케이션 서버를 의미하며 nginx는 downstream에 해당한다고 할 수 있다. nginx와 연결한 웹 어플리케이션 서버를 지정하는데 사용한다. 하위에 있는 server 지시어는 연결할 웹 어플리케이션 서버의 host주소:포트를 지정한다.
    • server 블록 : 하나의 웹 사이트를 선언하는데 사용한다. server 블록이 여러 개면 한 개의 머신(호스트)에 여러 웹사이트를 서빙할 수 있다. 이러한 개념을 가상 호스트라고 한다.
      실제로는 호스트는 1개인데, 여러 개인 것 처럼 보이게 하는 것이다.
    • listen : 이 웹 사이트가 바라보는 포트를 의미한다.
    • server_name : 클라이언트가 접속하는 서버(주로 도메인). 이것과 실제로 들어온 request의 header에 명시된 값이 일치하는지 확인해서 server를 분기해준다.
    • location 블록 : server 블록 안에서 특정 웹 사이트 url을 처리하는데 사용한다.
    • server_tokens : 헤더에 nginx 버전을 숨기는 기능을 한다. 보안상 off를 권장한다.
    • keepalive_timeout : 접속시 커넥션 유지 시간을 지정한다.

3-2 conf.d 설정

블록 내부에서 중복되는 값은 conf.d 폴더의 하위 설정으로 빼 공통으로 적용 할 수 있다.

http 블럭 내부의 include /etc/nginx/conf.d/*.conf; 를 통해서 server블록을 작성하였다.

/etc/nginx/conf.d 디렉토리에 sites.conf 파일을 만들어 다음과 같이 작성 하였다.

server {
        listen 80;
        server_name [서버도메인];

        location / {
                proxy_pass http://[서버도메인]:[포트];
        }

        location /api {
                proxy_pass http://[서버도메인]:[포트];
        }
}

기본 요청은 react 웹페이지로 보내지만, api가 붙인 요청이 들어오면 서버로 보내게 설정해두었다.

[출처]
https://juneyr.dev/nginx-basics
https://narup.tistory.com/209

0개의 댓글