サービスの区別をコンテキストパスだったのをサブドメインで区別するようにしたときの作業メモ
結果
以下のようなURLだったのを
以下のようにしました。
- https://サービスA.example.com/
- https://サービスB.example.com/
前提
自分の環境で関係するものは以下です。
作業
サブドメイン登録
Route53のページに行きレコード追加。 とりあえず既存のトップドメインはサービスA側に流す(Google Ads対策)。
- サービスA.example.com. A xx.xx.xx.xx
- サービスB.example.com. A xx.xx.xx.xx
- example.com. A ALIAS サービスA.example.com.
今回のようにRoute53でトップドメインを他に流すときは以下参照。
Route53+S3 Web Hostingでホスト名無しのドメイン設定が出来るのか? - プログラマでありたい
Apache設定変更
EC2で動いているapacheの設定を変更する。サブドメインでアクセスしてきたらそれぞれのサービスに流すようにする。
NameVirtualHost *:80 ※追加または有効化 <VirtualHost *:80> ... </VirtualHost> <VirtualHost *:443> ※Laravelで作ったサービスAの設定。/var/www/直下にコード配置。 ServerName "サービスA.exmaple.com" DocumentRoot "/var/www/サービスA/public/" <Directory "/var/www/サービスA/public/"> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny Allow from all </Directory> ErrorLog "logs/ssl_error_log" CustomLog "logs/ssl_access_log" combined # SSL SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem </VirtualHost> <VirtualHost *:443> ※spring-bootで作ったサービスBの設定。8080で起動中 ServerName "サービスB.example.com" ProxyPreserveHost On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ ErrorLog "logs/ssl_error_log" CustomLog "logs/ssl_access_log" combined # SSL SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem </VirtualHost>
設定が終わったらapache再起動。
サブドメインでも使えるSSL証明証を発行
EC2でコマンドを叩く
sudo certbot certonly --agree-tos --webroot -w /var/www/html/ -d example.com -d www.example.com -d サービスA.example.com -d サービスB.example.com
※参考:https://designsupply-web.com/developmentlab/3542/
Laravel(サービスA)の修正
コンテキストパス、ドメインに依存しているコードを修正する。
以下の修正も忘れずに
- public/.hatches
<IfModule mod_rewrite.c> ... RewriteBase / ※コンテキストパスの記載があったら消す ...
spring-boot(サービスB)の修正
コンテキストパス、ドメインに依存しているコードを修正する。
まとめ
実際はあれもこれもやんなきゃでグダグダにやって、最終的にできた(´Д`)