テレホタイムの間だけアクセスできるMisskeyサーバーを作る

特定の時間帯だけ閉鎖するMisskeyサーバーを作る2025

かんなすきー Advent Calendar 2025 - Adventar 5日目の記事です。

テレホタイム(23時から翌8時)の間だけアクセスできるMisskeyサーバーを作るため、Nginxと格闘してきました。
正直なところ、時間限定Misskeyサーバーの需要は限りなく低いと思いますが、何かの役に立つかもしれないので残しておきます。

過去の私は 特定の時間帯だけ閉鎖するMisskeyサーバーを作るのように、ファイルが存在すればアクセスを拒否するという仕組みで実装していました。

今回はNginxの派生版であるOpenRestyを使った方法を紹介します。
本当はCaddyでやりたかった(設定ファイルがシンプルで済む)のですが、ChatGPTに聞いたところ上記のファイル存在フラグでしか実現できなさそうなので、今回は諦めました。
(ChatGPTには、Caddyでもできるよと言われたのですが、あれこれ試して数時間ほど溶かしてできないことがわかりました。AIのいうことを信じてはいけない。)
(Caddyの有志が公開しているcronプラグインを用いれば実現できそうな気もします。今度試すかもしれません。)

OpenResty版

OpenRestyはNginxにLuaモジュールなど便利な拡張機能を盛り込んだソフトウェアです。
今回はLuaを用いて時間制限を実装します。
if time.hour >= 8 and time.hour < 23 then の条件に当てはまる場合は503を返し、それ以外はMisskeyにアクセスできます。
また、client_ipが特定のIPアドレスの場合は、全時間帯Misskeyにアクセスできます。
こちらの方が、シンプルで読みやすいですね。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
    # Proxy locations
    location ~* (/inbox$|/api/admin) {
        proxy_pass http://127.0.0.1:3000;
    }
    location / {
        rewrite_by_lua_block {
            local time = os.date("*t", os.time())
            --local client_ip = ngx.var.remote_addr
            --if client_ip ~= "127.0.0.1" then
                if time.hour >= 8 and time.hour < 23 then
                        ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
                end
            --end
        }
        proxy_pass http://127.0.0.1:3000;
    }

ソースコードも置いておきます。
https://github.com/anahibi/teleho-misc/blob/main/nginx/conf.d/teleho.conf

あとがき

この記事を執筆している時点では、テレホ鯖はOpenRestyを利用しています。
Misskey含めて全てをDocker化したので、依存関係を気にする必要もありません。とてもいい。
そのうち、Dockerコンテナに押し込んだ話も書きたいとは思います。書かないかもしれない。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。