如何为 Jenkins 设置 Nginx 反向代理

问题描述 投票:0回答:1

我是 Nginx 的初学者,我遇到了设置反向代理的问题。我的 jenkins 安装在 192.168.0.37:8080 上,我的 nginx 安装在 192.168.0.80 上。我想使用 192.168.0.80/jenkins 访问 jenkins。这是我的 /etc/nginx/conf.d/jenkins.conf 内容:

upstream jenkins {
  keepalive 32; # keepalive connections
  server 192.168.0.37:8080; # jenkins ip and port
}

# Required for Jenkins websocket agents
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
  listen          80;       # Listen on port 80 for IPv4 requests

  server_name     jenkins.example.com;  # replace 'jenkins.example.com' with your server domain name

  # this is the jenkins web root directory
  # (mentioned in the output of "systemctl cat jenkins")
  root            /var/cache/jenkins/war/;

  access_log      /var/log/nginx/jenkins.access.log;
  error_log       /var/log/nginx/jenkins.error.log;

  # pass through headers from Jenkins that Nginx considers invalid
  ignore_invalid_headers off;

  location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
    # rewrite all static files into requests to the root
    # E.g /static/12345678/css/something.css will become /css/something.css
    rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
  }

  location /userContent {
    # have nginx handle all the static requests to userContent folder
    # note : This is the $JENKINS_HOME dir
    root /var/lib/jenkins/;
    if (!-f $request_filename){
      # this file does not exist, might be a directory or a /**view** url
      rewrite (.*) /$1 last;
      break;
    }
    sendfile on;
  }

  location /jenkins {
      sendfile off;
      proxy_pass         http://jenkins;
      proxy_redirect     default;
      proxy_http_version 1.1;

      # Required for Jenkins websocket agents
      proxy_set_header   Connection        $connection_upgrade;
      proxy_set_header   Upgrade           $http_upgrade;

      proxy_set_header   Host              $http_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;
      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_buffering            off;
      proxy_request_buffering    off; # Required for HTTP CLI commands
      proxy_set_header Connection ""; # Clear for keepalive
  }

}

当我尝试输入

http://192.168.0.80/jenkins
时,我收到 404 Not Found。

我也尝试了不同的方法:

server {
    listen 80;
    server_name 192.168.0.80;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }

    location /jenkins/ {
        proxy_pass http://192.168.0.37:8080/;
        proxy_redirect off;
        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;
    }

    location /nexus/ {
        proxy_pass http://192.168.0.25:8081/;
        proxy_redirect off;
        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;
    }
}

在这种情况下 /nexus 工作得很好,但 /jenkins 仍然返回 404。两台机器都使用 Ubuntu 22.04 Server。有什么想法我做错了吗?

尝试将

--prefix=/jenkins
添加到 JENKINS_ARGS,但没有任何改变

nginx jenkins redirect reverse-proxy
1个回答
0
投票

首先,您必须使用

/jenkins
上下文路径配置 Jenkins。您可以通过传递启动参数
--prefix=/jenkins
来完成此操作。如果你在 docker 上,你可以像下面这样传递它。

docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JENKINS_OPTS="--prefix=/jenkins" jenkins/jenkins:lts

否则,您可以在声明 Jenkin 服务之前导出以下环境变量。

export JENKINS_OPTS="--prefix=/jenkins"

完成后,如下所示的简单 Nginx 规则应该适合您。

server {
    listen 80;
    server_name jenkins.ycr.com;

    location /jenkins {
            proxy_pass  http://127.0.0.1:8080;
            proxy_redirect http://127.0.0.1:8080/ http://jenkins.ycr.com/;
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.