前回は、Nuroのルータ交換に伴い、MAP-E方式になり、一旦は詰んだ自宅WEBサーバの公開についてGCP側でVPN(Wireguard)+リバースプロキシ(Nginx)を構築し、VPN経由で自宅WEBサーバ公開の復旧に漕ぎ着けた話をしました。

というわけでタイトルの通り、今回はその話の続きとなります。


OpenLiteSpeedからNginxにSSL終端を引っ越し

我が家は以下の構成図のような環境構成になっております。
これまではOpenLiteSpeed上にSSL終端を配置していましたが、図の通り、GCPのNginxに終端を移動しました。

Nginxは高機能(ドメインやIPやポートによって振り分け可能)なのにも関わらず、これまでStreamで全トラフィックを対向のWiregurad+Haproxyに通すだけという使い方となっていました。

そして、これまで高機能で重宝していたOpenLiteSpeedですが、Nginxが最初の入り口となるのであれば、OpenLiteSpeedはシンプルな使い方にした方がいいのではと考えました。

そこで、今回はまずNginxでSSL終端を担当させ、OpenLiteSpeedは「HTTP専用バックエンド」としてシンプル運用に切り替える方針にしました。OpenLiteSpeedからはSSL・リダイレクト設定(htaccessによる各ドメイン別のリライト箇所)を除外し、WebアプリやCMS本体としての役割に専念させることにします。

以下の通り、設定を修正していきました。


SSL取得

GCPのサーバ(Nginx)上にてletsencryptでSSLを取得します。
まずはcertbotをインストール。

pip install certbot certbot-dns-route53

次にawsのcredentials、configを設定し、以下を実行して取得します。

certbot certonly \
        --dns-route53 \
        -d 1banzaka.com \
        -d *.1banzaka.com \
        -m xxxxxxxxx@gmail.com \
        --post-hook "systemctl reload nginx"

OpenLiteSpeed設定

OpenLiteSpeedのリスナーの443は全て削除。
バーチャルホスト側のSSL設定箇所も全て空欄としました。

.htaccessは以下をコメントアウト

# RewriteCond %{HTTPS} !on
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

これで、httpアクセスされてもhttpsにリダイレクトするのではなく、ポート80で来たらそのまま返す設定となりました。


Haproxy設定

以下の通り80のみ通すようにしました。
これまでは443も通していましたが、削除しました。

frontend haweb
    bind *:80
    mode http
    default_backend back_web

backend back_web
    server web1 192.168.1.xxx:80 check

Nginx設定

以下の通り、streamをコメントアウトし、httpで設定しました。

user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

#stream {
#    server {
#        listen 443;
#        proxy_pass 10.8.0.x:443;
#    }
#    server {
#        listen 80;
#        proxy_pass 10.8.0.x:80;
#    }
#}
http {
    # 共通SSL設定
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_prefer_server_ciphers on;

    # osmaniax.1banzaka.com → 10.8.0.x:80
    server {
        listen 443 ssl;
        server_name osmaniax.1banzaka.com;

        ssl_certificate /etc/letsencrypt/live/1banzaka.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/1banzaka.com/privkey.pem;

        location / {
            proxy_pass http://10.8.0.x:80; #HaproxyのVPNアドレス
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    # 80番ポートのリダイレクト(全ドメイン共通)
    server {
        listen 80;
        server_name osmaniax.1banzaka.com ;
        return 301 https://$host$request_uri;
    }
}

まとめ・振り返り

作業の途中で「リダイレクトループ」や「Bad Gateway」など発生しながらも、エラー箇所を特定して無事設定させることができました。

複雑にはなりましたが、役割を分散させることで、軽量リソースで動かすことが可能になったかと思い、今回の環境構成変更には満足しています。

今後は軽量なgitサーバをローカル環境に準備し、手元のVSCodeで編集したLambda関数のpythonのデプロイへ連動させる仕組みを構築していく予定です。