HOME | Raspberry Pi | ビジネス書籍紹介 | 2026-01-04 (Sun) Today's Access : 294 Total : 1260992. Since 10 Sep. 2019

ラズパイで作る自宅WEBサーバ構築
第3回 Apache WEBサーバ 設定 2025.06.12

Apache 2.4 WEBサーバをインストールします。
ここでは、ドメイン名を example.jp として説明します。

●Apache 2.4 のインストール


利用できるパッケージのバージョンを確認します
$ apt-cache show apache2
Package: apache2
Architecture: arm64
Version: 2.4.52-1ubuntu4.8

Apache をインストールします
$ sudo apt-get install apache2

バージョンを確認します
$ apache2 -v
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2024-01-17T03:00:18

●サーバー情報の隠匿
$ sudo vi /etc/apache2/conf-enabled/security.conf
ServerTokens Prod ← レスポンスヘッダ内のサーバ情報を隠匿する
ServerSignature Off ← エラーメッセージ内のサーバ情報を隠匿する

●ファイル名省略時のアクセスファイル指定
$ sudo vi /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
 DirectoryIndex index.html index.php
</IfModule>

http://example.jp/ にアクセスした際に、http://example.jp/index.html が、index.html がなければ、index.php が呼び出されます。

●エンコード指定
$ sudo vi /etc/apache2/conf-enabled/charset.conf
AddDefaultCharset UTF-8

●MIME設定の追加
PHP言語を使うために、MIME設定に追加します。
$ sudo vi /etc/apache2/mods-enabled/mime.conf
AddType application/x-httpd-php .php

●mod_rewrite の設定
例をあげて説明すると
http://example.jp/12345
というURLにアクセスした際に Apache で
http://example.jp/index.php?id=12345
などのようにURL変換する機能です。これは便利です。

mod_rewriteが利用可能となっているかを確認します。
$ cat /etc/apache2/mods-available/rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

rewrite 機能を有効化します。
$ sudo a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
 systemctl restart apache2

$ sudo service apache2 restart

●ドキュメントルート・ログファイル等の設定
$ ls -l /etc/apache2/sites-enabled
lrwxrwxrwx 1 root root 35 4ŒŽ 2 21:09 000-default.conf -> ../sites-available/000-default.conf

$ sudo vi /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>

  ServerAdmin webmaster@example.jp
  DocumentRoot /home/example/www-root
  ServerName example.jp
  ServerAlias www.example.jp

  ErrorLog ${APACHE_LOG_DIR}/error.log
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
  TransferLog "|/usr/bin/rotatelogs /var/log/apache2/access_log.%Y%m%d 86400"

  <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^/([0-9)]+)$ /index.php?id=$1 [L]
  </IfModule>

</VirtualHost>
Apache の初期設定ではドキュメント・ルートは /var/www/ ですが、利便性に欠けます。 上記ではドキュメントルートを任意フォルダ(/home/example/www-root)に変更して利用する設定例です。

ServerName が複数存在する場合、 アスタリスクはすべてのアドレスにマッチしますので、主サーバは リクエストを扱いません。 www.example.com は 最初にあるため、優先順位は一番高くなり、default もしくは primary のサーバと考えることができます。 つまり、リクエストが どの ServerName ディレクティブにもマッチしない場合、 一番最初の VirtualHost により扱われます。

これに合わせて、下記のようなフォルダを設定しておきます。

$ mkdir /home/example
$ mkdir /home/example/logs
$ mkdir /home/example/program
$ mkdir /home/example/scripts
$ mkdir /home/example/www-root
$ mkdir /home/example/www-root/images

