Apache 2.4 on Ubuntuの設定

目的

Apacheの設定ファイルの構成

apache2.confの記載

  • The configuration layout for an Apache2 web server installation on Ubuntu systems is as follows:
/etc/apache2/
|-- apache2.conf
|       `--  ports.conf
|-- mods-enabled
|       |-- *.load
|       `-- *.conf
|-- conf-enabled
|       `-- *.conf
|-- sites-enabled
|       `-- *.conf
  • apache2.conf is the main configuration file. It puts the pieces together by including all remaining configuration files when starting up the web server.
  • ports.conf is always included from the main configuration file. It is used to determine the listening ports for incoming connections, and this file can be customized anytime.
  • Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/ directories contain particular configuration snippets which manage modules, global configuration fragments, or virtual host configurations, respectively.
  • They are activated by symlinking available configuration files from their respective *-available/ counterparts. These should be managed by using our helpers a2enmod, a2dismod, a2ensite, a2dissite, and a2enconf, a2disconf . See their respective man pages for detailed information.
  • The binary is called apache2. Due to the use of environment variables, in the default configuration, apache2 needs to be started/stopped with /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not work with the default configuration.

サマリー

  • apache2.conf
    • Webサーバとしての基本設定
    • 非公開の自宅サーバなら変更不要と考えてよし
  • ports.conf
    • ポートの設定
    • 標準のhttp/80とhttps/443でよいなら変更不要
  • conf-availableとconf-enabled
    • conf-availableが、設定ファイル置き場(雛形と設定を兼ねる)
    • conf-enabledが、有効化した設定ファイル置き場(conf-availableに対するsymbolic link)
    • 設定ファイルの有効化と無効化は、a2enconfとa2disconfで変更する
  • site-availableとsite-enabled
    • site-availableが、仮想ホストの設定置き場
    • site-enabledが、有効化した仮想ホストの設定ファイル置き場site-availableに対するsymblic link)
    • 設定ファイルの有効化と無効化は、a2ensiteとa2dissiteで変更する
  • mods-availableとmods-enabled
    • mods-availableが、利用可能なモジュール置き場
    • mods-enabledが、有効化したモジュール(mods-availableに対するsymbolic link)
    • モジュールの有効化と無効化は、a2enmodとa2dismodで変更する

Apache2起動時のAH00558エラー

  • Apache2を起動する時にAH00558エラーが表示される。ホスト名の定義に関するエラーで、実用上の問題はなさそうだが、気持ち悪いので対応しておくことに。
$ sudo apachectl graceful
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
  • ホスト名を確認
$ hostname
rp3
  • /etc/apache2/conf-available/fqdn.confにホスト名を記載する
$ cd /etc/apache2/conf-available/
$ sudo touch fqdn.conf
$ cat fqdn.conf 
ServerName rp3
$ sudo a2enconf fqdn
$ sudo apachectl graceful
$ sudo apachectl graceful

php(pukiwiki)

  • php自体の動作確認はできているので、コンテンツとしてのpukiwikiが動作するかどうか。
  • 何も考えずにpukiwikiにアクセスすると、phpのエラーが発生して動作しない。原因は、PHP5 -> PHP7へのアップグレードで、オブジェクトの渡し方に関するsyntaxが変更になったことに起因するようだ。ならば、pukiwikiを最新版にアップグレードすれば解決するはず。
[Sat Jun 15 20:20:28.888350 2019] [php7:emerg] [pid 5149] [client 192.168.100.2:64541] PHP Parse error:  syntax error, unexpected 'new' (T_NEW) in /home/cutxout/public_html/wiki/lib/func.php on line 463, referer: http://192.168.100.4/index2.html
  • pukiwiki公式サイトのアップグレード手順に沿ってデータを移行して、無事に動くことを確認。動作もこころなしかきびきびしている気がする。
  • ここで気づいたのが、文字コードをどうするか問題。当時のコンテンツはeucで構成されているが、今の主流はutf-8で公式サイトもこちらを推奨している。今のところeuc版も提供されているが、これを機にutf-8に移行してしまうのがよさそうである。

pukiwikieucからutf-8へ移行

  • utf-8版を展開してリネーム
$ unzip pukiwiki-1.5.2_utf8.zip
$ mv pukiwiki-1.5.2_utf8 wiki8
  • コンテンツをコピー
$ cp -R wiki/attach/* wiki8/attach/
$ cp -R wiki/backup/* wiki8/backup/
$ cp -R wiki/cache/* wiki8/cache/
$ cp -R wiki/wiki/* wiki8/wiki/
  • 文字コードeucからutf-8に一括変換
    • ここで躓いてしまった。nkf、convertcode.inc.php、data2utf8.phpなどのツールを試してみたのだが、いずれもうまく行かない。

cgiの環境構築

$ cat /etc/apache2/sites-available/rp3.conf 
<VirtualHost *:80>
        ServerName www.example.com
        ServerAdmin webmaster@localhost
        DocumentRoot /home/cutxout/public_html

        DirectoryIndex index.html index.html.var index.cgi index.php
        AddHandler cgi-script .cgi .pl

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory "/home/cutxout/public_html">
                Require all granted
                Options +ExecCGI
        </Directory>

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
  • テストコードで動作確認
$ cat test.cgi 
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print '<html>';
print "<body>&nbsp;<p><h1>GCI with Perl</h1>";
print "CGI with Perl is ready ...</body></html>";

感想

  • ここでの最終目標はハイパー日記システムのインストールだったけど、トラブル続きで一筋縄ではいかなそうな気がするので、別ページにまとめることにしましょう。
  • 最近のLinuxの環境構築はとてもよくできていて、個別にソースコードからコンパイルしていた頃とは隔絶の差ですね。ほぼデフォルトでここまで動いていて、苦労しているのはレガシーをなんとかしようとしているからと言う自業自得以外何物でもないわけで。