例子

例子

我有一个 VPS 和一个来自 OVH 的域名。在我的 VPS 上,我安装了 Artifactory(VPS 也是它的二进制存储库)和 Jenkins(VPS 也是它的从属服务器),以及我需要的构建工具。

Jenkins 和 Artifactory 可以通过 HTTP 按照以下模式访问: http://my.domain.name.com:port_number

我的问题是,如何才能使用: http://my.domain.name.com/jenkinshttp://jenkins.my.domain.name.com(当然对于 Jenkins 和 Artifactory 来说)?

另外,我如何确保访问安全(强制 HTTPS 连接并防止使用 HTTP 和其他端口)?

注意:VPS 在 Windows Server 2016 下运行。

答案1

我怎样才能使用http://my.domain.name.com/jenkinshttp://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

如何确保访问安全(强制 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。

  1. 打开 IIS 管理器。在服务器级别,选择服务器证书

    例如 IIS 服务器证书选项

    IIS 服务器证书选项屏幕截图

  2. 在下面服务器证书窗格,Import...选择操作

    例如 IIS 导入操作

    IIS 导入操作截图

  3. 在里面导入证书对话框中,提供文件路径.pfx和密码--export-pfx "password"

    例如导入证书对话框

    导入证书对话框截图

  4. 点击(上方)后OK,您将返回主页面服务器证书窗格中,您将看到证书的新条目:

    例如,已安装 PFX 证书

    已安装 PFX 证书

  5. 此后您可能需要重新启动服务器以确保证书被正确识别。

绑定 SSL 证书

要将已安装的 SSL 证书绑定到子域,请执行以下操作:

  1. 在 IIS 管理器中,选择您的站点并Bindings选择操作

    例如网站绑定操作

    站点绑定操作截图

  2. 在里面站点绑定对话框中,单击Add...

    例如,站点绑定对话框

    站点绑定对话框截图

  3. 在里面添加站点绑定对话框中,https从协议Type下拉菜单中选择,然后从下拉菜单中选择适当的子域 SSL 证书SSL Certificate

    例如添加站点绑定对话框

    添加站点绑定对话框截图

  4. 点击(上方)后OK,您将返回到站点绑定对话框并查看 HTTPS 绑定的新条目:

    例如,站点绑定对话框

    站点绑定对话框截图

  5. 此后,您可能需要重新启动您的网站,以确保您的 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反向代理,请执行以下操作:

  1. 打开 IIS 管理器。在您的站点下,选择URL 重写

    例如 URL 重写选项

    URL 重写选项截图

  2. 总的来说URL 重写窗格,Add Rule(s)...选择操作

    例如添加规则操作

    添加规则操作截图

  3. 在里面添加规则Reverse Proxy对话框中,选择入站和出站规则模板部分:

    • 例如,添加规则对话框*

    添加规则对话框截图

  4. 在模板中,localhost:port使用添加反向代理规则 Inbound Rules服务器字段。端口应与您希望使用的任何服务(即 Jenkins 或 Artifactory)的端口相对应:

    例如添加反向代理规则对话框

    添加反向代理规则对话框截图

  5. 此后,您可能需要重新启动您的网站,以确保正确识别您的重写规则。

您现在应该能够访问例如 Jenkins:

https://jenkins.my.domain.name.com

您可能需要或不需要启用Outbound上述重写规则部分。但是,我会先在禁用它们的情况下彻底测试访问。可能还值得一提的是,您应该将Enable SSL Offloading检查作为一项规则。

相关内容