#docker #nginx #jenkins #docker-compose #reverse-proxy
Вопрос:
Я использую Nest.js, nginx, дженкинс с докером и докер-композитором. Я хочу использовать nginx в качестве обратного прокси-сервера для дженкинса, поэтому я добавляю location /jenkins в свой файл nginx.conf и устанавливаю пропуск прокси в контейнер дженкинса. Когда Дженкинс устанавливает, он работает нормально. Однако после установки и перезагрузки он возвращается к localhost/login?from=/jenkins/, а затем показывает, ЧТО НЕ НАЙДЕН. Я добавил перенаправление прокси на HTTP://jenkins:8080 но это все равно не работает.
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# upstream docker-express { # 1
# server nestjs_api_dev:3000; #docker-compose.yml 에 있는 container name
# }
upstream docker-jenkins { # 2
server jenkins:8080; #docker-compose.yml 에 있는 container name
keepalive 32;
}
server {
listen 80;
server_name localhost;
# location / {
# proxy_http_version 1.1;
# proxy_pass http://docker-express; #client 요청 오면 위의 upstream 으로 포워딩
# }
location ^~ /jenkins/ {
# proxy_http_version 1.1;
# proxy_pass http://docker-jenkins/jenkins; #client 요청 오면 위의 upstream 으로 포워딩
# Convert inbound WAN requests for https://domain.tld/jenkins/ to
# local network requests for http://10.0.0.100:8080/jenkins/
proxy_pass http://docker-jenkins/jenkins/;
# Rewrite HTTPS requests from WAN to HTTP requests on LAN
proxy_redirect http:// https://;
# The following settings from https://wiki.jenkins-ci.org/display/JENKINS/Running Hudson behind Nginx
sendfile off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
# This is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_temp_file_write_size 64k;
# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_buffering off; # Required for HTTP-based CLI to work over SSL
}
}
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;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
докер-compose.yaml
services:
proxy:
image: nginx:latest # 최신 버전의 Nginx 사용
container_name: proxy # container 이름은 proxy
ports:
- '80:80' # 80번 포트를 host와 container 맵핑
networks:
- nestjs-network
volumes:
- ./proxy/nginx.conf:/etc/nginx/nginx.conf # nginx 설정 파일 volume 맵핑
restart: 'unless-stopped' # 내부에서 에러로 인해 container가 죽을 경우 restart
dev:
container_name: nestjs_api_dev
image: nestjs-api-dev:1.0.0
build:
context: .
target: development
dockerfile: ./Dockerfile
command: node dist/src/main
# ports:
# - 3000:3000
expose:
- '3000' # 다른 컨테이너에게 3000번 포트 open
networks:
- nestjs-network
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
restart: unless-stopped
prod:
container_name: nestjs_api_prod
image: nestjs-api-prod:1.0.0
build:
context: .
target: production
dockerfile: ./Dockerfile
command: npm run start:prod
ports:
- 3000:3000
- 9229:9229
networks:
- nestjs-network
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
restart: unless-stopped
jenkins:
build:
context: .
dockerfile: ./jenkins/Dockerfile
image: jenkins/jenkins
restart: always
container_name: jenkins
user: root
environment:
- JENKINS_OPTS="--prefix=/jenkins"
#ports:
# - 8080:8080
expose:
- '8080'
networks:
- nestjs-network
volumes:
- ./jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
environment:
TZ: 'Asia/Seoul'
networks:
nestjs-network: