http&server

04. Nginx 기초 사용법 정리 2 (location, proxy, cache)

식피두 2020. 7. 29. 11:53

글이 좀 길어져서 나누어 보았다.

 

앞 글에선 nginx의 conf에 대한 기본적인 설명과 동작 방식에 대해서 정리했다.

 

이 글에선 location 지시어의 좀 더 구체적인 사용법 및 가상 호스트, 서브 도메인, 프록시 서버에 대한 정리를 해보자.

 

location directive 사용법

로케이션 지시어는 서버 블락 안에서 URI 매칭을 해준다.

regex도 지원한다.

server {
  location / {
    root /data/www;
  }
  
  location /images/ {
    root /data;
  }
}

URI 가 /와 매칭된다면, root에 명시된 주소와 URI를 합친다.

만약, 매칭 후보가 여럿이라면 '가장 긴 prefix'에 해당하는 주소를 고른다.

 

/images/로 시작하는 URI라면 서버는 /data/images/ 디렉터리로 부터 파일을 전송한다. (없을 경우 404)

예를 들어, http://localhost/images/example.png 는 /data/images/example.png로 바뀐다.

 

/images/로 시작 안되는 것을은 모두 /data/www/로 매핑

예를 들어, http://localhost/some/example.png는 /data/www/some/example.png로 바뀐다.

 

Proxy Server 설정법

프록시 서버란?

해당 서버를 통해서 다른 네트워크 서비스로 '중계'해주는 소프트웨어/서버를 말한다.

- Receive requests and pass them to the proxied servers

- Retrieves responses from them and send them to the client

 

프록시 서버를 통해서 뒤에 위치해 있는 분산 시스템을 숨길 수 있으며,

'Reverse Proxy'라고도 부른다.

 

관련 설정 예시를 보면,

server {
  listen 8080;
  root /data/up1; # maps all requests to the /data/up1 (local file system)
                  # server의 context 속에 위치할 수도 있음 (location에 root 지시어가 따로 없다면)
  location / {
  }
}
server {
  location / {
    proxy_pass http://localhost:8080;
  }
  location ~ \.(gif|jpg|png)$ {
    root /data/images;
  }
}

위와 같이, '/'로 접속 했을 때, gif/jpg/png 패턴에 걸리지 않는 요청의 경우

모두 8080 포트로 중계된다.

 

참고로, regex는 ~로 시작된다 (좌우엔 스페이스)

 

두 번째 location의 역할은

- filter requests ending with .gif, .jpg, .png

- and map them to /data/images/ directory by adding URI to the root directive parameter

 

Nginx가 location block을 선택하는 기준을 다시 복습해보면,

1. 로케이션 디렉티브의 파라미터를 체크하고, 가장 긴 프리픽스 매칭에 해당하는 것을 기억

2. regex를 체크해서 일치하는 게 있다면 해당 로케이션 선택, 그렇지 않다면 1번에서 기억했던 것을 선택

 

 

Cache Server 설정법 자료

https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/

 

Reverse Proxy with Caching | NGINX

