LinuxのPythonで簡易Webサーバーを立てる入門|python3 -m http.serverでWSL2・VPSのファイルをブラウザで確認する方法

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > 【Linux入門】初心者のための基礎知識・講座 > LinuxのPythonで簡易Webサーバーを立てる入門|python3 -m http.serverでWSL2・VPSのファイルをブラウザで確認する方法
「LinuxでHTMLファイルを作ったけれど、ブラウザでどうやって確認すればいいのかわからない。」
「VPSの中にあるファイルをすぐに見たいが、ApacheやNginxをゼロから設定するのは大変すぎる。」

そんな場面で役に立つのが、Python 3に最初から組み込まれているhttp.serverモジュールです。
コマンド1本でWebサーバーが即座に起動し、カレントディレクトリのファイルをブラウザで閲覧できます。設定ファイルも不要で、テストが終わったらCtrl+Cで止めるだけという手軽さが魅力です。

この記事では、WSL2(Windows上のLinux環境)とVPSを想定して、python3 -m http.serverの起動手順からWindowsブラウザでのアクセス方法、VPSでのポート開放、よくあるエラー対処まで初心者向けに解説します。

この記事のポイント

・python3 -m http.server 8000 の1コマンドでWebサーバーが起動する
・WSL2ではWindowsのブラウザから http://localhost:8000 でそのまま開ける
・VPSで外部公開するにはファイアウォールでポートを開放する必要がある
・本番用ではなく開発中の一時確認・ファイル共有用途に使う


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

python3 -m http.serverとは何か

python3 -m http.serverとは、Python 3の標準ライブラリに含まれる簡易WebサーバーをコマンドラインからHTTP形式で起動する機能です。
「-m」は「モジュールを実行する」という意味で、http.serverというPythonモジュールを直接実行します。

Windowsユーザーがファイルをブラウザで確認する場合、普通はHTMLファイルを直接ダブルクリックして開きます。
ところがLinuxのターミナルにはそのような操作がないため、Webサーバーを起動してHTTPでアクセスするのがLinux流の確認方法です。

ApacheやNginxといった本格的なWebサーバーとの違いをまとめると以下のようになります。
比較項目 python3 -m http.server Apache / Nginx
起動速度 コマンド1本で即起動 インストール・設定が必要
設定ファイル 不要 httpd.conf / nginx.conf が必要
停止方法 Ctrl+C で即停止 systemctl stop で停止
用途 開発中の一時確認・ファイル共有 本番サービスの常時稼働
セキュリティ 最小限(本番用途に不向き) 設定次第で本番運用可
python3 -m http.serverは「今すぐ一時的に確認したい」という現場のニーズに非常に適したツールです。
実務でも、開発者がHTMLの表示確認やチームメンバーへのファイル共有のために日常的に使う場面があります。

WSL2でサーバーを起動してWindowsブラウザで確認する手順

WSL2(Windows Subsystem for Linux 2)は、Windows上でLinux環境を動かす仕組みです。
WSL2でhttp.serverを起動した場合、Windowsのブラウザから直接アクセスできます。

1. HTMLファイルを用意してサーバーを起動する

まず確認したいHTMLファイルがあるディレクトリに移動します。
例としてホームディレクトリ直下に簡単なHTMLファイルを作成します。

# ホームディレクトリに移動 $ cd ~ # テスト用HTMLファイルを作成 $ echo '<h1>Hello, Linux HTTP Server!</h1>' > index.html # http.serverを起動(ポート8000で待ち受け) $ python3 -m http.server 8000

実行すると次のようなメッセージが表示されます(環境により異なります)。

