「インストール - Apache2(Raspberry Pi)」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
 
337行目: 337行目:


__FORCETOC__
__FORCETOC__
[[カテゴリ:Raspberry_Pi]]
[[カテゴリ:Raspberry_Pi]][[カテゴリ:Web]]

2024年12月29日 (日) 05:49時点における最新版

概要

Apache HTTP Serverプロジェクトは、UNIXやWindowsを含むOS向けのオープンソースHTTPサーバを開発および保守する取り組みである。
このプロジェクトの目標は、現在のHTTP標準に同期したHTTPサービスを提供する、安全で効率的かつ拡張可能なサーバを提供することである。

Apache HTTPサーバ (httpd) は1995年に開始され、1996年4月以来、インターネット上で人気のあるWebサーバとなっている。
2020年2月にプロジェクトとして25回目の誕生日を迎えた。

Apache HTTP Serverは、Apache Software Foundationのプロジェクトである。

その他、Raspberry Piでは、WebサーバとPHP等で作成したWebページを介して、GPIOを制御することも可能である。


Apache2のインストール

パッケージ管理システムからインストール

まず、Apache2をインストールする。

sudo apt install apache2


Raspberry Piでは、Apache2のデフォルトのドキュメントルートディレクトリは、/var/www/htmlディレクトリである。
Apache2が正常に動作するかどうかを確認するため、以下に示すようなテストページを作成する。

sudo vi /var/www/html/index.html


 <!-- index.htmlファイル -->

 <html>
    <body>
       <h1>Welcome to Raspberry Pi Web Site</h1>
    </body>
 </html>


Webブラウザに、http://localhost と入力する。
"Welcome to Raspberry Pi Web Site"と記載されたWebページが表示されれば、Apache2のインストールは完了である。

Apache2_Raspberry_Pi_1.jpg


Raspberry Piにおいて、CGIファイルのディレクトリのパスは、/usr/lib/cgi-binディレクトリである。
(ディレクトリを変更する場合は、Apache2の設定ファイルを編集する必要がある)

動作確認のため、CGIファイルを作成して実行および表示する。
また、一般ユーザがCGIファイルを実行できるようにするため、実行権限を付加する。

sudo chmod 755 /usr/lib/cgi-bin/test.cgi


 # /usr/lib/cgi-bin/test.cgiファイル
 
 #!bin/bash
 
 echo "Content-type:text/html"
 echo "Test!!"


CGIファイルを実行するため、Webブラウザに http://localhost/cgi-bin/test.cgi と入力する。
Webブラウザに"Test!!"という文字が表示されることを確認する。

ソースコードからインストール

Apache2をビルドするために必要なライブラリをインストールする。

sudo apt install libcurl4-openssl-dev libexpat1-dev libnghttp2-dev zlib1g-dev libxml2-dev libjansson-dev \
                 libssl-dev libssl1.0-dev libpcre2-dev libsystemd-dev liblua5.4-dev
                 valgrind valgrind-dbg  # Valgrindを有効にする場合


まず、APR(Apache Portable Runtime)をソースコードからインストールする。
APRの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf apr-<バージョン>.tar.gz
cd apr-<バージョン>


APRをビルドおよびインストールする。

mkdir builddir && cd builddir
../configure --prefix=<APRのインストールディレクトリ> --enable-threads
make -j $(nproc)
make install


次に、APR-Utilをソースコードからインストールする。
APR-Utilの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf apr-util-<バージョン>.tar.gz
cd apr-util-<バージョン>


APR-Utilをビルドおよびインストールする。

mkdir apr-util-build && cd apr-util-build
../configure --prefix=<APRのインストールディレクトリ> --enable-threads --with-valgrind


最後に、Apache2の公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf httpd-<バージョン>.tar.bz2
cd httpd-<バージョン>


ビルド用ディレクトリを作成して、Apache2をビルドおよびインストールする。

mkdir build_Apache2 && cd build_Apache2

../configure --prefix=<Apache2のインストールディレクトリ>                       \
             --with-apr=<APRのインストールディレクトリ>                         \
             --with-apr-util=<APR-Utilのインストールディレクトリ>               \
             --with-included-apr=/<APRのインストールディレクトリ>/include/apr-1 \  # srclib内のAPRとAPR-Utilもビルド対象にする
             --with-mpms-shared=all                                     \  # worker, prefork, eventをビルド対象にする
             --with-pcre=<PCREのインストールディレクトリ>                       \  # 例. /usr/local/src/pcre-<バージョン>/pcre-config
             --with-ssl=<OpenSSLのインストールディレクトリ>                     \  # 例. /usr/local/src/ssl
             --enable-dav --enable-dav-fs                               \
             --enable-deflate                                           \
             --enable-headers                                           \
             --enable-mods-shared=reallyall                             \  # 動的モジュールをビルド対象にする
             --enable-proxy --enable-proxy-ajp                          \
             --enable-rewrite=shared                                    \
             --enable-ssl                                               \  # SSLモジュールをビルド対象にする
             --enable-so                                                \
             --enable-speling=shared                                    \
             --enable-systemd

