はじめに
完全趣味でWebやプログラミングに手を出した文系高校生によるただの備忘録です。
ほとんど他の方の記事の受け売りです。
あくまでも参考程度にお願いします。
ドメイン取得、DNS設定、htmlやcssファイル等の用意は完了しているものとします。
0. 環境等
サーバー: Xサーバー 無料VPS 3コア/4GB/50GB (SSH接続有効)
OS: Ubuntu 26.04
Apache: 2.4.67
APR: 1.7.6
APR-util: 1.6.3
ドメイン管理: Xサーバードメイン
DNS: Cloudflare
SSL: Let's encrypt + Cloudflare
ファイル操作: Filezilla 3.69.6
(すべて2026/6/4時点での最新バージョン)
1. 事前準備
必要となるパッケージはaptでダウンロード1
sudo apt update
sudo apt install build-essential libexpat1-dev libpcre2-dev zlib1g zlib1g-dev libcrypt-dev libssl-dev libnghttp2-dev
build-esseatial: gcc(C/C++コンパイラ)やmake(オートビルドツール)などのメタパッケージ
libexpat1-dev: XMLをデータ変換するライブラリ(XMLパーサー)
libpcre2: 正規表現ライブラリ
zlib1g: データ圧縮展開ライブラリ
libcrypt-dev: C言語における文字列をハッシュ化するcrypt関数を追加するライブラリ
libssl: OpenSSLのSSL用パッケージ(必要なら)
libnghttp2-dev: C言語版のHTTP/2ライブラリ(必要なら)
gcc --version
make --version
openssl version
でインストールが成功したか確認
2. ソースコードのダウンロードと検証、展開
wget https://dlcdn.apache.org/httpd/httpd-2.4.67.tar.gz
httpd-2.4.67.tar.gz
.tar.bz2版もあるが今回は.tar.gz版を使用
wget https://dlcdn.apache.org/httpd/httpd-2.4.67.tar.gz.sha256
sha256sum -c httpd-2.4.67.tar.gz.sha256
これで改ざんがないか検証しOKと表示されるか確認
tar -xvzf httpd-2.4.67.tar.gz
cd ~/httpd-2.4.67
tarで展開→移動
3. APR, APR-utilのダウンロード
cd srclib
wget https://downloads.apache.org/apr/apr-1.7.6.tar.gz
wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
tar -xvzf apr-1.7.6.tar.gz
tar -xvzf apr-util-1.6.3.tar.gz
mv apr-1.7.6 apr
mv apr-util-1.6.3 apr-util
cd ../
APR: OS間でのポータビリティ向上のための補助ライブラリ
APR-util: よりパフォーマンスを向上させるための関数群
APR等を配置するsrclibディレクトリへ移動→ダウンロード→展開→適切なディレクトリに移動→親ディレクトリへ
4. configreの設定
ls . | grep configure
# もしconfigureがなければ
sudo apt install autoconf
./buildconf
configure: インストールに問題ないか確認しオートビルドmakeを実行するためのmakefileを生成するスクリプト
autoconf(./buildconf): configureを自動生成するスクリプト
まずconfigureファイルがあるか確認→なければautoconfをインストール→confを生成する
./configure --prefix=/usr/local/apache2 \
--enable-so \
--enable-ssl \
--enable-rewrite \
--enable-http2 \
--with-included-apr \
--enable-mods-shared=all
--prefix=/usr/local/apache2: デフォルトのディレクトリを設定
--enable-so: 動的モジュールの有効化(モジュール追加を可能にする)
--enable-ssl: SSL/TLSの有効化
--enable-rewrite: URLのリダイレクトなどを有効化する
--enable-http2: HTTP/2の有効化
--with-included-apr: 先程ダウンロードしたaprらを使用する
--enable-mods-shared=all: 全モジュールを動的にダウンロードする
様々なApacheのオプションを設定する2
echo $?
ls . | grep Makefile
実行後0が返される/Makefileが確認できれば成功
5. コンパイルとインストール
make V=1 2>&1 | tee build.log
sudo make install
/usr/local/apache2/bin/httpd -v
一応バグが起きたとき用にログを取っておく
make実行後にechoを実行し0が返されエラーが起きていないかどうか確認する
Server version: Apache/2.4.67 (Unix)
Server built: 20xx-x-xx
最後の httpd -v でこんな表示が出たら成功
6. 起動と最低限の設定
sudo /usr/local/apache2/bin/apachectl
とりあえずコマンドはフルパスを使う
sudo /usr/local/apache2/bin/apachectl start
起動したらパケットフィルターが80ポートをフィルタしていないか確認しブラウザでサーバーのIPアドレスに接続、接続後 It works! と出たら動作確認は終了
#122行目あたり <Directory "/usr/local/apache2/htdocs">
<Directory "/usr/local/apache2/htdocs/*">
#記述位置はどこでも良い おすすめは一番下
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot "/usr/local/apache2/htdocs/example-com"
</VirtualHost>
Directory: 指定したディレクトリの扱いを設定する3
VirtualHost: 一つのサーバーで複数のドメインを扱う際に使われる4
~/apache2/conf/httpd.confが設定ファイルになり、初期設定のファイルに上記のように書き足し保存
7. SSL証明書の取得とダウンロード、インストール
XserverSSLから取得した証明書等を自分のパソコンにダウンロード後、以下の手順でサーバーに配置
1, VPSパネルでパケットフィルター設定でポート22等が開いているか確認、開いていなかったら「パケットフィルター設定を追加」からSSHを選択(初心者推奨)or自分でSSH接続に使うポートを選択し開放
2, Filezillaでctrl+sでサイトマネージャーを開き次のように設定し接続
プロトコル:SFTP ホスト:VPSのIPアドレス ポート:7-1で設定したポート(前者なら22) ログオンタイプ:鍵ファイル ユーザー名:root キーファイル:~/Downloads/dns.pemなどサーバー作成時に設定した秘密鍵のパス
3, 接続後右の画面にサーバーのファイルやディレクトリが表示されるので、そこからetcディレクトリに以下のディレクトリを作成し証明書等を配置
~/letsencrypt/live/example.com/
4, 証明書と中間証明書を合わせたfullchain.pemを作る
cat letsencrypt12345678.crt letsencrypt12345678Int.crt > fullchain.pem
# ファイル名は適宜自身のものに書き換えてください
5, httpd.confでSSL対応のドメイン設定を書く
<VirtualHost *:443>
DocumentRoot "/usr/local/apache2/htdocs/example-com"
ServerName example.com
ServerAlias www.example.com
SSLEngine on
#以下のファイル名は先程配置したファイル名に変更する
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.crt
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/letsencrypt12345678.key
</VirtualHost>
SSLEngine: SSLのシステムの実行を決める
SSLCertificateFile, KeyFile: それぞれSSL証明書/秘密鍵のパスを伝える
8. httpsの有効化とセキュリティ設定、サイト公開
EngineをONにするだけでは動かないので、SSL関連のモジュールを有効化する
#81行目前後 #LoadModule ssl_module modules/mod_ssl.so コメントアウトを外すor以下を書き加える
LoadModule ssl_module modules/mod_ssl.so
#27行目前後 #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so コメントアウトを外すor以下を書き加える
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
httpd.confにSSLのセキュリティ設定を書き込んでも良いが、分量が多くなり見にくくなるためhttpd-ssl.confというSSL専用のconfファイルに書き込む
~conf/extraにあるはずだが、なければ作成する
#一例
Listen 443
SSLCipherSuite HIGH:!MEDIUM:!MD4:!MD5:!RC2:!RC4:!3DES
SSLProxyCipherSuite HIGH:!MEDIUM:!MD5:!MD4:!RC2:!RC4:!3DES
SSLHonorCipherOrder on
SSLProtocol -all +TLSv1.3
SSLProxyProtocol -all +TLSv1.3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/logs/access_log"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/usr/local/apache2/logs/ssl_request_log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
詳細は省略
強めに設定しているため環境が古かったりすると接続できない場合がある
そしてこれをサーバーに適応させる
#182行目前後 <IfModule ssl_module>内に記述
Include conf/extra/httpd-ssl.conf
これでサーバー側でのSSLの対応は完了したので、Cloudflareを介したユーザープロキシ間とプロキシサーバー間のSSLを有効化する
1, cloudflareのパネルに接続
2, exxample.comのSSL/TLSの概要に入る
3, SSL/TLS 暗号化 から カスタム SSL/TLS の フル(厳密) にチェックをつける
これでブラウザからサーバーまで完全にSSLを有効化ができた
sudo /usr/local/apache2/bin/apachectl restart
これでhttps有効化しサイトが公開できたはずなのであとはドメインに接続し配置したファイルの内容が表示されれば成功
9. あとがき補足
一部変えると良いもの
1, 証明書と秘密鍵の所有権とパーティション: 640 root(daemon):daemon
他にあったら書き足します。
-
Apacheコンパイラに必要なパッケージのみの説明 ↩
-
上記は自分が使うもののみ載せているので、参考にされている方はこの通りにせず必要な物を追加したり削除したりしてください。その都度パッケージもインストールしてください。 ↩
-
ここではhtdocsの子ディレクトリから回帰的に設定するように指定した
これがないと以下のVirtualHostを使う際に小ディレクトリをドメインごとに読み込ませるということができなくなる→複数ドメインが使えなくなる ↩ -
ここではとりあえずSSLなしでexample.comでサイトを公開できるようにし、www.example.comに接続した時にexample.comにリダイレクトするようにした
htmlなどのファイルは~/example-comに配置されたものを読み込むためこの時点で配置しておく ↩