[Nginx] Nginx 설정

ss0510s·2024년 5월 23일
0

Infra

목록 보기
6/6

Nginx 설치

  • nginx-proxy: Docker를 사용하여 nginx 리버스 프록시를 실행하는데 사용
  • letsencrypt: ssl 인증서 발급
  • 두 이미지를 받을 nginx frontend 서버가 필요
  • 같은 네트워크로 묶여야함
version: '3'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./docker_volumes/nginx/certs:/etc/nginx/certs:rw
      - ./docker_volumes/nginx/html:/usr/share/nginx/html:rw
      - ./docker_volumes/nginx/vhost.d:/etc/nginx/vhost.d:rw
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - infra
    environment:
      - TZ=Asia/Seoul

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt
    environment:
      - TZ=Asia/Seoul
      - NGINX_PROXY_CONTAINER=nginx-proxy
    depends_on:
      - nginx-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./docker_volumes/nginx/certs:/etc/nginx/certs:rw
      - ./docker_volumes/nginx/vhost.d:/etc/nginx/vhost.d:rw
      - ./docker_volumes/nginx/html:/usr/share/nginx/html:rw
      - ./docker_volumes/acme.sh:/etc/acme.sh
    networks:
      - infra
volumes:
  certs:
    driver: local
    driver_opts:
      type: none
      device: $PWD/docker_volumes/nginx/certs
      o: bind
  vhostd:
    driver: local
    driver_opts:
      type: none
      device: $PWD/docker_volumes/nginx/vhost.d
      o: bind
  html:
    driver: local
    driver_opts:
      type: none
      device: $PWD/docker_volumes/nginx/html
      o: bind

FrontEnd

  • LETSENCRYPT_HOST에 URL을 넣으면 위의 letsecrypt 컨테이너가 ssl인증서를 발급함
version: '3'

services:
  frontend:
    image: ss0510s/a303-frontend
    container_name: a303-frontend-dev
    networks:
      - infra
    ports:
    - "3000:80"
    environment:
      - VIRTUAL_HOST=${HOST}
      - LETSENCRYPT_HOST=${HOST}
      - LETSENCRYPT_EMAIL=${EMAIL}

networks:
  infra:
    external: true
  • 잘 발급받았는지 확인하려면 아래 명령어로 로그 확인
	docker-container logs letsencrypt

Nginx 설정

  • 경로 ./docker_volumes/nginx/vhost.d/[인증서 받을 사이트]
  • 해당 파일을 수정하고 아래와 같은 명령어로 relaod 하면 설정이 반영됨
	docker exec -it nginx-proxy nginx -s reload

location ^~ /.well-known/acme-challenge/ {
    auth_basic off;
    auth_request off;
    allow all;
    root /usr/share/nginx/html;
    try_files $uri =404;
    break;
}
## End of configuration add by letsencrypt container

location /api/ {
     proxy_pass http://{container이름}:{port번호};
     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;
}
profile
개발자가 되기 위해 성장하는 중입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN