Apache2.0から2.2、そして最新の2.4系へアップデートしました
では、そのままインストールしてしまいます
オプションはデフォルトのまま、沢山ありすぎて良く分かりません。
# cd /usr/ports/www/apache24
# make install clean
次に設定をします
confファイルは /usr/local/etc/apache24/httpd.conf です。
ServerRoot "/usr/local" Listen 80 LoadModule 以下沢山 AddHandler cgi-script .cgi .pl .rbx User www Group www Timeout 600 ServerAdmin www@hogehoge.mydns.jp ServerName hogehoge.mydns.jp:80 <Directory "/usr/local/www"> Options -Indexes +FollowSymLinks +ExecCGI #-Indexesはファイルを見せないため # .htaccessを使用する場合Allにしておく AllowOverride All Order allow,deny Allow from all Deny from アクセスさせたくないドメイン、例えば.krとか </Directory> DirectoryIndex index.html index.htm index.php index.cgi index.pl index.shtml index.shtm AddHandler cgi-script .cgi .pl .rbx # エラーした場合に表示するページ ErrorDocument 500 /500.html ErrorDocument 404 /404.html ErrorDocument 403 /403.html # httpsでアクセスしてきたときの設定関係 Include etc/apache24/extra/httpd-ssl.conf Include etc/apache24/Includes/*.conf # バーチャルホストなど Include etc/apache24/extra/httpd-vhosts.conf # それ以外にlog関係はお好みで変更する
/etc/rc.conf
apache24_enable="YES"
起動させる
で起動できます。
# /usr/local/etc/rc.d/apache24 start
動くようになったら他のportsインストール時にApache24である事を伝えるために
/etc/make.confへ下記を追記します。
DEFAULT_VERSIONS+=apache=2.4
SSL証明書ですが、オレオレ証明でも良いのですがせっかくなので無料で証明が取れるLet's Encrypt SSLを使用してみます。
まずはcertbotをインストールします。
# cd /usr/ports/security/py-certbot
# make install clean
証明書を取るサーバーから下記コマンドで証明書が入手できます。
その際に、ドメイン名で逆引き出来てHPアクセスできたらになりますのでApacheが動いていることが条件になります。
# certbot certonly --webroot -w /usr/local/www/ -d hogehoge.mydns.jp -m user@hogehoge.mydns.jp --agree-tos
これで証明書が下記のファイルとして使用できます。
証明書
/usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/cert.pem
証明書+中間CA証明書
/usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/fullchain.pem
秘密鍵
/usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/privkey.pem
中間CA証明書
/usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/chain.pem
無料なので証明期間は90日と短いです。
よってcronで下記コマンドを一定期間で回すことで自動更新しましょう。
他にもsaslやwebminなどにも使用していたら、証明書更新後に再起動するようにcronしておきましょう。
/usr/local/bin/certbot renew --force-renew && /usr/local/etc/rc.d/apache24 restart
ドメイン名などが変わった場合、過去の設定を削除しましょう。
設定ファイルは
/usr/local/etc/letsencrypt/renewal/
にあります。
Let's Encrypt SSLの有効期限は90日です。
忘れないようにこれも自動化しておきましょう。
/root/certupdate
#!/bin/sh
export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin
# 証明書取得
/usr/local/bin/certbot renew --force-renew
# 権限設定しないと動かない場合があるので
chmod -R 600 /usr/local/etc/letsencrypt/archive/hogehoge.mydns.jp/*
chmod -R 600 /usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/*
# Apache再起動
/usr/local/etc/rc.d/apache24 restart
# sendmail再起動
/etc/rc.d/sendmail restart
# saslauthd再起動
/usr/local/etc/rc.d/saslauthd restart
# webmin再起動
/usr/local/etc/rc.d/webmin.sh restart
このシェルスクリプトを90日未満で動かせば自動更新できます。
私は念のために1か月に1回回しています。
1回ミスしても次は確実に90日以内なので。
2か月にすると1回ミスすると次は既に90日を過ぎますし、1.5ヵ月は設定できないので。
Apache2.4ではhttpd-ssl.confで設定します。
/usr/local/etc/apache24/extra/httpd-ssl.conf
Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLHonorCipherOrder on
SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout 300
<VirtualHost _default_:443>
DocumentRoot "/usr/local/wwwssl" #SSLのルートディレクトリ
ServerName hogehoge.mydns.jp:443
ServerAdmin www@hogehoge.mydns.jp
ErrorLog "/var/log/httpd-error.log"
TransferLog "/var/log/httpd-access.log"
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/hogehoge.mydns.jp/chain.pem"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/www/wwwssl"> #SSLのルートディレクトリ
SSLOptions +StdEnvVars
Options -Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Deny from アクセスさせたくないドメイン
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/var/log/httpd-ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
次に設定でhttpd.confを編集します
/usr/local/etc/apache24/httpd.conf
あとは再起動で有効になります
LoadModule ssl_module libexec/apache24/mod_ssl.so
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
Include etc/apache24/extra/httpd-ssl.conf
まず、使用するデーターベースをインストールします
私はMySQL派(マイナーですが)なのでMySQLをインストールします。
これで必要な他のportsもインストールしてくれます
# cd /usr/ports/databases/mysql80-server
# make install clean
最初にユーザー設定をしますが、最初のパスワードは
/var/log/mysqld.log
に書かれているというのですが、なぜか私の環境ではログが排出されずログインできないで困りました。
そこで裏技を
/usr/local/etc/mysql/my.cnf
に追記
[mysqld]
skip-grant-tables
mysqlを起動
# /usr/local/etc/rc.d/mysql-server start
mysqlへログインして新しいパスワードを設定する。
これでパスワードを更新できました。
# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35-log Source distribution
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@localhost [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
root@localhost [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '新規パスワード';
Query OK, 0 rows affected (0.00 sec)
root@localhost [(none)]> quit
Bye
#
そしてphpをインストールします
するとオプションがいろいろ選べます
# cd /usr/ports/lang/php83
# make config
私は「IPv6」をOFF、ZTSとMYSQL80をONしました。
そして一旦OKで抜けます
今度こそ本当のインストール
初めてだとまたオプションが出て来ます
# cd /usr/ports/lang/php83-extensions
# make install clean
マルチバイトとMySQLi、MySQLIをONしました。
2回目以降の場合は「make config」で選んで下さい
引き続き設定をします。
まずPHP設定ファイルをコピーします
# cp /usr/local/etc/php.ini-development /usr/local/etc/php.ini
一部修正します。
これはphpのスクリプトでスタートを
short_open_tag = On
<?php
と書かなければならないのを
<?
だけで済むので私は使用しています。
次にApacheでphpが動かせるようmod_phpをインストールします。
オプションはMySQLNDとZTSをONしました。
# cd /usr/ports/www/mod_php83
# make install clean
次にmysqliをインストールします。
# cd /usr/databases/php83-mysqli
# make install clean
次にApacheのconfファイルを編集します。
/usr/local/etc/apache24/httpd.conf
LoadModule php_module libexec/apache24/libphp.so
AddHandler application/x-httpd-php .php
#2行目よりこちらの方が良い?
<FilesMatch \.php>
SetHandler application/x-httpd-php
# REMOTE_HOSTで名前表示する場合、逆引きするために追記
HostnameLookups on
</FilesMatch>
あとはApacheを再起動すればOKです。
動作確認する為に以下の内容のファイルを作りアクセスして見てPHPの設定などちゃんと出れば動いています。
info.php
<? phpinfo(); ?>
blogのMovaTypeでMySQLを使用していてバックアップを取るのに簡単な方法としてデータベース自信をコピーしたので、その際のコマンドを。
一度mysqlにログインして
$ mysqldump -u user_name -p from_db > from_db.dump.sql
$ mysqladmin -u user_name -p create dest_db
を実行して
mysql> RESET MASTER;
でコピーできます。
$ mysql -u user_name -p dest_db < from_db.dump.sql
またMySQL8からは文字コードのデフォルトがutf8mb4になり5.7以前で吐き出したsqlファイルをそのままインポートしても文字化けしてだめでした。
MySQL5.7以前で吐き出したsqlファイルを編集し
DEFAULT CHARSET=latin1;
を
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
に書き換えてからインポートすることで上手くいきました。
最近はビデオなど家電をHPでアクセスすると外から録画予約など出来る事があるので、外からでもビデオなどをアクセスできるようにしてみます。
設定にはバーチャルホストを利用します。
/usr/local/etc/apache24/extra/httpd-vhosts.conf
#サーバー本体へのアクセスは、普通のDocumentRootを誘導
<VirtualHost *:80>
DocumentRoot "/usr/local/www"
ServerAdmin www@hogehoge.mydns.jp
ServerName hogehoge.mydns.jp
</VirtualHost>
#ローカルの家電へのアクセスにはProxyで誘導
<VirtualHost *:80>
ProxyPreserveHost Off
ProxyPass / http://192.168.1.**/
ProxyPassReverse / http://192.168.1.**/ #ローカルIPを設定
ServerAdmin www@hogehoge.mydns.jp
ServerName video.hogehoge.mydns.jp
</VirtualHost>
再起動すれば上記の場合
http://video.hogehoge.mydns.jpへアクセスすると
192.168.1.**へダイレクトにアクセスします。