はじめに
今回は、Ubuntu の Apache2 で https の通信を 443 以外の通信ポート(例えばポート 443 を許さずポート 8443 でアクセスできるようにする)で Web サーバにアクセスできるようにするやり方を紹介します。
前回記事 Ubuntu 20.04LTS の Apache + Flask で Let's Encrypt の SAN 証明書を作成・更新する話(更新できなかった問題を解決) と同じです。
前提として、80 ポートと 443 ポートを用いて SSL 証明書を Let's Encrypt で取得した後の話となります(ですので、SSLCertificateFile や SSLCertificateKeyFile の .pem ファイルはすでに VirtualHost の 443 の部分に記述されている前提となります)。
環境・バージョン等
Ubuntu / Apache2 バージョン
$ cat /etc/issue
Ubuntu 20.04.6 LTS \n \l
$ apache2 -v
Server version: Apache/2.4.41 (Ubuntu)
Server built: 2023-03-08T17:32:54
Web サーバ IP アドレス
172.20.30.40
Web サーバドメイン
abc.example.com
と www.abc.example.com
手順
-
/etc/apache2/sites-available
にabc.example.com.conf
ファイルを作成する。 - 以下のように
abc.example.com.conf
ファイルを記述する。
具体的には、<VirtualHost 172.20.30.40:443>
と同じ内容で<VirtualHost 172.20.30.40:8443>
を記述する。/etc/apache2/sites-available/abc.example.com.conf<VirtualHost 172.20.30.40:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ServerName abc.example.com ServerAlias www.abc.example.com DocumentRoot /var/www/html ServerAdmin hoge@hoge.ac.jp <Directory /var/www/html> Options FollowSymLinks AllowOverride All AddType text/html .html AddType text/html .html Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <IfModule mod_ssl.c> <VirtualHost 172.20.30.40:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ServerAdmin hoge@hoge.ac.jp DocumentRoot /var/www/html <Directory /home/www/html> Options FollowSymLinks AllowOverride All AddType text/html .html AddType text/html .htm Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> ServerName abc.example.com ServerAlias www.abc.example.com Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/abc.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/abc.example.com/privkey.pem </VirtualHost> <VirtualHost 172.20.30.40:8443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ServerAdmin hoge@hoge.ac.jp DocumentRoot /var/www/html <Directory /home/www/html> Options FollowSymLinks AllowOverride All AddType text/html .html AddType text/html .htm Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Proxy *> Require all granted </Proxy> ProxyRequests Off ProxyPreserveHost On SSLProxyEngine on SSLEngine on <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> ServerName abc.example.com ServerAlias www.abc.example.com Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/abc.example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/abc.example.com/privkey.pem </VirtualHost> </IfModule>
- (任意)ポート 443 での接続を禁止する場合は、
<VirtualHost 172.20.30.40:443>
の部分を削除(やコメントアウト)する。