我是 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,但没有任何改变
首先,您必须使用
/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/;
}
}