make -j $(nproc)
make install


Apache2サービスを操作するユーザとグループを作成する。
また、デフォルトシェルに/sbin/nologinを指定して、当ユーザでのログインを禁止する。

cd <Apache2のインストールディレクトリ>
sudo groupadd www
sudo useradd www -g www -s /sbin/nologin

sudo chown -R www:www .


PHPを使用する場合、リクエストされたphpファイルを実行できるようにする。
この設定が無い場合、リクエストが来てもテキストファイルのように.phpファイルの内容を返してしまう。
Apache2の設定ファイルを以下のように編集する。

sudo vi /<Apache2のインストールディレクトリ>/conf/httpd.conf


# /<Apache2のインストールディレクトリ>/conf/httpd.confファイル

LoadModule php_module modules/libphp.so

<FilesMatch "\.php$">
   SetHandler application/x-httpd-php
</FilesMatch>

<IfModule php_module>
   DirectoryIndex index.html default.php index.php
   AddHandler application/x-httpd-php .php
</IfModule>


Apache2のサービスファイルを作成する。

sudo vi /usr/lib/systemd/system/httpd.service


 # /usr/lib/systemd/system/httpd.serviceファイル
 
 [Unit]
 Description=The Apache HTTP Server
 After=network.target remote-fs.target nss-lookup.target
 Documentation=man:httpd(8)
 Documentation=man:apachectl(8)
 
 [Service]
 Type=forking
 #Type=notify
 #EnvironmentFile=/<Apache2の設定ファイルがあるディレクトリ>/conf/httpd.conf
 #Environment=LD_LIBRARY_PATH=/usr/local/ssl/lib:/usr/local/lib:/usr/local/lib64:/usr/lib
 ExecStart=/<Apache2のインストールディレクトリ>/bin/apachectl -k start
 ExecReload=/<Apache2のインストールディレクトリ>/bin/apachectl -k graceful
 ExecStop=/<Apache2のインストールディレクトリ>/bin/apachectl -k stop
 
 #ExecStart=/<Apache2のインストールディレクトリ>/bin/httpd \$OPTIONS -DFOREGROUND
 #ExecReload=/<Apache2のインストールディレクトリ>/bin/httpd \$OPTIONS -k graceful
 #ExecStop=/bin/kill -WINCH \${MAINPID}
 
 # We want systemd to give httpd some time to finish gracefully, but still want it to kill httpd after TimeoutStopSec if something went wrong during the graceful stop.
 # Normally, Systemd sends SIGTERM signal right after the ExecStop, which would kill httpd. We are sending useless SIGCONT here to give httpd time to finish.
 #KillSignal=SIGCONT
 PrivateTmp=true
 
 [Install]
 WantedBy=multi-user.target


Apache2のサービスファイルを有効にする。

sudo systemctl daemon-reload


以下のようなエラーが出力される場合がある。

# エラー内容
httpd: Could not reliably determine the server's fully qualified domain name
httpd: apr_sockaddr_info_get() failed


この時、/<Apache2のインストールディレクトリ>/conf/httpd.confファイルのServerNameに、ドメイン名またはIPアドレスを設定する。

# /<Apache2のインストールディレクトリ>/conf/httpd.confファイル

ServerName <ドメイン名またはIPアドレス>:<ポート番号>  # 例. 192.168.1.100:80


HTTP/HTTPS通信用にファイアウォールのポートを開放する。

sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --reload


Aapche2を開始する。

sudo systemctl start httpd


Apache2が正常に動作しているかどうかを確認するため、以下に示すようなテストページを作成する。
初期状態では、Apache2のサーバルートディレクトリは、/<Apache2のインストールディレクトリ>/htdocsディレクトリである。

vi /<Apache2のサーバルートディレクトリ>/index.html
# または
sudo vi /<Apache2のサーバルートディレクトリ>/index.html


 <!-- /<Apache2のサーバルートディレクトリ>/index.htmlファイル -->
 
 <html>
    <body>
       <h1>Welcome to Raspberry Pi Web Site</h1>
    </body>
 </html>


Webブラウザに、http://localhost と入力する。
"Welcome to Raspberry Pi Web Site"と記載されたWebページが表示されれば、Apache2のインストールは完了である。


CGIの設定

まず、Apache2の設定ファイルにおいて、以下に示す赤字の設定を追記する。

# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/srv/www/cgi-bin">
   AllowOverride None
   Options +ExecCGI -Includes
   AddHandler cgi-script .cgi .pl
   <IfModule !mod_access_compat.c>
      Require all granted
   </IfModule>
   <IfModule mod_access_compat.c>
      Order allow,deny
      Allow from all
   </IfModule>
</Directory>


上記の設定を反映させるため、Apache2を再起動する。

sudo systemctl restart apache2


次に、test1.cgiファイルを作成して表示する。
test1.cgiファイルの内容は、以下の通りである。
以下の例では、CGIファイルのディレクトリのパスは、/usr/lib/cgi-bin/である。

sudo vi /usr/lib/cgi-bin/test1.cgi


 # /usr/lib/cgi-bin/test1.cgiファイル
 
 #!/usr/bin/env bash
 
 echo "Content-Type: text/html"
 echo ""
 echo "<!doctype html>"
 echo "<html><head><title>Test CGI</title></head>"
 echo "<body>"
 echo "CGI Shell Web Site"
 echo "</body>"
 echo "</html>"


また、cgiファイルにはPython等も使用できる。
以下の例では、CGIスクリプトにPython3を使用している。

 # /usr/lib/cgi-bin/test2.cgi
 
 #!/usr/bin/env python3
 
 print("Content-type: text/html\n")
 print("<html><head><title>Test CGI</title></head>\n<body>")
 print("<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">")
 print("CGI Python3 Web Site")
 print("</div>")
 print("</body>\n</html>")


また、一般ユーザでも実行できるようにするため、以下のコマンドを実行する。

sudo chmod 755 /srv/www/cgi-bin/test1.cgi
sudo chmod 755 /srv/www/cgi-bin/test2.cgi


test1.cgiファイルおよびtest2.cgiファイルを実行するため、
Webブラウザにそれぞれ http://localhost/cgi-bin/test1.cgi および http://localhost/cgi-bin/test2.cgi と入力する。
Webブラウザに"CGI Shell Web Site"および"CGI Python3 Web Site"と表示されることを確認する。


Apache2の起動・停止・再起動

Apache2の起動は、以下のコマンドを実行する。

sudo systemctl start httpd


Apache2の停止は、以下のコマンドを実行する。

sudo systemctl stop httpd


Apache2の再起動は、以下のコマンドを実行する。

sudo systemctl restart httpd



Apache2の自動起動の確認・停止

Raspbianの起動時にApache2が自動起動の設定を確認する。(デフォルトでは自動起動になっている)
Apache2の自動起動を確認するには、以下のコマンドを実行する。

ls /etc/rc2.d/
Apache2 Raspberry Pi 2.jpg


もし、Apache2の自動起動を停止したい場合は、以下のコマンドを実行する。

sudo systemctl disable httpd


最後に、Apache2の自動起動が停止されていることを確認するため、再度、以下のコマンドを実行する。

ls /etc/rc2.d/



PHPのインストール

次に、PHPをインストールする。
PHPのインストール手順は、インストール - PHPを参照する。

PHPが正常に動作するかどうかを確認するため、/var/www/htmlディレクトリに対して、以下に示すPHPファイルを作成する。

sudo vi /var/www/html/index.php


 # /var/www/html/index.phpファイル
 
 <?php
    phpinfo();
 ?>


Webブラウザで http://localhost/index.php と入力する。
PHPの情報の一覧が表示されている場合は、PHPが正常に動作している。


PHP-FPMを使用する場合

PHP-FPMを使用する場合、PHP-FPMが動作するユーザ名およびグループ名 (www.confファイルにあるuserおよびgroup) と同名にする必要がある。 (nobodyでもよい)
この設定を行わない場合、リクエストが来てもテキストファイルのように.phpファイルの内容を返してしまう。

Apache2の設定ファイル (httpd.confファイル) において、UserおよびGroupを設定する。

sudo vi /<Apache2のインストールディレクトリ>/conf/httpd.conf


 # /<Apache2のインストールディレクトリ>/conf/httpd.confファイル
 
 User <PHP-FPMが動作する同一のユーザ名またはnobody>
 Group <PHP-FPMが動作する同一のグループ名またはnobody>