「インストール - Apache2(Raspberry Pi)」の版間の差分
(同じ利用者による、間の12版が非表示) | |||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
Apache HTTP Serverプロジェクトは、UNIXやWindowsを含むOS向けのオープンソースHTTPサーバを開発および保守する取り組みである。<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のインストール == | ||
==== パッケージ管理システムからインストール ==== | |||
sudo apt | まず、Apache2をインストールする。<br> | ||
sudo apt install apache2 | |||
<br> | <br> | ||
Raspberry Piでは、Apache2のデフォルトのドキュメントルートディレクトリは、/var/www/htmlディレクトリである。<br> | |||
Apache2が正常に動作するかどうかを確認するため、以下に示すようなテストページを作成する。<br> | |||
sudo vi /var/www/html/index.html | |||
<br> | <br> | ||
<syntaxhighlight lang="html"> | |||
<!-- index.htmlファイル --> | |||
<html> | |||
<body> | |||
<h1>Welcome to Raspberry Pi Web Site</h1> | |||
</body> | |||
</html> | |||
</syntaxhighlight> | |||
<br> | <br> | ||
Webブラウザに、http://localhost と入力する。<br> | |||
"Welcome to Raspberry Pi Web Site"と記載されたWebページが表示されれば、Apache2のインストールは完了である。<br> | |||
[[ファイル:Apache2 Raspberry Pi 1.jpg|フレームなし|中央|Apache2_Raspberry_Pi_1.jpg]] | |||
<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> | |||
<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> | <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> | |||
Apache2のサービスファイルを作成する。<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> | ||
== | == CGIの設定 == | ||
まず、Apache2の設定ファイルにおいて、以下に示す赤字の設定を追記する。<br> | |||
# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased | |||
# CGI directory exists, if you have that configured. | |||
# | |||
sudo | <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ファイル | |||
#!/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>" | |||
</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> | ||
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のインストールは完了である。
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の自動起動を停止したい場合は、以下のコマンドを実行する。
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>