Apacheのバーチャルホストの設定

独自ドメインを複数取得して複数のサイトを運用したい場合はバーチャルホストを設定します。
CentOS、および、ubuntuにインストールされたApacheにバーチャルホストをそれぞれ設定してみました。OS、Apacheの組み合わせは以下です。

CentOS 6.10 + Apache 2.2.15
ubuntu 18.04 LTS + Apache 2.4.29

※補足:この記事の内容は「ドキュメントルートの変更」をしたあとに行っています。

rootユーザで作業します。

■CentOS 6.10 + Apache 2.2.15 の場合

# cd /etc/httpd/conf
# vi httpd.conf
==============================
Listen 80 (httpd.confに、すでに記載済みであることを確認)
NameVirtualHost *:80 (httpd.confに、すでに記載済みであることを確認)

(以下の内容を、httpd.conf の最後に追加する)

<VirtualHost *:80>
    ServerAdmin root@localhost
    DocumentRoot /var/www/html/XXX (XXXは任意のディレクトリ)
    ServerName www.example1.com (取得した独自ドメイン)
    ErrorLog logs/error_log
    CustomLog logs/access_log combined
    <Directory "/var/www/html/XXX"> (ドキュメントルートにあわせる)
        Options FollowSymLinks・・ (必要に応じてオプションを設定)
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin root@localhost
    DocumentRoot /var/www/html/YYY (YYYは任意のディレクトリ)
    ServerName www.example2.com (取得した独自ドメイン)
    ErrorLog logs/error2_log
    CustomLog logs/access2_log combined
    <Directory "/var/www/html/YYY"> (ドキュメントルートにあわせる)
        Options FollowSymLinks・・ (必要に応じてオプションを設定)
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

(httpd.conf を保存する。)
==============================

# apachectl configtest (httpd.conf に間違いがないかチェックする)
# /etc/rc.d/init.d/httpd restart (Apacheの再起動)

上記の設定の場合、

http://www.example1.com/ でアクセスしてきた場合は、/var/www/html/XXX 配下のコンテンツが表示されます。

http://www.example2.com/ でアクセスしてきた場合は、/var/www/html/YYY 配下のコンテンツが表示されます。

また、error_log と access_log の出力ファイルをわけていますが、同じにしても大丈夫です。

■ubuntu 18.04 LTS + Apache 2.4.29 の場合

/etc/apache2/sites-available 配下にある 000-default.conf をコピーして
001-default.conf を作ります。
# a2ensite 001-default.conf で 001-default.confの設定を有効にしておきます。

001-default.conf では、すでに <VirtualHost> タグを使用しているので(囲っているので)それを利用します。

# vi 001-default.conf
==============================
(以下の内容のように修正、加筆する)

<VirtualHost *:80>
    ServerName www.example1.com (独自ドメインに修正する)
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/XXX (XXXは任意のディレクトリ)
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    #(以下の<Directory>・・</Directory>は追記する)
    <Directory /var/www/html/XXX> (ドキュメントルートにあわせる)
        Options FollowSymLinks・・ (必要に応じてオプションを設定)
        AllowOverride None
        Require all granted
        
    </Directory>
</VirtualHost>

#(以下は、まるまる追記する)
<VirtualHost *:80>
    ServerName www.example2.com (独自ドメインに修正する)
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/YYY (YYYは任意のディレクトリ)
    ErrorLog ${APACHE_LOG_DIR}/error2.log
    CustomLog ${APACHE_LOG_DIR}/access2.log combined
    <Directory /var/www/html/YYY> (ドキュメントルートにあわせる)
        Options FollowSymLinks・・ (必要に応じてオプションを設定)
        AllowOverride None
        Require all granted
        
    </Directory>
</VirtualHost>

(001-default.confを保存する。)
==============================

# apache2ctl configtest (conf に間違いがないかチェックする)
# service apache2 restart (Apacheの再起動)

完了。

ubuntu上のapacheでCGI(Perl)を動かす。

ubuntu、apache、Perlのバージョンは以下です。
ubuntu 18.04 LTS + Apache 2.4.29 + perl 5, version 26

■手順

1.rootにスイッチ
$ su –

2./etc/apache2/conf-available 配下に移動。
# cd /etc/apache2/conf-available

3.cgi-enabled.conf を conf-available の下に新規作成する(cgi-enabled.confとしているが名前はなんでもよい)。
# touch cgi-enabled.conf
# vi cgi-enabled.conf (中身は以下)
==============================
#拡張子 がcgi、および、 pl であるものを CGI として扱います
<Directory "/var/www/html"> (ドキュメントルートにあわせること)
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>

(cgi-enabled.confを保存する。)
==============================

4.cgi-enabled を有効にする。
# a2enconf cgi-enabled

5.CGIモジュールを有効にする。
# a2enmod cgi

6.apacheを再起動する。
/etc/init.d/apache2 restart

これで完了。

ちなみに、perl 5, version 26 だとapacheで以下のエラーとなってしまった。
Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./lib/jcode.pl line …

この場合は、jcode.plを以下のようになおす。
(2箇所あります。有名な話題らしくネットで検索すると同じ話題が見つかります。)

修正前:&init_z2h_euc unless defined %z2h_euc;
修正後:&init_z2h_euc unless defined $z2h_euc_inited;

修正前:&init_z2h_sjis unless defined %z2h_sjis;
修正後:&init_z2h_sjis unless defined $z2h_sjis_inited;

※jcode.plにもバージョンがあるので、新しいものを使用する。
※古いものを使うと上記の修正をしてもエラーなってしまいます(以下)。
syntax error at ./lib/jcode.pl line 299, near "do convf(": …