出力例(環境により異なります): Serving HTTP on :: port 8000 (http://[::]:8000/) ...

このメッセージが出ている間はサーバーが動いている状態です。
ポート番号を省略した場合もデフォルトで8000番が使われます。

2. WindowsのブラウザでURLを開く

サーバーが起動したまま、WindowsのChromeやEdgeを開き、アドレスバーに次のURLを入力してEnterキーを押します。

・アクセスするURL:http://localhost:8000

WSL2はWindowsのlocalhostをLinux側のlocalhostに自動でつないでくれるため、特別な設定なしにブラウザからアクセスできます。
ディレクトリにindex.htmlがある場合はそのHTMLが表示され、ない場合はファイル一覧が表示されます。

3. サーバーを停止する

確認が終わったら、サーバーを起動しているターミナルで Ctrl+C を押すと停止します。

# Ctrl+C でサーバーを停止 ^C Keyboard interrupt received, exiting.

停止後はポートが解放され、http://localhost:8000 にはアクセスできなくなります。

VPSで外部から接続できるように設定する

さくらVPSやConoHa VPSなど、外部のVPSでhttp.serverを起動する場合は、ファイアウォールでポートを開放しないとブラウザからアクセスできません。
WSL2と異なり、VPSはパブリックIPアドレスを持ちますが、デフォルトではほとんどのポートが閉じられています。

1. ファイアウォールでポートを開放する

Rocky Linux / AlmaLinux(RHEL系)の場合はfirewall-cmdを使います。
Ubuntu系ではufwを使うのが一般的です。

# Rocky Linux / AlmaLinux / RHEL の場合(firewall-cmd) $ sudo firewall-cmd --add-port=8000/tcp --permanent $ sudo firewall-cmd --reload # Ubuntu の場合(ufw) $ sudo ufw allow 8000/tcp

【注意】ポートを開放すると、インターネット上の誰でもそのポートにアクセスできるようになります。
機密ファイルが入ったディレクトリでhttp.serverを起動しないよう注意してください。
確認が終わったら必ず firewall-cmd --remove-port や ufw delete allow でポートを閉じましょう。

2. ブラウザでアクセスするURLを確認する

VPSのパブリックIPアドレスを確認して、ブラウザからアクセスします。

# VPSのIPアドレスを確認する $ ip addr show | grep "inet " | grep -v 127.0.0.1 出力例(環境により異なります): inet 203.0.113.10/24 brd 203.0.113.255 scope global eth0

上の例であれば http://203.0.113.10:8000 でアクセスできます。
メルマガ登録後に受け取れる「Linuxサーバー構築入門マニュアル(図解60P)」では、VPSの初期設定からファイアウォール設定まで順を追って解説しています(無料マニュアルのダウンロードはこちら)。

よく使うオプションと活用パターン

python3 -m http.serverにはいくつかの便利なオプションがあります。
よく使う組み合わせをまとめました。
やりたいこと コマンド
ポート8000で起動する(デフォルト) python3 -m http.server 8000
ポート9000に変更して起動する python3 -m http.server 9000
ローカルのみアクセス可能にする python3 -m http.server 8000 --bind 127.0.0.1
特定のディレクトリを公開する python3 -m http.server 8000 -d /var/www/html
IPv4のみで起動する python3 -m http.server 8000 --bind 0.0.0.0
「--bind 127.0.0.1」オプションは、WSL2で起動するときにWindowsからのアクセスだけを許可したい場合(外部には出さない)に有効です。
「-d」オプションは、カレントディレクトリ以外のパスを公開したいときに使います。

よくあるエラーの対処法

1. ブラウザに「接続できませんでした」が出る

サーバーを起動してもブラウザに「接続できませんでした」「ERR_CONNECTION_REFUSED」と出る場合、主な原因は次の3つです。

・ポート番号が間違っている:URLのポート番号と起動時のポート番号が一致しているか確認する
・サーバーがまだ起動中か確認する:ターミナルでCtrl+Cで止めていないか確認する
・VPSでファイアウォールが開いていない:firewall-cmdまたはufwでポートを開放する

ssコマンドでサーバーが実際にポートを待ち受けているか確認できます(環境により異なります)。

# ポート8000が待ち受け状態にあるか確認する $ ss -tlnp | grep 8000 出力例(環境により異なります): LISTEN 0 5 0.0.0.0:8000 0.0.0.0:* users:(("python3",pid=12345,fd=5))

pid=12345 のようにpythonのプロセスIDが表示されれば、サーバーは正常に動いています。

2. 「OSError: [Errno 98] Address already in use」が出る

「Address already in use(ポートがすでに使用中)」エラーは、同じポートですでに別のプロセスが動いているときに出ます。
典型的なケースとして、ターミナルを誤って閉じてしまいサーバープロセスが残り続けるケースが挙げられます。

# ポート8000を使っているプロセスを確認する $ ss -tlnp | grep 8000 # プロセスIDを確認して停止する(例: pidが12345の場合) $ kill 12345

または別のポート番号(例: 8080)に変えてサーバーを再起動することでも回避できます。

本記事のまとめ

python3 -m http.serverの使い方をまとめます。
やりたいこと コマンド / 操作
ポート8000でサーバーを起動する python3 -m http.server 8000
WSL2からWindowsブラウザでアクセスする http://localhost:8000 を開く
VPSで外部からアクセスできるようにする firewall-cmd or ufw でポート開放後にIPアドレス:8000 を開く
特定のディレクトリを公開する python3 -m http.server 8000 -d /対象パス
ローカルのみ接続可にする python3 -m http.server 8000 --bind 127.0.0.1
サーバーを停止する ターミナルで Ctrl+C を押す
ポート使用状況を確認する ss -tlnp | grep 8000
python3 -m http.serverは「インストール不要・設定不要・1コマンドで起動」という手軽さが最大の強みです。
開発中のHTMLファイルの確認や、チームメンバーへの一時的なファイル共有など、実務の現場でも気軽に使える便利なツールです。ただし、本番サービスへの適用は避け、あくまで開発中・確認用として使ってください。

次に読む関連記事

http.serverを使いこなすには、ネットワークの基礎やシェルの知識があると運用の幅が広がります。

・ssコマンドでソケット情報を確認する方法|LISTEN・ESTABの見方やポート確認も ~ サーバーが正常に待ち受けているか確認する
・firewall-cmdコマンドでポートを開放・管理する方法|ゾーン・サービス・永続化の使い分け ~ VPSでポートを開放する基本コマンド
・curlコマンドでHTTP通信を行う方法|GET・POSTやヘッダー確認も ~ ブラウザ以外でサーバーの応答を確認する
・systemctlコマンドの使い方|サービスの起動・停止・自動起動設定 ~ 常時稼働のWebサーバーをサービスとして管理する
・set -xコマンドでシェルスクリプトをデバッグする方法|set -e・set -uとの組み合わせも ~ サーバー起動をシェルスクリプトで自動化する
・Linuxサーバー構築の標準構成ガイド|Webアプリ向けディレクトリ・サービス・パーティション設計 ~ 本格的なWebサーバー構築の全体像を把握する
・AIにLinuxトラブルを解析させる方法|journalctl・dmesgのログをChatGPT・Claudeに渡すコツ ~ 接続エラーのログをAIで素早く解析する
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
Webサーバーの仕組みからファイアウォール・セキュリティ設定まで、現場ですぐ使える知識を一冊にまとめています。
無料マニュアルを受け取る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。