дженкинс за обратным прокси-сервером Nginx продолжает перенаправляться в приложение

#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: