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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == Raspberry Pi 3でWebサーバを構築する。<br> Webサーバを構築して、PHP等で作成したWebページを介してGPIOを制御するところ…」)
 
 
(2人の利用者による、間の13版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
Raspberry Pi 3でWebサーバを構築する。<br>
Apache HTTP Serverプロジェクトは、UNIXやWindowsを含むOS向けのオープンソースHTTPサーバを開発および保守する取り組みである。<br>
Webサーバを構築して、PHP等で作成したWebページを介してGPIOを制御するところまで記載する。<br>
このプロジェクトの目標は、現在のHTTP標準に同期したHTTPサービスを提供する、安全で効率的かつ拡張可能なサーバを提供することである。<br>
<br>
Apache HTTPサーバ (httpd) は1995年に開始され、1996年4月以来、インターネット上で人気のあるWebサーバとなっている。<br>
2020年2月にプロジェクトとして25回目の誕生日を迎えた。<br>
<br>
Apache HTTP Serverは、Apache Software Foundationのプロジェクトである。<br>
<br>
その他、Raspberry Piでは、WebサーバとPHP等で作成したWebページを介して、GPIOを制御することも可能である。<br>
<br><br>
<br><br>


== Apache2のインストール ==
== Apache2のインストール ==
まず、WebサーバーソフトウェアのApache2をインストールするため、以下のコマンドを実行する。<br>
==== パッケージ管理システムからインストール ====
  sudo apt-get install apache2
まず、Apache2をインストールする。<br>
  sudo apt install apache2
<br>
<br>
インストールが完了したら、Webブラウザに http://localhost と入力する。<br>
Raspberry Piでは、Apache2のデフォルトのドキュメントルートディレクトリは、/var/www/htmlディレクトリである。<br>
"It Works!"と記載された下記のWebページが表示されれば、Apache2のインストールは完了である。<br>
Apache2が正常に動作するかどうかを確認するため、以下に示すようなテストページを作成する。<br>
sudo vi /var/www/html/index.html
<br>
<br>
Apacheのルートディレクトリのパスは/var/www/htmlで、上記のWebページはこのディレクトリにあるindex.htmlである。<br>
<syntaxhighlight lang="html">
<!-- index.htmlファイル -->
 
<html>
    <body>
      <h1>Welcome to Raspberry Pi Web Site</h1>
    </body>
</html>
</syntaxhighlight>
<br>
<br>
また、CGIファイルのディレクトリのパスは/usr/lib/cgi-bin/である。<br>
Webブラウザに、http://localhost と入力する。<br>
ここで、test.cgiファイルを作成して表示する。<br>
"Welcome to Raspberry Pi Web Site"と記載されたWebページが表示されれば、Apache2のインストールは完了である。<br>
test.cgiファイルの内容は下記の通りである。<br>
[[ファイル:Apache2 Raspberry Pi 1.jpg|フレームなし|中央|Apache2_Raspberry_Pi_1.jpg]]
また、一般ユーザでも実行できるようにするため、以下のコマンドを実行する。<br>
<br>
Raspberry Piにおいて、CGIファイルのディレクトリのパスは、/usr/lib/cgi-binディレクトリである。<br>
(ディレクトリを変更する場合は、Apache2の設定ファイルを編集する必要がある)<br>
<br>
動作確認のため、CGIファイルを作成して実行および表示する。<br>
また、一般ユーザがCGIファイルを実行できるようにするため、実行権限を付加する。<br>
  sudo chmod 755 /usr/lib/cgi-bin/test.cgi
  sudo chmod 755 /usr/lib/cgi-bin/test.cgi
 
<br>
  --test.cgiの内容--
  <syntaxhighlight lang="bash">
# /usr/lib/cgi-bin/test.cgiファイル
  #!bin/bash
  #!bin/bash
  echo "Content-type:text/html"
  echo "Content-type:text/html"
  echo "Test!!"
  echo "Test!!"
</syntaxhighlight>
<br>
CGIファイルを実行するため、Webブラウザに http://localhost/cgi-bin/test.cgi と入力する。<br>
Webブラウザに"Test!!"という文字が表示されることを確認する。<br>
<br>
==== ソースコードからインストール ====
Apache2をビルドするために必要なライブラリをインストールする。<br>
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を有効にする場合
<br>
まず、APR(Apache Portable Runtime)をソースコードからインストールする。<br>
[http://apr.apache.org/download.cgi APRの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf apr-<バージョン>.tar.gz
cd apr-<バージョン>
<br>
APRをビルドおよびインストールする。<br>
mkdir builddir && cd builddir
../configure --prefix=<APRのインストールディレクトリ> --enable-threads
make -j $(nproc)
make install
<br>
次に、APR-Utilをソースコードからインストールする。<br>
[http://apr.apache.org/download.cgi APR-Utilの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf apr-util-<バージョン>.tar.gz
cd apr-util-<バージョン>
<br>
APR-Utilをビルドおよびインストールする。<br>
mkdir apr-util-build && cd apr-util-build
../configure --prefix=<APRのインストールディレクトリ> --enable-threads --with-valgrind
<br>
最後に、[https://httpd.apache.org/download.cgi Apache2の公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf httpd-<バージョン>.tar.bz2
cd httpd-<バージョン>
<br>
ビルド用ディレクトリを作成して、Apache2をビルドおよびインストールする。<br>
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
<br>
Apache2サービスを操作するユーザとグループを作成する。<br>
また、デフォルトシェルに/sbin/nologinを指定して、当ユーザでのログインを禁止する。<br>
cd <Apache2のインストールディレクトリ>
sudo groupadd www
sudo useradd www -g www -s /sbin/nologin
sudo chown -R www:www .
<br>
PHPを使用する場合、リクエストされたphpファイルを実行できるようにする。<br>
この設定が無い場合、リクエストが来てもテキストファイルのように.phpファイルの内容を返してしまう。<br>
Apache2の設定ファイルを以下のように編集する。<br>
sudo vi /<Apache2のインストールディレクトリ>/conf/httpd.conf
<br>
# /<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>
<br>
<br>
test.cgiファイルを実行するため、Webブラウザに http://localhost/cgi-bin/test.cgi と入力する。<br>
Apache2のサービスファイルを作成する。<br>
Webブラウザに"Test!!"という文字が表示されれば完了である。<br>
sudo vi /usr/lib/systemd/system/httpd.service
<br>
<syntaxhighlight lang="ini">
# /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
</syntaxhighlight>
<br>
Apache2のサービスファイルを有効にする。<br>
sudo systemctl daemon-reload
<br>
以下のようなエラーが出力される場合がある。<br>
# エラー内容
httpd: Could not reliably determine the server's fully qualified domain name
httpd: apr_sockaddr_info_get() failed
<br>
この時、/<Apache2のインストールディレクトリ>/conf/httpd.confファイルの<code>ServerName</code>に、ドメイン名またはIPアドレスを設定する。<br>
# /<Apache2のインストールディレクトリ>/conf/httpd.confファイル
ServerName <ドメイン名またはIPアドレス>:<ポート番号>  # 例. 192.168.1.100:80
<br>
HTTP/HTTPS通信用にファイアウォールのポートを開放する。<br>
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
sudo firewall-cmd --reload
<br>
Aapche2を開始する。<br>
sudo systemctl start httpd
<br>
Apache2が正常に動作しているかどうかを確認するため、以下に示すようなテストページを作成する。<br>
<u>初期状態では、Apache2のサーバルートディレクトリは、/<Apache2のインストールディレクトリ>/htdocsディレクトリである。</u><br>
vi /<Apache2のサーバルートディレクトリ>/index.html
# または
sudo vi /<Apache2のサーバルートディレクトリ>/index.html
<br>
<syntaxhighlight lang="html">
<!-- /<Apache2のサーバルートディレクトリ>/index.htmlファイル -->
<html>
    <body>
      <h1>Welcome to Raspberry Pi Web Site</h1>
    </body>
</html>
</syntaxhighlight>
<br>
Webブラウザに、http://localhost と入力する。<br>
"Welcome to Raspberry Pi Web Site"と記載されたWebページが表示されれば、Apache2のインストールは完了である。<br>
<br><br>
<br><br>


== PHP7.3のインストールと実行 ==
== CGIの設定 ==
次に、PHP7.3をインストールする。PHP7.3のインストール方法は[[PHP7.3をインストールする方法(Rspberry Pi)|こちら]]を参照する。<br>
まず、Apache2の設定ファイルにおいて、以下に示す赤字の設定を追記する。<br>
PHPが正常に動作するか確認するため、/var/www/htmlに簡単なPHPファイルを作成する。<br>
# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
以下のコマンドでテスト用のPHPファイルを作成して表示する。<br>
# CGI directory exists, if you have that configured.
PHPファイルの内容は下記の通りである。<br>
#
  sudo nano /var/www/html/test.php
<Directory "/srv/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI -Includes
    <span style="color:#C00000">AddHandler cgi-script .cgi .pl</span>
    <IfModule !mod_access_compat.c>
      Require all granted
    </IfModule>
    <IfModule mod_access_compat.c>
      Order allow,deny
      Allow from all
    </IfModule>
</Directory>
<br>
上記の設定を反映させるため、Apache2を再起動する。<br>
sudo systemctl restart apache2
<br>
次に、test1.cgiファイルを作成して表示する。<br>
test1.cgiファイルの内容は、以下の通りである。<br>
以下の例では、CGIファイルのディレクトリのパスは、/usr/lib/cgi-bin/である。<br>
  sudo vi /usr/lib/cgi-bin/test1.cgi
<br>
<syntaxhighlight lang="bash">
# /usr/lib/cgi-bin/test1.cgiファイル
   
   
  --test.phpの内容--
  #!/usr/bin/env bash
  <?php
  phpinfo();
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>"
</syntaxhighlight>
<br>
また、cgiファイルにはPython等も使用できる。<br>
以下の例では、CGIスクリプトにPython3を使用している。<br>
<syntaxhighlight lang="python">
# /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>")
  </syntaxhighlight>
<br>
また、一般ユーザでも実行できるようにするため、以下のコマンドを実行する。<br>
sudo chmod 755 /srv/www/cgi-bin/test1.cgi
sudo chmod 755 /srv/www/cgi-bin/test2.cgi
<br>
<br>
Webブラウザで http://localhost/test.php と入力して、PHPの情報の一覧が表示されていれば、正常に動作している。<br>
test1.cgiファイルおよびtest2.cgiファイルを実行するため、<br>
Webブラウザにそれぞれ http://localhost/cgi-bin/test1.cgi および http://localhost/cgi-bin/test2.cgi と入力する。<br>
Webブラウザに"CGI Shell Web Site"および"CGI Python3 Web Site"と表示されることを確認する。<br>
<br><br>
<br><br>


58行目: 292行目:
Apache2の自動起動を確認するには、以下のコマンドを実行する。<br>
Apache2の自動起動を確認するには、以下のコマンドを実行する。<br>
  ls /etc/rc2.d/
  ls /etc/rc2.d/
[[ファイル:Apache2 Raspberry Pi 2.jpg|フレームなし|中央]]
<br>
<br>
もし、Apache2の自動起動を停止したい場合は、以下のコマンドを実行する。<br>
もし、Apache2の自動起動を停止したい場合は、以下のコマンドを実行する。<br>
65行目: 300行目:
  ls /etc/rc2.d/
  ls /etc/rc2.d/
<br><br>
<br><br>
== PHPのインストール ==
次に、PHPをインストールする。<br>
PHPのインストール手順は、[[インストール - PHP|インストール - PHP]]を参照する。<br>
<br>
PHPが正常に動作するかどうかを確認するため、/var/www/htmlディレクトリに対して、以下に示すPHPファイルを作成する。<br>
sudo vi /var/www/html/index.php
<br>
<syntaxhighlight lang="php">
# /var/www/html/index.phpファイル
<?php
    phpinfo();
?>
</syntaxhighlight>
<br>
Webブラウザで http://localhost/index.php と入力する。<br>
PHPの情報の一覧が表示されている場合は、PHPが正常に動作している。<br>
<br><br>
== PHP-FPMを使用する場合 ==
PHP-FPMを使用する場合、PHP-FPMが動作するユーザ名およびグループ名 (www.confファイルにある<code>user</code>および<code>group</code>) と同名にする必要がある。 (<code>nobody</code>でもよい)<br>
この設定を行わない場合、リクエストが来てもテキストファイルのように.phpファイルの内容を返してしまう。<br>
<br>
Apache2の設定ファイル (httpd.confファイル) において、<code>User</code>および<code>Group</code>を設定する。<br>
sudo vi /<Apache2のインストールディレクトリ>/conf/httpd.conf
<br>
<syntaxhighlight lang="apache">
# /<Apache2のインストールディレクトリ>/conf/httpd.confファイル
User <PHP-FPMが動作する同一のユーザ名またはnobody>
Group <PHP-FPMが動作する同一のグループ名またはnobody>
</syntaxhighlight>
<br><br>


__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>