# 使用 Proxy.py 自建 HTTP Proxy

- Link: https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/
- Published: 2022-06-12T06:00:00+08:00
- Author: 白宦成

文章目录

 [Toggle](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#)

 * [原理](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#%e5%8e%9f%e7%90%86)
 * [实际操作逻辑](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#%e5%ae%9e%e9%99%85%e6%93%8d%e4%bd%9c%e9%80%bb%e8%be%91)
    - [1. 在你的节点上安装 Python3 & pip 3](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#1_%e5%9c%a8%e4%bd%a0%e7%9a%84%e8%8a%82%e7%82%b9%e4%b8%8a%e5%ae%89%e8%a3%85_python3_pip_3)
    - [2. 安装 Proxy.py](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#2_%e5%ae%89%e8%a3%85_proxypy)
    - [3. 启动 Proxy 进行测试](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#3_%e5%90%af%e5%8a%a8_proxy_%e8%bf%9b%e8%a1%8c%e6%b5%8b%e8%af%95)
    - [4. 配置 Basic Auth Authentication](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#4_%e9%85%8d%e7%bd%ae_basic_auth_authentication)
    - [5. 配置开机自启动](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#5_%e9%85%8d%e7%bd%ae%e5%bc%80%e6%9c%ba%e8%87%aa%e5%90%af%e5%8a%a8)
 * [总结](https://www.ixiqin.com/2022/06/12/use-the-proxy-py-self-built-http-proxy/#%e6%80%bb%e7%bb%93)

如果你需要对一个集群进行开发，且开发过程中需要访问内网，一个比较常见的方式是建立
虚拟专有网。但倘如你不愿建立虚拟专有网，那么一个比较简单的方式是建立一层 HTTP Proxy
来访问内网当中的数据，你只需要在某一个节点上设定 HTTP Proxy，并在你自己的电脑上配置
HTTP Proxy ，就可以完成使用对应的节点来访问具体的网页，解决 HTTP 访问的问题。

## 原理

HTTP Proxy Servr 的原理并不复杂，就是一个标准的正向代理。你只要能搭建这样的一个服务
即可。

![](https://tva1.sinaimg.cn/large/e6c9d24ely1h341f4087mj21t90g2755.jpg)

## 实际操作逻辑

以下文章以 Debian GNU/Linux 10 为例

### 1. 在你的节点上安装 Python3 & pip 3

Python3 是运行 [Proxy.py](https://github.com/abhinavsingh/proxy.py) 的运行环境，
而 pip3 则是安装 [Proxy.py](https://github.com/abhinavsingh/proxy.py) 的工具。执行
如下命令来安装。

    ```shcb-line-numbers
    apt install python3 python3-pip
    ```

### 2. 安装 Proxy.py

这里我们不使用 Virtual Env 来安装，主要是方便后续加入 Systemd 来进行控制。如果你
习惯使用 Supervisord 来控制的话，就可以使用 Virtual Env 来安装 [Proxy.py](https://github.com/abhinavsingh/proxy.py)。
执行如下命令

    ```shcb-line-numbers
    pip3 install proxy.py
    Code language: CSS (css)
    ```

### 3. 启动 Proxy 进行测试

在你的节点上执行如下命令来启动一个测试服务器。

    ```shcb-line-numbers
    proxy --hostname 0.0.0.0 
    Code language: CSS (css)
    ```

如果你需要监听某一个特定的 IP， 则将 0.0.0.0 修改为你具体的 IP。

配置后，你可以看到如下的输出，则说明已经成功启动了 Proxy 服务器。

![](https://tva1.sinaimg.cn/large/e6c9d24ely1h341kbckxoj21xk06eadr.jpg)

启动完成后，你就可以在本地测试访问如下命令来进行测试。

    ```javascript
    curl -x [服务器IP]:8899  http://httpbin.org/get
    Code language: JavaScript (javascript)
    ```

当你看到如下输出时，确认返回值当中的 origin 是否是你的节点 IP，如果是你的节点 IP
则说明你的 HTTP Proxy 已经配置成功了。后续你就可以通过这个 HTTP Proxy 来进行访问
了。

![](https://tva1.sinaimg.cn/large/e6c9d24ely1h341n60ii2j21b40cuta8.jpg)

测试完成后，你可以执行 Ctrl + C 来关闭当前的 Proxy Server。

### 4. 配置 Basic Auth Authentication

上面配置好了 HTTP Proxy Server，但一个问题是这个 Server 没有安全验证，随时会被别人
所利用。所以我们需要配置一些基本的安全配置，来解决这个问题。

在你的 Proxy.py 当中加入 –basic-auth 选项，则可以实现加入基本的鉴权。其中，用户密码
用英文冒号隔开。比如我需要创建一个用户名是 admin ，密码也是 admin 的proxy ，就可以
执行如下命令。

    ```shcb-line-numbers
    proxy --hostname 0.0.0.0 --basic-auth admin:admin
    Code language: CSS (css)
    ```

### 5. 配置开机自启动

现在 Auth 也有了，但是我们不能总是开着 Terminal 来运行我们的服务，所以一个好的办法
是为其加入 Systemd ，这样我们就可以使用系统自带的能力来完成 Proxy 的自启动了。

执行 `systemctl edit --force --full proxy.service` 来创建一个新的 Systemd 服务，
并在其中加入如下代码并保存。

    ```javascript
    [Unit]
    Description=Proxy Service
    Wants=network.target
    After=network.target

    [Service]
    ExecStartPre=/bin/sleep 10
    ExecStart=proxy --hostname 0.0.0.0 --basic-auth admin:admin
    Restart=always

    [Install]
    WantedBy=multi-user.target
    Code language: JavaScript (javascript)
    ```

保存完成后，执行 `systemctl enable proxy.service` 配置该服务器的开机自启动 & `systemctl
start proxy.service` ，即可实现 Proxy 服务的开机自启动，并在当前启动该服务。

## 总结

有了 HTTP Proxy ，你能以一个更加简单的方式来访问内网当中的服务器。你只需要控制 Proxy
节点的可访问权限，就能很好的处理内网数据的安全问题。
