nginxでリバースプロキシをしてsakuを動かす

bash

P2P匿名掲示板を構成するプロトコルである shingetsu(新月) をpythonで実装した saku(朔)というプログラムがあります。2023年07月現在、参加しているノード数は15前後。一人で何台か動かしている方もいるようなので10人程度が利用しているのだと思います。

参加人数が少ないので投稿は独り言のようなモノになってしまいがちです。しかし、今の時代はコミニュケーションツールには事欠きませんで、返事が欲しいのならSNSや5chへ行けば良いのです。

sakuをプロキシの下で動かす

前提条件として下記構成を目指します。

  1. 個人または限定されたユーザが利用する
  2. SSL通信で掲示板へのアクセスする
  3. sakuを直接外へさらさない

※1:
sakuは誰でも利用できるように設定(公開ゲートウェイ)可能です。しかし、公開ノードとして運用していた時にISPから警告を受けたことがあり、それ以来もっぱら個人専用として動かしています。
※2:
SSL通信でなければ最近のブラウザは警告マークが表示されたりと落ち着かないので。
※3:
深い意味はないのですが。

このような構成を目指します。

 

1.DNS Aレコードを登録

sakuへアクセスする為にAレコードを登録します。同時にAAAAレコードも用意すればsaku自体はIPv4にしか対応していませんが、nginxがプロキシするのでユーザはIPv6でsaku掲示板を利用できるようになります。

この A 及び AAAA レコードを使い nginx にvirtualhost を作成します。

2. SSL証明書を準備

すでにSSL証明書を持っている場合はソレを。持っていなければLet’s encrypt. 等でSSL証明書を取得します。取得した証明書はnginxの設定ファイル内に記述します。

3. nginxの設定

最初に上げたようにnginxはローカルアドレス(今回は1台ですべてを賄うのでloopback)へ受け取ったリクエストを転送するようにproxyとして設定します。

gateway.cgi(掲示板アクセス用 設定ファイル)

サーバ間通信用設定ファイル

4. sakuにパッチ当て

  • 0.0.0.0 以外にbindできるようにしたパッチ
  • リモートホストをHOST_ADDRではなく HTTP_X_FORWARDED_FORから取得するようにしたパッチ
    • PINGを受けた際、PONGに相手のアドレスを添えて返事をしなければならないのですが、nginx配下は HOST_ADDRで相手のアドレス取得に失敗するので・・・

上記の修正をします。パッチ内容は github を参照してください。

5. sakuの設定ファイル

saku.ini の [Network] セクションに、bindアドレスを記述します。

5. 動作確認

リダイレクト

BASIC認証

認証後

 

カテゴリー PC

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)