Apache反向代理 – 多个端口上的TLS / SSL,用于将Jenkins的Docker镜像推送到Nexus仓库

在一个简短的描述中的问题:

我正在运行一个Jenkins CI服务器。 一切工作正常。 我也运行一个Nexus资源库pipe理器。 在这里,一切正常,直到现在。

在Jenkins服务器上,我们使用pipe道脚本(也就是Git checkout,代码分析,构build服务等)来构build不同的REST服务。 最终的服务部署在Docker容器中。 工程也很好。

现在,当我们运行Nexus版本库pipe理器版本3时,我们可以使用它作为Docker托pipe存储库。 在Nexus的设置中,我可以build立一个简单的在线仓库,其中包含仓库URL和特定的端口连接器。

该url如下所示:

https://nexus.domain.tld/repository/my-docker-images/ 

端口连接器提供两个ovbious选项:HTTP和HTTPS。 所以我激活了两个连接器(只需设置一个checkbox),我把端口5000 HTTP和HTTPS 5001。

现在的问题是:

在Jenkins服务器上构buildDocker镜像时,一切正常,直到最终推送到Nexus服务器。

日志输出是:

 The push refers to a repository [nexus.domain.tld:5001/some-test-repo/project-name] Get https://nexus.domain.tld:5001/v1/_ping: dial tcp 123.123.123.123:5001: getsockopt: connection refused 

所以,123.123.123.123代表真正的IP地址。 我search了几个小时,我想这可以跟踪到Docker客户端或Nexus服务器的反向代理configuration的问题。

这里Get https://nexus.domain.tld:5001/v1/_ping似乎是来自Nexus repo服务器的连接testing。

我已经使用TLS / SSL运行Nexus服务器,并且没有任何问题。 Nexus服务器运行在configuration了TLS / SSL的Apache反向代理之后。

现在,这是我的Apache vhostconfiguration:

 <VirtualHost *:80> ServerName nexus.domain.tld Redirect permanent / https://nexus.domain.tld/ </VirtualHost> <VirtualHost *:8081> ServerName nexus.domain.tld Redirect permanent / https://nexus.domain.tld/ </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile "/path/to/file.pem" SSLCertificateKeyFile "/path/to/file.key" SSLCACertificateFile "/path/to/file.pem" ServerName nexus.domain.tld:443 ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8081/ ProxyPassReverse / http://localhost:8081/ RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" ErrorLog /var/log/apache2/nexus/error.log CustomLog /var/log/apache2/nexus/access.log common </VirtualHost> 

这个基本的configuration工作正常。 没遇到任何问题。

我现在已经尝试过了(我想这简直是错的)是在端口5001上添加一个虚拟主机,并在特定path上使用代理传递,如下所示:

 <VirtualHost *:5001> SSLEngine on SSLCertificateFile "/path/to/file.pem" SSLCertificateKeyFile "/path/to/file.key" SSLCACertificateFile "/path/to/file.pem" ServerName nexus.domain.tld:5001 <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /repository/my-docker-images/ http://localhost:8081/ ProxyPassReverse /repository/my-docker-images/ http://localhost:8081/ RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "5001" </VirtualHost> 

没有工作。 我也试着简单的把代理服务器的configuration文件添加到已经存在的虚拟主机的端口443上,这两行代码是:

 ProxyPass /repository/my-docker-images/ https://localhost:5001/ ProxyPassReverse /repository/my-docker-images/ https://localhost:5001/ 

另外,没有工作。

我想,我搞乱了反向代理configuration和所有可能的提示,我发现在search时只是越来越困惑。

所以,为了一个干净的问题:我在做什么错了? 如何在我的Apache虚拟主机configuration文件中包含第二条指令,将Docker的内容推送到Nexus服务器上的端口5001,其中repo的连接器正在侦听?

我在这里错过了什么?

有关信息:Debian 9系统上的Apache 2.4.10。

非常感谢您的帮助。

PS:

还有一点让我困惑的是,5001端口似乎没有在服务器上监听。

使用nmap -sT -O localhost在服务器上运行nmap,给了我这些统计信息:

 PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 443/tcp open https 5000/tcp open upnp 5666/tcp open nrpe 8081/tcp open blackice-icecap 

此外, netstat -tulpen只显示了我的端口5000打开一个Java进程(因为Nexus是一个Java服务器)。 没有端口5001。