티스토리 뷰

간단하게 Nginx로 특정 URL 별로 Upstream 처리하는 방법에 대해 작성해 보겠습니다.


1. 경로이동

  • 리눅스 서버에 nginx를 설치하였다면, 아마 아래 경로에 nginx.conf 파일이 있을 겁니다.
cd /etc/nginx



1.1. 경로 못찾음

  • 만약 nginx.conf 파일의 경로를 못 찾겠다면, 아래 명령어를 이용하여 찾아볼 수 있습니다.
find /etc/ -type f -name "nginx.conf"



2. nginx.conf 편집

  • 편집기를 열어 nginx.conf를 수정합니다.
vi nginx.conf



2.1. location 설정

  • location 경로를 설정하고 proxy pass 할 upstream 서버를 지정해 줍니다.
user root;

#process수 자동증가
worker_processes auto; 

error_log  /var/log/nginx/error.log error;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


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

    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;
    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
	
	# upstream 서버1
	upstream view_server {
		ip_hash;
		server 서버IP:포트 weight=1 max_fails=3 fail_timeout=30s;
	}

	# upstream 서버2
	upstream api_server {
		ip_hash;
		server 서버IP:포트 weight=1 max_fails=3 fail_timeout=30s;
	}
	
	server {
		listen 80;
		server_name 도메인 또는 IP(Port는 생략);
		keepalive_timeout 60s;
	
		location ~ /api {
			# 위에서 지정한 upstream 서버 맵핑
			proxy_pass http://api_server;
			proxy_set_header Host 도메인 또는 IP(Port는 생략);
            
			# 실제 사용자 IP 전달
			proxy_set_header X-Forwarded-For $remote_addr;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_redirect off;
		}
		
		location / {
			# 위에서 지정한 upstream 서버 맵핑
			proxy_pass http://po_web;
			proxy_set_header Host 도메인 또는 IP(Port는 생략);
            
			# 실제 사용자 IP 전달
			proxy_set_header X-Forwarded-For $remote_addr;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_redirect off;
		}
	}

}



2.2. alias 설정

  • alias를 이용해 CDN 서버 추가 구성도 가능합니다.
server {
  ...
    
  location /cdn/image {
    alias /nas/imageFile
  }
    
  ...
}



2.3. 이중화 설정

  • Upstream 도 이중화 구성이 가능합니다.
upstream api_server {
  ip_hash;
  server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=30s;
  server 127.0.0.1:8082 weight=1 max_fails=3 fail_timeout=30s;
}

 

감사합니다.

최근에 올라온 글
Total
Today
Yesterday