15
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【後編】ラズパイ自宅サーバーを外部公開する(nginx編)

15
Last updated at Posted at 2025-12-22

この記事は 前編の続き です。
まだ読んでいない方は、先にこちらを見てください。

前編では、

  • FlaskでWebサーバーを立てる
  • 同一ネットワーク内からアクセスする

ところまでやりました。

後編では、

  • nginxを使ってポート5000を隠す
  • 外部ネットワークからアクセスできるようにする

ところまで進めます。

nginxのインストール

まずは nginx を入れます。

sudo apt install -y nginx

インストール後、起動と自動起動を設定します。

sudo systemctl start nginx
sudo systemctl enable nginx

ここまでで nginx 自体は動いています。

nginxの設定

設定ファイルを編集します。

sudo nano /etc/nginx/nginx.conf

⚠️ 注意
これは nginx.conf を丸ごと書き換える方法 です。
本番や既存環境ではおすすめしませんが、
初心者向け・検証用途 として話を単純にするため、この方法を取ります。

設定内容

とりあえず以下をそのまま入れてください。

user www-data;
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name _;

        location / {
            proxy_pass http://127.0.0.1:5000;

            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;
        }

        # WebSocket対応(今回は不要でも入れておく)
        location /ws/ {
            proxy_pass http://127.0.0.1:5000;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            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;
        }
    }
}

これは、

  • nginxが 80番ポートで待ち受け
  • 中身は Flask(127.0.0.1:5000)に転送

するだけの、超シンプルな構成です。

設定ファイルの確認

設定ミスがないかチェックします。

sudo nginx -t

以下のような文が出ればOKです。

  • syntax is ok
  • test is successful

nginxの再起動

sudo systemctl restart nginx

Flaskサーバーを起動

前編で作った Flask サーバーを起動してください。

python3 server.py

動作確認(同一ネットワーク内)

同じLAN内の端末から、以下にアクセスします。

http://<ラズパイのIP>

ここでポイントは:

  • :5000 を付けなくていい
  • nginx(80番)が受けて、Flaskに流している

ページが表示されたら成功です。

グローバルIPアドレスの確認

次に、外部公開の確認をします。

以下のようなサイトで
サーバーと同じLANに接続した状態で グローバルIPを確認してください。

外部ネットワークからアクセス

次に、

  • モバイル回線
  • 別のWi-Fi

など、サーバーとは違うネットワーク に移動します。

ブラウザで以下にアクセスしてください。

http://<グローバルIPアドレス>

問題なければ、作成したページが表示されます。

表示されない場合

  • ルーターのポートフォワーディング設定ミス
  • 80番ポートが開いていない
  • 回線側(ISP)でサーバー公開が制限されている

特に 後者はどうしようもない ので、その場合は諦めましょう。

一般家庭のグローバルIPアドレスは
数日〜数週間で変わります

「昨日見れたのに今日は無理」は普通に起きます。

おわりに

これで、

  • ラズパイ
  • Flask
  • nginx
  • 外部公開

まで一通り完了です。

次は番外編として、

  • ドメインの設定
  • HTTPS(Let’s Encrypt)
  • セキュリティの最低限

あたりを書く予定です。

⚠️ ドメインは有料なので、
本当に必要かはよく考えてください。

お疲れさまでした 🙌

15
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?