Server/NginX

NginX 한 서버에서 여러 도메인 처리 설정

제이널 2023. 1. 1. 12:31

배경

하나의 서버에 여러 도메인으로 요청이 들어오는 경우를 처리하고 싶었습니다.

(예, yourdomain.com  / dev.yourdomain.com )


개발 환경

- OS: GCP CentOS 7

- NginxX: 1.20.1


1. sites-available, sites-enabled?

- sites-available: 각 도메인 별 설정 파일들을 저장, 여기에만 만들어두면 실제로 적용되지 않음

- sites-enabled: sites-available에 있는 파일의 심볼릭 링크를 걸어서 서버에 실제 적용

 

두 폴더가 필요한 이유는 한 서버에서 여러 도메인에 대한 요청을 처리하기 위함입니다.

두 폴더를 나눈 이유는 sites-enabled에 생성된 심볼릭 링크만 삭제해주면 해당 도메인의 서비스를 중단해주는 등의 관리가 편하기 때문입니다.


2. 기본 설정 파일 수정

vi /etc/nginx/nginx.conf

 

기존 설정 내용에서 http 항목의 server 설정을 지우고, 대신 include /etc/nginx/sites-enabled/*.*; 을 추가해서 NginX가 시작될 때, sites-enabled의 각 server 설정을 불러오도록 수정합니다.

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

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

    include /etc/nginx/sites-enabled/*.*;
}

3. 폴더 / 파일 생성

NginX 설치 후 /etc/nginx 경로에 sites-available, sites-enabled 폴더가 없다면 생성해줍니다.

mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled

 

sites-available에 yourdomain.com.conf 파일을 생성하고 아래와 같이 server 설정을 작성해줍니다.

vi /etc/nginx/sites-available/yourdomain.com.conf
server {
    listen       80;
    listen       [::]:80;
    server_name  lesson-notes.com;
    root         /usr/share/nginx/html;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }

    error_page 404 /404.html;
        location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

 

이제 sites-enabled에 심볼릭 링크를 생성해 주면 됩니다.

ln -s /etc/nginx/sites-available/yourdomain.com.conf /etc/nginx/sites-enabled/yourdomain.com.conf

 

추가로 관리할 도메인이 있다면, 위처럼 dev.yourdomain.com.conf 파일을 새로 만들어주면 됩니다.

 


4. NginX 서비스 시작/재시작

nginx -t 명렁어로 컴파일 오류가 없는지 테스트 하고, 서버를 재시작 합니다.

nginx -t
systemctl restart nginx