$ chmod -R 755 /home/example
$ chmod -R 777 /home/example/logs
$ chmod 755 /home/example/scripts/*.sh
$ chmod 644 /home/example/www-root/.htaccess
$ chown ubuntu.ubuntu -R /home/example
作成するフォルダは用途に応じて検討してください。
logs:データベースの定期的なダンプ用に使用しています。
program:外部から直接アクセスできない領域にドキュメントファイル本体を保存しています。
scripts:データベースダンプ用のスクリプトファイルを保存しています。crontab で定期的に実行されます。

●ドキュメント・ルートの権限設定

$ sudo vi /etc/apache2/apache2.conf
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

       ↓

<Directory /home/example/www-root/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
設定を確認して、Apache WEBサーバを再起動します。
$ sudo /usr/sbin/apachectl configtest
Syntax OK

$ sudo /etc/init.d/apache2 restart

●非武装領域と武装領域

非武装領域には、ブラウザから直接アクセス可能なファイルを配置し、武装領域には機密性の高いファイルを配置します。 具体的な例を挙げて説明します。

まず、ブラウザから直接アクセス可能なドキュメントルートに、index.php を配置します。
$ vi /home/example/www-root/index.php
<?php
 require_once('/home/example/program/shadow.php');
?>

index.php は、http://example.jp/index.php のようにURL指定が可能です。
shadow.php は、index.php から間接的に呼びだされます。

次に、ブラウザから直接アクセスできない領域(武装領域)に、shadow.php を配置します。
$ vi /home/example/program/shadow.php
<?php $db_user = 'db_user'; $db_passwd = 'db_passwd'; $page = $_REQUEST['page']; switch ($page) { case 'shopping': require_once('/home/example/program/shopping.php'); break; case 'map': require_once('/home/example/program/map.php'); break; case 'company': require_once('/home/example/program/company.php'); break; } ?>
ドキュメント・ルートは、/home/example/www-root なので、
/home/example/program/shadow.php はブラウザからURL指定をすることができません。
※相対パス指定もできません。

ここで、shadow.php を非武装領域であるドキュメント・ルートに配置して、index.php から呼び出す形にしたとします。
$ vi /home/example/www-root/index.php
<?php
 require_once('shadow.php');
?>

もし、Apache の設定ファイル mime.conf で、
AddType application/x-httpd-php .php
の指定をしていなかったらどうなるでしょう?
index.php のソースコードがそのままテキストとして表示されてしまいます。
index.php 中の require_once は単なる文字列として扱われるので、shadow.php が呼び出されて、テキストとして表示されることはありませんが、shadow.php の存在は暴露されてしまいます。
ブラウザから
http://example.jp/shadow.php
で、呼び出されると、shadow.php のソースコードも表示され、パスワードが丸見えになってしまいます。
データベースシステムのポートを外部に開放していたとしたら、とても怖いですね!
武装領域に配置していれば、ファイル名はわかってもアクセスすることはできません。
サイト公開時にこのような設定ミスをするとは思えませんが、非武装領域には最低限のコードのみを記述して、プログラム本体は極力、武装領域に配置するようにしましょう。
mime がきちんと設定されていた場合でも、ブラウザからとは別の方法で不正なアクセスをされると、非武装領域にあるプログラムファイルは、そのままの形で取得されてしまうこともあります。静的なホームページを作るのであれば、問題ないと思いますが、動的なページを作る際にはとても危険です。
一昔前に、顧客情報のエクセルファイルをこの非武装領域に置いていて、顧客情報がだだ漏れしてしまったという事件もありました。

●.htaccess 設定の注意点
PHPを例にとります。公開サーバーでは、プログラムにエラーがあった場合のエラー表示はオフにしておきましょう。
コーディングミスをした場合、行番号とソースコードの一部が表示されてしまいます。
$ sudo vi /home/example/www-root/.htaccess
....
php_flag display_errors Off
....

試しに php_flag display_errors On にしてみます。
$ vi index.php
<?php
  $db_user = 'db_user';
  $db_passwd = 'db_passwd: ← 閉じの'(カンマ)を忘れてしまった
?>
Parse error: syntax error, unexpected ''db_passwd;' (T_ENCAPSED_AND_WHITESPACE) in index.php on line 3
パスワードが丸見えです。
次に武装領域にあるファイルを間接呼出しする形に書き換えてみましょう。
index.php
<?php
 require_once('/home/example/program/shadow.php');
?>

$ vi shadow.php
<?php
$db_user = 'db_user';
$db_passwd = 'db_passwd: ← 閉じの'(カンマ)を忘れてしまった
?>

Parse error: syntax error, unexpected ''db_passwd;' (T_ENCAPSED_AND_WHITESPACE) in /home/example/program/shadow.php on line 3
武装領域にあるファイルでも、パスワードは丸見えになります。

通常、ドキュメント・ルートにある .htaccess の エラー表示フラグを On にして運用することは考えられませんが、 公開サーバーの中にテスト用サブディレクトリーを作り、このサブディレクトリーに .htaccess を再配置して、エラー表示フラグをOnに再定義して検証されているWEB制作会社もあるようです。サブディレクトリ名を推測されないように工夫はしているようですが、お奨めできません。プログラムの検証は非公開サーバーで実施すべきだと思います。

●Apache WEBサーバ のテスト
以上、リスク管理についてお話しましたが、DNS設定はまだですので、ドメイン名でのアクセスはできません。 テストにはローカルIPアドレスでのWEBアクセスになります。
$ vi /home/example/www-root/index.html
<html><body>Hello!</body></html>

ブラウザから
http://192.168.11.21/index.html

「Hello!」と表示されます。

●不要ファイルの削除
$ sudo rm -rf /var/www

これで、Apache WEBサーバ の設定は終了です。
http:// ~ の設定方法を説明しましたが、 https:// ~ の設定方法についてはそのうち番外編で解説します。

次回は PHP の設定を行います。
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2025.06.09 前準備
2025.06.10 第1回 Ubuntu Server インストール
2025.06.11 第2回 Ubuntu Server 詳細設定
2025.06.12 第3回 Apache WEBサーバ設定
2025.06.13 第4回 PHP 設定
2025.06.14 第5回 MySQL 設定
2025.06.15 第6回 DNS (bind) 設定
2025.06.16 第7回 メールサーバ(Postfix)設定・前編
2025.06.17 第8回 メールサーバ(Postfix)設定・後編
2025.06.18 第9回 ファイアウォール(iptables) 設定
2025.06.19 第10回 crontab 設定
2025.06.20 第11回 運用
2025.06.21 第12回 保守
2025.06.22 第13回 Windows開発環境
2025.07.08 第14回 障害対応 SSD故障

たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」 「一念発起して何かを始めても、いつも三日坊主で終わってしまう」 「色んなことを先延ばしにしたまま、時間だけが過ぎていく」 そこで本書では、そんな著者が独自に開発した、 まったく新しい目標達成メソッド「100日デザイン」について、 その知識と技術を、余すところなくご紹介します。

まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。 ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。

今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。

ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。 29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!

【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。 基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説! 500以上のサンプルを掲載。実行結果も確認。 全24章の包括的なチュートリアル。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。

Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード

電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)

Copyright © 2011-2027 Sarako Tsukiyono All rights reserved®.