ApacheでFoward Proxyを設定する

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

# 0. はじめに

個人的な備忘録としてインストール方法と設定方法をメモっておきます。
WindowsでApacheでForward Proxyを立てて、tunnelingする設定です。

# 1. 前提条件

OS: Windows 11 Pro
IP: 固定IP

# 1. Windows用Apacheのダウンロード

以下のURLから「Apache 2.4 binaries VS17」と「vc_redist_x64」をダウンロードする
https://www.apachelounge.com/download/

今回はx64のバイナリーを使ったので、
- httpd-2.4.62-240904-win64-VS17.zip
- vc_redist_x64

をダウンロードした。

# 2. インストール

## 2-1. vc_redist_x64 を先にインストールする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/8900af9d-c184-a2bd-d714-08f74a1bac4e.png)

::: note info
インストール後に再起動が必要
:::

## 2-2. httpd-2.4.62-240904-win64-VS17.zipを展開する

普通にZipファイルを展開するだけ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/7138f81b-f8c9-2ae5-4f16-fc7907903b4d.png)

## 2-3. Apache24ディレクトリをC：\配下にコピーする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/43148ab7-c42f-5c21-997a-d9683fcb6201.png)

## 2-4. Windows の システム環境変数 PATH に次を追加する

```
C:\Apache24\bin
```

PowerToysの「環境変数」を使うのが楽です。

::: note info
管理者として実行しないと編集できません
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/307cbd5d-1444-cde0-ecbd-55f705f15a38.png)

一番下の行の「直後に挿入」して、`C:\Apache24\bin`を記入して「保存」です。

念のため再起動しておきます。

## 2-5. ApacheをWindowsでサービス起動する

Windowsのコマンドプロンプトを管理者権限で起動して、以下を実行する
```
httpd -k install
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/4a9717ce-fb77-ab24-b6e5-b2eebcefdcaf.png)

以下の画面が表示されるので「許可」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/046888dc-6b3a-370c-3937-ed7a12fa11c8.png)

## 2-6. 一旦挙動確認

以下のファイルの`ServerName`を修正
"C:\Apache24\conf\httpd.conf"

以下のように修正する
```diff
- #ServerName www.example.com:80
+ ServerName localhost:80
```

再起動(は必要ないが)する。
```
httpd -k restart
```

http://localhost を開いて、"It works!"を確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/e704f6b5-3627-3726-5729-2f3f2d12876a.png)

# 3. Proxy設定
## 3-1. proxy.pacファイルを設置する

`C:\Apache24\htdocs` 配下に、`proxy.pac`ファイルを保存する。
以下の`shExpMatch`にはProxy接続先のURLを書いておきます。

```javascript:"C:\Apache24\htdocs\proxy.pac"
function FindProxyForURL(url, host) {
    var proxy = "PROXY ＜WindowsのIPアドレス＞:8080";
    if (
        shExpMatch(url, "https://www.hogehoge.co.jp/*")
    ) {
        return proxy;
    }
    return "DIRECT";
}
```

http://localhost/proxy.pac
で上記のファイルがそのまま表示されるか確認しておきます。

## 3-2. forward_proxy設定

"C:\Apache24\conf\httpd.conf" ファイルに以下の2行を追加します。

```diff
+ # Forward Proxy settings
+ Include conf/extra/forward_proxy.conf
```

場所は、521行目あたりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/2a247755-ae7d-bb7b-f2b1-3ad213466f28.png)

`forward_proxy.conf`ファイルを以下に保存します。

```io:"C:\Apache24\conf\extra\forward_proxy.conf"
Listen 8080

<VirtualHost *:8080>
    ServerName ＜WindowsのIPアドレス＞:8080
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_http2_module modules/mod_proxy_http2.so
    LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
    LoadModule cache_module modules/mod_cache.so
    LoadModule cache_disk_module modules/mod_cache_disk.so
    LoadModule cache_socache_module modules/mod_cache_socache.so
    DocumentRoot "${SRVROOT}/htdocs_proxy/"
    CacheEnable socache /
    <IfModule cache_module>
        CacheQuickHandler off
        CacheLock on
        CacheLockPath "c:/apache_cache/mod_cache-lock"
        CacheLockMaxAge 5

        <IfModule cache_disk_module>
            CacheRoot "c:/apache_cache"
            CacheEnable disk "/"
            CacheDirLevels 2
            CacheDirLength 1
        </IfModule>
    </IfModule>

    <IfModule proxy_module>
        ProxyRequests On
        ProxyVia On
        ProxyAddHeaders Off
        CustomLog "logs/proxy.log" combined
        ErrorLog "logs/proxy_error.log"
        LogLevel info
        <Proxy *>
             Require ip ＜接続元IPアドレス＞/32
        </Proxy>
    </IfModule>
</VirtualHost>
```

## 3-3. "C:/Apache24/htdocs_proxy/" "c:/apache_cache"と ディレクトリを作成

以下のコマンドでディレクトリを作成します。空フォルダーで構いません。

```bat
mkdir "C:\Apache24\htdocs_proxy\"
mkdir "C:\apache_cache"
```

再起動時にワーニングが出るのを避ける為です。

# 4. ブラウザー側にProxy設定を行います。

# 5. まとめ

プロキシーキャッシュも効いて最高です。