如何让Jenkins监听80端口?

如何让Jenkins监听80端口?

使用默认配置,Jenkins 正在侦听端口 8080:

$ ss -tulpn | grep 8080
tcp  LISTEN 0      50       *:8080            *:*     users:(("java",pid=3052,fd=115)

然而,我想改变这一点,让 Jenkins 监听端口 80。

当我进入/etc/sysconfig/jenkins并更改JENKINS_PORTJENKINS_PORT="80"并重新启动时sudo service jenkins restart,我得到:

$ ss -tulpn | grep 8080
$ ss -tulpn | grep 80
$ curl localhost:8080
curl: (7) Failed to connect to localhost port 8080 after 0 ms: Connection refused
$ curl localhost:80
curl: (7) Failed to connect to localhost port 80 after 0 ms: Connection refused

如何让Jenkins监听80端口?

答案1

只有 root 能够绑定到 1024 以下的端口。这就是 jenkins 默认在 port 上运行的原因8080,因为它们不属于特权端口。解决这个问题的一种方法是在 jenkins 前面有一个反向代理,例如apachenginx,监听端口80将帮助您解决您的问题。 是众多教程之一,如何在 nginx 或 apache 后面运行 jenkins

答案2

如果您正在运行 systemd,一个更简洁的答案是为进程提供绑定到服务端口的能力。运行systemctl edit jenkins.service并添加以下部分:

[Service]
Environment="JENKINS_PORT=80"
AmbientCapabilities=CAP_NET_BIND_SERVICE

然后重新启动服务。如果您需要 HTTPS,则可以使用类似的解决方案绑定到 443。

答案3

在带有 的系统上authbind,您可以允许 Jenkins 绑定到端口 80,而不授予其完全CAP_NET_BIND_SERVICE访问权限。运行systemctl edit jenkins.service,我们添加

[Service]
Environment="JENKINS_PORT=80"
ExecStart=/usr/bin/authbind --depth 2 /usr/bin/jenkins

并设置 Jenkins 以允许端口 80:

touch /etc/authbind/byport/80
chown jenkins:jenkins /etc/authbind/byport/80
chmod 774 /etc/authbind/byport/80

相关内容