Некоторые ссылки на управление Jenkins не работают - обратный прокси-сервер Nginx, Tomcat - PullRequest
0 голосов
/ 21 мая 2019

Я установил 2 разные версии Jenkins на одной и той же ОС Windows 2012 R2. Jenkins v1.590 работает за веб-сервером Apache Tomcat, а Jenkins 2.164 работает как служба Windows. Оба экземпляра Jenkins доступны через HTTPS.

Для этого я запускаю Nginx в качестве обратного прокси-сервера, который перенаправляет все запросы на https://jenkins.company.com/jenkins на сервер Tomcat и https://jenkins2.company.com на службу Windows Jenkins 2.164.

Все работает хорошо, КРОМЕ необычного поведения на Jenkins v1.590. Проблема, с которой я сталкиваюсь, заключается в том, что при доступе к некоторым ссылкам в разделе «Управление Jenkins» они перенаправляют на localhost.

Вот ссылки, которые отлично работают:

Тогда есть ссылки, которые НЕ работают:

и многие другие.

Я все равно могу получить эти ссылки, если скопирую в новое окно и добавлю / в конце, например: https://jenkins.company.com/jenkins/configureSecurity/ работает нормально.

Я не уверен, почему я получаю эти расхождения в Jenkins v1.590. Хочу отметить, что я сделал это изменение совсем недавно, и до установки Nginx все ссылки работали нормально.

Ниже приведены мои конфиги:

Nginx:

upstream tomcat_server {
    # Tomcat is listening on default 8080 port
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
    listen       443 ssl;
    server_name  jenkins.company.com/jenkins;

    ssl_certificate C:/nginx1.15.12/certs/jenkins/server.crt;
    ssl_certificate_key C:/nginx1.15.12/certs/jenkins/server.key;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
        proxy_connect_timeout      240;
        proxy_send_timeout         240;
        proxy_read_timeout         240;
        # note, there is not SSL here! plain HTTP is used
        proxy_pass http://tomcat_server;

    }
}

Tomcat Config:

<Connector executor="tomcatThreadPool"
    port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" 
    proxyName="localhost"
    proxyPort="443"
    scheme="https"/>

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

1 Ответ

0 голосов
/ 23 мая 2019

Хорошо, я понял это. Мне пришлось изменить proxyName на сервере Tomcat на URL. Это в конечном итоге является решением:

<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" 
           proxyName="jenkins.company.com"
           proxyPort="443"
           scheme="https"/>
...