Reverse Proxy with Caching nginx.conf http { proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; server { location / { proxy_pass http://1.2.3.4; proxy_set_header Host $host; proxy_buffering on; proxy_cache STATIC;

www.nginx.com

혹은, 

nginx 공홈에서 공개된 pdf에 잘 나와있던 것으로 기억한다.

https://www.nginx.com/resources/library/complete-nginx-cookbook/

 

[O’Reilly Ebook] Complete NGINX Cookbook: Your Guide to Everything NGINX

Learn how to configure caching, load balancing, security, cloud deployments, gRPC, HTTP/2 server push, and other critical NGINX features in this free O’Reilly ebook

www.nginx.com

읽다보면 속도 향상을 위한 옵션이 나오는데 (메모)

- speed up options ; 4page, reset_timeout_connections on; 및 gzip 사용..

 

Upstream 이란?

웹서버를 다루다 보면, 업스트림 이란 단어가 나온다.

Nginx 자체 모듈에도 upstream이라고 있음.

 

업스트림이란 Origin 서버라고도 불리며,

여러 대의 컴퓨터가 순차적으로 어떤 일을 할 때, 어떤 서비스를 받는 서버를 의미한다.

 

Nginx 자체는 Down Stream 서버라 할 수 있다.

 

Upstream은 nginx의 내장 모듈로서, 부하 분산(로드밸런싱) 및 속도 개선에 쓰인다!

 

사용법도 매우 간단하다.
https://www.nginx.com/resources/wiki/start/topics/examples/loadbalanceexample/

 

Simple Load Balancing | NGINX

Simple Load Balancing nginx.conf http { upstream myproject { server 127.0.0.1:8000 weight=3; server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; } server { listen 80; server_name www.domain.com; location / { proxy_pass http://myproject; }

www.nginx.com

https://stackoverflow.com/questions/32364579/upstream-downstream-terminology-used-backwards-e-g-nginx

 

Upstream / downstream terminology used backwards? (E.g. nginx)

I've always thought of upstream and downstream along the lines of an actual stream, where the flow of information is like water. So upstream is where water/data comes from (e.g. an HTTP request) and

stackoverflow.com

 

 

그 외 참고자료

http://nginx.org/en/docs/beginners_guide.html

 

Beginner’s Guide

Beginner’s Guide This guide gives a basic introduction to nginx and describes some simple tasks that can be done with it. It is supposed that nginx is already installed on the reader’s machine. If it is not, see the Installing nginx page. This guide de

nginx.org

nginx 주요 설정

https://sarc.io/index.php/nginx/61-nginx-nginx-conf

 

Nginx 주요 설정 (nginx.conf)

[{"id":"1","listid":"1","parentid":"0","videosource":"youtube","videoid":"KiwjxNKXfxY","imageurl":"https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/default.jpg,120,90;https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/mqdefault.jpg,320,180;https:\/\/i.ytimg.com\/vi\/KiwjxNKXf

sarc.io

소켓이란?

http://eastroot1590.tistory.com/entry/socket-socket%EC%9D%B4%EB%9E%80

 

socket : socket이란?

인터넷은 프로그램과 프로그램이 서로 연결되어 이루는 네트워크다. socket 계층 네트워크 프로그램 개발을 위한 TCP/IP 4계층에서 더 추상화 해서 만들어진 계층이다. 프로그래머를 위해 만들어��

eastroot1590.tistory.com

유닉스 소켓 vs. TCP/IP host:port

https://serverfault.com/questions/195328/unix-socket-vs-tcp-ip-hostport

 

Unix socket vs TCP/IP host:port

Could someone please describe to me the pros and cons of using a Unix socket file vs a tcp/ip localhost:port when setting up services on a server (Ubuntu, FWIW)? In this particular instance it's f...

serverfault.com

유닉스 소켓

http://wiki.nex32.net/%EC%9A%A9%EC%96%B4/%EC%9C%A0%EB%8B%89%EC%8A%A4_%EB%8F%84%EB%A9%94%EC%9D%B8_%EC%86%8C%EC%BC%93

 

유닉스 도메인 소켓(Unix Domain Socket)

유닉스 도메인 소켓(Unix Domain Socket) 유닉스 도메인 소켓(Unix Domain Socket)은 프로세스간의 데이터 교환을 위한 기술 중 하나로, 파일 시스템을 통해 소켓통신 방식으로 내부 프로세스간의 통신을 ��

wiki.nex32.net

대표적인 nginx 설정 예시

http://areumgury.blogspot.com/2016/08/nginx.html

 

nginx 설정정리

1. nginx 설정(universal drective) 위치 : /etc/nginx/nginx.conf user  nginx; #몇개의 thread가 사용될지 정의한다. cpu cores 수를 넣어주면 된다. wor...

areumgury.blogspot.com

nginx의 기본적인 보안 설정

https://medium.com/daidalos-hoho/nginx-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95-c239c3315ef8

 

Nginx 기본적인 보안 설정

Nginx 또는 Apach등의 웹서버와 php 등의 개발 언어에는 몇가지 보안관련 설정을 해주는것이 좋다. 주로 HTTP header에서 노출되는 정보값들의 노출 제한 관련된 내용이다. HTTP header의 내용은 아래의 wik

medium.com