

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 设置在代理服务器 CodeBuild 中运行所需的组件
<a name="use-proxy-server-transparent-components"></a>

 您需要以下组件才能 AWS CodeBuild 在透明或显式代理服务器中运行：
+  VPC。
+  代理服务器的 VPC 中的一个公有子网。
+  CodeBuild 的 VPC 中的一个私有子网。
+  一个 Internet 网关，允许 VPC 和 Internet 之间进行通信。

 下图显示了组件的交互方式。

![\[图中显示了组件的交互方式。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/codebuild-proxy-transparent.png)


## 设置 VPC、子网和网络网关
<a name="use-proxy-server-transparent-setup"></a>

 要在透明或显式代理服务器 AWS CodeBuild 中运行，需要执行以下步骤。

1. 创建 VPC。有关信息，请参阅《Amazon VPC 用户指南》中的[创建 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)。

1. 在您的 VPC 中创建两个子网。一个是名为 `Public Subnet` 的公有子网，代理服务器将在其中运行。另一个是名为的私有子网，`Private Subnet`在其中 CodeBuild 运行。

   有关信息，请参阅[在 VPC 中创建子网](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)。

1.  创建 Internet 网关，并将其连接到您的 VPC。有关更多信息，请参阅[创建并附加 Internet 网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Attach_Gateway)。

1.  向默认路由表添加一条规则，该规则将来自 VPC 的传出流量路由到 Internet 网关。有关信息，请参阅[在路由表中添加和删除路由](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#AddRemoveRoutes)。

1.  向 VPC 的默认安全组添加一条规则，该规则允许来自 VPC (0.0.0.0/0) 的入站 SSH 流量 (0.0.0.0/0)。

1.  请按照《Amazon EC2 用户指南》中的[使用启动实例向导启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launching-instance.html)来启动 Amazon Linux 实例。当您运行该向导时，请选择以下选项：
   +  在**选择实例类型**中，选择一个 Amazon Linux 亚马逊机器映像（AMI）。
   +  在**子网**中，选择您在本主题的前面步骤中创建的公有子网。如果您使用了建议的名称，则该名称是**公有子网**。
   +  在**自动分配公有 IP** 中，选择**启用**。
   +  在**配置安全组**页面上，对于**分配安全组**，选择**选择现有安全组**。接下来，选择默认安全组。
   +  选择**启动**后，选择现有密钥对或创建密钥对。

    选择所有其他选项的默认设置。

1.  在您的 EC2 实例运行后，禁用 source/destination 检查。有关信息，请参阅 *Amazon VPC 用户指南*中的[禁用 Source/Destination 检查](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck)。

1.  在 VPC 中创建路由表。向路由表中添加一条规则，该规则将发往 Internet 的流量路由到您的代理服务器。将此路由表与私有子网关联。这是必需的，这样才能始终通过代理服务器路由来自私有子网中 CodeBuild 运行的实例的出站请求。

## 安装和配置代理服务器
<a name="use-proxy-server-squid-install"></a>

 有许多可供选择的代理服务器。此处使用开源代理服务器 Squid 来演示如何在代理服务器中 AWS CodeBuild 运行。您可以将相同的概念应用于其他代理服务器。

 要安装 Squid，请通过运行以下命令使用 yum 存储库：

```
sudo yum update -y
sudo yum install -y squid
```

 安装 Squid 后，请按照本主题后面的说明操作来编辑其 `squid.conf` 文件。

## 为 HTTPS 流量配置 Squid
<a name="use-proxy-server-squid-configure-https"></a>

 对于 HTTPS，HTTP 流量封装在一个传输层安全性协议（TLS）连接中。Squid 使用一项名[SslPeekAndSplice](https://wiki.squid-cache.org/Features/SslPeekAndSplice)为的功能从包含请求的互联网主机的 TLS 启动中检索服务器名称指示 (SNI)。这是必需的，因此 Squid 不需要解密 HTTPS 流量。要启用 SslPeekAndSplice，Squid 需要证书。使用 OpenSSL 创建此证书：

```
sudo mkdir /etc/squid/ssl
cd /etc/squid/ssl
sudo openssl genrsa -out squid.key 2048
sudo openssl req -new -key squid.key -out squid.csr -subj "/C=XX/ST=XX/L=squid/O=squid/CN=squid"
sudo openssl x509 -req -days 3650 -in squid.csr -signkey squid.key -out squid.crt
sudo cat squid.key squid.crt | sudo tee squid.pem
```

**注意**  
 对于 HTTP，Squid 不需要配置。它可以从所有 HTTP/1.1 请求消息中检索主机标头字段，该字段指定所请求的 Internet 主机。