首页 > 解决方案 > Jenkins URL localhost:8080 将我​​重定向到 localhost,破坏网页

问题描述

我在使用 Jenkins 代理时遇到问题。Jenkins 容器位于我的 NGINX 代理后面。我在http://localhost:8000访问它。登录后,我被踢到http://localhost。Jenkins 上的一些链接也做同样的事情,并删除了制动屏幕的端口。我从我的 Manage Jenkins 页面上的标题中得到错误,并尝试添加 proxy_pass URL,但没有任何效果。

我的 NGINX conf 文件是这样的......

server {
   listen       8000;
   server_name  "";

   access_log off;

   location / {

       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Forwarded-Port $server_port;
       proxy_set_header X-Forwarded-Host $host;
       proxy_pass         http://jenkins_master_1:8080;
       proxy_redirect http://jenkins_master_1:8080 http://localhost:8000;

       proxy_max_temp_file_size 0;

       proxy_connect_timeout      150;
       proxy_send_timeout         100;
       proxy_read_timeout         100;

       proxy_buffer_size          8k;
       proxy_buffers              4 32k;
       proxy_busy_buffers_size    64k;
       proxy_temp_file_write_size 64k;    

   }

}

我的 docker-compose.yml 文件是这样的......

version: '3'

# Services are the names of each container
services:
  master:
    # Where to build the container from a Dockerfile
    build: ./jenkins-master
    # Open which ports to
    ports: 
      - "50000:50000"
    # Connecting volumes to in a container
    volumes:
      - jenkins-log:/var/log/jenkins
      - jenkins-data:/var/jenkins_home
    # Adding the service to a network
    networks: 
      - jenkins-net

  nginx:
    build: ./jenkins-nginx
    ports:
      - "8000:8000"
    networks: 
      - jenkins-net

# List of volumes to create
volumes: 
  jenkins-data:
  jenkins-log:

# List of netorks to create
networks: 
  jenkins-net:

我正在尝试学习 Docker 和 Jenkins,并且正在学习一个教程,jenkins_master_1 来自 docker-compose。任何帮助或指导都会非常感激。

谢谢

标签: dockernginxjenkinsdocker-compose

解决方案


假设 1:NGINX 在你的应用前面,接受 80 端口的连接,然后传递到后端的 8080 端口。

假设 2:Jenkins 应用程序和 NGINX 在同一台服务器上。

如果您使用代理,您最初应该从端口 80 访问它,而不是 8080。

NGINX 在 80 上获取请求,然后传递到后端 8080。如果您使用代理,则从浏览器中看不到 8080。如果您使用的是 8080 并且它正在做某事,那么您将直接进入应用程序......也就是绕过代理。

那么,如何开始解决它:

(1.) 导航到http://localhost,它应该通过您的代理(如果设置正确)

(2.) 在管理 Jenkins-> 配置系统 -> Jenkins URL 中,确保 URL 设置为http://localhost

(3.) 最好在 NGINX 配置中使用 FQDN 作为服务器名称,然后确保 Jenkins 仅在 Jenkins.xml 配置中侦听 localhost 上的连接。Jenkins.xml 应该将监听地址设置为 127.0.0.1。然后对该 FQDN 的外部请求将无法绕过代理,因为 Jenkins 将只允许来自本地主机的连接(来自 NGINX,或者您在本地主机上使用浏览器)。

然后,理想情况下,你有: http://fqdn- >NGINX 监听端口 80 -> Jenkins 在 127.0.0.1:8080。使用浏览器的用户(安全地在您的服务器之外)永远不会看到 8080 端口。


推荐阅读