![[Server/NGINX] NGINX 설치 & 설명에 대한 모든 것](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF4Nwd%2FbtsK8IGQffH%2FmOmPEkEaiXxif7XRAld8DK%2Fimg.png)
이번글의 Nginx은 다음을 따른다
docker로 설치함으로 아래 링크를 선행 학습하자
[Docker/기초] Docker-compose 명령어 & 설치 (4)
이번글의 docker 실행 방식은 다음을 따른다.DockerFile을 만들어서 커스텀 Dockerfile 만들기이떄 기본 이미지를 dockerhub에서 받아오고 커스터마이징 한다.1번에서 만든 Dockerfile을 사용해서 docker-image
naturecancoding.tistory.com
1. Nginx 설명 및 설치
뭔지는 알아야 사용하겠지?
Nginx는 클라이언트 요청을 받아 백엔드 서버나 정적 파일로 전달하는 방식으로 동작한다
크게 아래 3가지 용도로 사용한다.
- 웹 서버로 사용
정적 파일 (HTML, CSS, JS) 등을 제공해준다. - Reverse Proxy
클라이언트 요청을 받아서 백엔드 어플리케이션으로 전달 (spring, Django)
백엔드 서버의 IP와 Port를 감추고, Nginx만 알면 되도록해주며 CORS 문제를 해결 가능 - Load Balancer
여러 백엔드 서버로 요청을 분산
라운드 로빈, IP 해싱등 다양한 로드 밸런싱 방식을 제공
간단한 Nginx의 요청 처리 흐음
- 클라이언트의 요청 :
HTTP/HTTPS 요청이 Nginx에 전달됨 - Request Parsing :
URL, Header등을 분석해서 적절한 처리를 결정함 - Server 블록 확인 :
요청된 도메인에 해당하는 Server 블록 선택 - Location 블록 확인 :
URL 패턴에 따라서 정적 파일 제공 또는 백엔드로 전달. - 응답 반환 :
요청 결과를 클라이언트로 반환
2. 설치를 해보자
docker file을 만들고 docker-compose파일을 만들며 doker network를 사용해서 다른 서버랑 소통하게된다
loki라는 모니터링 툴을 api통신할때 cors문제가 생기는데 이걸 해결하는 목표로잡고 진행하겠다.
아래 링크에서 loki 설치를 해볼수 있고 이미 사용하는 다른 spring같은 백엔드 서버를 사용해봐도 된다.
[Monitoring/Loki] Loki 설치 & 설명에 대한 모든 것 (3)
이번글의 loki은 다음을 따른다.promtail 설명 및 설치로그 수집 기초loki 설명 및 설치loki 설정 기초grafana 연동이번글에서 설명하는 내용은 3번이다.프롬테일을 설정해야 loki를 제대로 활용할 수 있
naturecancoding.tistory.com
Nginx 설치 디렉토리 구조
nginx의 설치 디렉토리 구조는 다음을 따른다.
.
├── docker-compose.yml # Docker Compose 설정 파일
├── nginx/
│ ├── Dockerfile # Nginx Dockerfile
│ ├── default.conf # Nginx 설정 파일
├── loki/
│ ├── config.yml # Loki 설정 파일
Dockerfile
nginx를 docker hub에서 받아온다.
# nginx/Dockerfile
FROM nginx:latest
별다른 추가 설정은 하지 않았다.
Docker-Compose.yml
모든 환경 변수와 파일 마운트를 Compose 파일에서 처리한다.
# docker-compose.yml
version: '3'
networks:
loki_network:
name: docker_loki_network
external: true
services:
nginx:
build:
context: ./dockerfile/
dockerfile: Dockerfile-nginx
container_name: nginx
ports:
- "8090:8080"
environment:
- TZ=Asia/Seoul
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
networks:
- loki_network
설정파일을 여기서 연결한다.
시간값을 한국으로 저장한다.
network는 loki가 있는 network로 묶는다 추가적인 네트워크를 설정할수도 있다. docker-compoe에서 생성한 network는 docker_라는 접두사가 붙기대문에 name에서 잘 연결해주면된다.
8080port는 주로 spring에서 많이 사용해서 외부 port를 8090으로 열었다.
Nginx 설정 파일
cors 설정읖 로함한 nginx 설정 파일을 만든다.
# nginx/default.conf
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://loki:3100;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers "Authorization, Content-Type";
if ($request_method = OPTIONS) {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers "Authorization, Content-Type";
return 204; # No Content
}
}
}
이제 실행을 하면 정상적으로 실행이 될것이다.
curl http://localhost:8090/loki/api/v1/label
loki랑 통신이 제대로 되고 있는지 확인해보자 아래 코드가 뜨면 성공이다.
{"status":"success"}
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간