我有一个 VPS 和一个来自 OVH 的域名。在我的 VPS 上,我安装了 Artifactory(VPS 也是它的二进制存储库)和 Jenkins(VPS 也是它的从属服务器),以及我需要的构建工具。
Jenkins 和 Artifactory 可以通过 HTTP 按照以下模式访问:
http://my.domain.name.com:port_number
。
我的问题是,如何才能使用:
http://my.domain.name.com/jenkins
或http://jenkins.my.domain.name.com
(当然对于 Jenkins 和 Artifactory 来说)?
另外,我如何确保访问安全(强制 HTTPS 连接并防止使用 HTTP 和其他端口)?
注意:VPS 在 Windows Server 2016 下运行。
答案1
我怎样才能使用
http://my.domain.name.com/jenkins
或http://jenkins.my.domain.name.com
代替(当然对于 Jenkins 和 Artifactory 来说)?
正如评论中所述,您将需要设置一个反向代理。反向代理将接收传入的 Web 请求,例如:
http://jenkins.my.domain.name.com
并转发到正确的目的地:
http://my.domain.name.com:port_number
我有一个来自 OVH 的 VPS 和一个域名。VPS 在 Windows Server 2016 下运行。
Windows Server 2016 通常运行 IIS 10,因此你可能需要URL 重写 2.1和应用程序请求路由 (ARR) 3.0反向代理 Web 请求。根据您的 VPS 提供的 Windows Server 2016 映像,这些可能已安装,也可能尚未安装。
手动安装 URL 重写和 ARR
使用上面提供的 Web 安装程序链接或Microsoft Wep 平台安装程序。
Web 平台安装程序位于IIS 管理器→管理部分(如果已安装):
例如 Web 平台安装程序
URL Rewrite 通常应在 ARR 之前安装。
如果您在安装 URL Rewrite 时遇到问题,您可能需要暂时更改 IIS 版本号。然而,这个问题应该在当前版本的 URL Rewrite 中得到修复。
如何确保访问安全(强制 HTTPS 连接并防止使用 HTTP 和其他端口)?
您可以使用 SSL 证书并绑定,例如:
http://jenkins.my.domain.name.com
仅对端口 443 (HTTPS) 开放。这将阻止任何来自端口 80 的访问。也就是说,URL 将变为 (仅) https://jenkins.my.domain.name.com
。
关于阻止从其他端口的访问,您可能希望通过防火墙阻止http://my.domain.name.com:port_number
外部访问,而localhost:port_number
将其用于反向代理条目。
例子
先决条件
以下示例假设:
您已经在 IIS 中创建新的 HTTP 子域,例如:
http://jenkins.my.domain.name.com http://artifactory.my.domain.name.com
您已使用新的 A 记录更新了域名提供商的子域名,并且您可以在浏览器中成功访问它们。
URL Rewrite 和 ARR 都已安装在您的系统上。
保护子域名
对于这些示例,我假设您没有任何可用的 SSL 证书。虽然我在下面演示了一种安装 SSL 证书的方法,但请注意,获取和安装证书的实际步骤可能会有很大不同,具体取决于颁发证书的机构。
Let's Encrypt 和 ZeroSSL
让我们加密是一家免费的 SSL 证书颁发机构,颁发的 SSL 证书有效期为 3 个月,之后需要(免费)续订。他们通过在线 API 颁发证书,该 API 可从许多网站和命令行实用程序获得,包括由零SSL。
虽然 ZeroSSL 确实有一个用于获取/更新 Let's Encrypt 证书的 Web 界面,但我将重点介绍地穴-LE,ZeroSSL 提供的命令行实用程序。
取得证书
从以下位置获取 Crypt-LE 副本后Do-Know/ZeroSSL GitHub 存储库并确保您可以在浏览器中访问您的子域名,使用以下选项运行 Crypt-LE(le32.exe
或):le64.exe
--key C:\path\to\folder\account_key
--email "[email protected]"
--csr C:\path\to\folder\jenkins.csr
--csr-key C:\path\to\folder\jenkins.key
--crt C:\path\to\folder\jenkins.crt
--domains "jenkins.my.domain.name.com"
--path C:\path\to\subdomain\webroot\.well-known\acme-challenge
--generate-missing
--unlink
--export-pfx "password"
在这种情况下:
C:\path\to\folder
可以存储在任何您希望存储由 Crypt-LE 生成的文件的地方。--key C:\path\to\folder\account_key
是 Let's Encrypt 私人帐户密钥的路径。如果您有现有密钥,则可以使用例如:--key C:\path\to\folder\account_key\lets_encrypt.key
如果您以前从未使用过 Let's Encrypt,
--generate-missing
应该为您生成一个新的帐户密钥。--email
从技术上讲是可选的(我相信)并且仅用于新证书。--csr
,--csr-key
并定义证书签名请求 ( ) 和颁发的 PEM 格式证书文件 ( , )--crt
的位置/文件名。同样,这些都应该由创建(假设它们尚不存在)。.csr
.key
.crt
--generate-missing
--domains
包含您想要注册的子域名(例如jenkins.my.domain.name.com
)。--path C:\path\to\subdomain\webroot\
应该是 IIS 子域名 Web 根目录的路径,而不是 Jenkins 或 Artifactory 本身的路径。.well-known\acme-challenge
需要保持原样。--export-pfx "password"
导出.pfx
适合导入到 IIS 的文件。是将文件导入 IIS"password"
时使用的密码。.pfx
默认情况下,上述命令在 Let's Encrypt 的测试服务器上运行,这些服务器不会颁发有效证书。
一旦您对 Crypt-LE 命令按预期运行感到满意,请删除所有生成的.csr
、.key
和.crt
文件,并将其添加--live
到上述其他选项的末尾。请注意,虽然您可以删除任何生成的 Let's Encrypt 帐户密钥(第一个选项),但这不是必需的,您可以在发出的任何后续命令中指定它的路径。
安装 PFX 文件
一旦文件中包含有效证书.pfx
,即可将其导入 IIS。
打开 IIS 管理器。在服务器级别,选择服务器证书:
例如 IIS 服务器证书选项
在下面服务器证书窗格,
Import...
选择操作:例如 IIS 导入操作
在里面导入证书对话框中,提供文件路径
.pfx
和密码--export-pfx "password"
:例如导入证书对话框
点击(上方)后
OK
,您将返回主页面服务器证书窗格中,您将看到证书的新条目:例如,已安装 PFX 证书
此后您可能需要重新启动服务器以确保证书被正确识别。
绑定 SSL 证书
要将已安装的 SSL 证书绑定到子域,请执行以下操作:
在 IIS 管理器中,选择您的站点并
Bindings
选择操作:例如网站绑定操作
在里面站点绑定对话框中,单击
Add...
:例如,站点绑定对话框
在里面添加站点绑定对话框中,
https
从协议Type
下拉菜单中选择,然后从下拉菜单中选择适当的子域 SSL 证书SSL Certificate
:例如添加站点绑定对话框
点击(上方)后
OK
,您将返回到站点绑定对话框并查看 HTTPS 绑定的新条目:例如,站点绑定对话框
此后,您可能需要重新启动您的网站,以确保您的 HTTPS 设置被正确识别。
您现在应该能够使用例如:
https://jenkins.my.domain.name.com
访问您的子域。如果您想完全阻止从端口 80(HTTP)的访问,只需删除 HTTP 80 绑定即可。但请注意,在续订任何 Let's Encrypt 证书时,您可能需要重新添加它。此外,这显然不能解决阻止问题,例如:
http://my.domain.name.com:port_number
在 Windows 防火墙中。
反向代理
要设置https://jenkins.my.domain.name.com
反向代理,请执行以下操作:
打开 IIS 管理器。在您的站点下,选择URL 重写:
例如 URL 重写选项
总的来说URL 重写窗格,
Add Rule(s)...
选择操作:例如添加规则操作
在里面添加规则
Reverse Proxy
对话框中,选择入站和出站规则模板部分:- 例如,添加规则对话框*
在模板中,
localhost:port
使用添加反向代理规则Inbound Rules
服务器字段。端口应与您希望使用的任何服务(即 Jenkins 或 Artifactory)的端口相对应:例如添加反向代理规则对话框
此后,您可能需要重新启动您的网站,以确保正确识别您的重写规则。
您现在应该能够访问例如 Jenkins:
https://jenkins.my.domain.name.com
您可能需要或不需要启用Outbound
上述重写规则部分。但是,我会先在禁用它们的情况下彻底测试访问。可能还值得一提的是,您应该将Enable SSL Offloading
检查作为一项规则。