在一个简短的描述中的问题:
我正在运行一个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。