LoginSignup
1
1

More than 3 years have passed since last update.

GCP上のApacheからローカルのラズパイApacheにリバースプロキシする(NAT超えWake on LAN[3])

Last updated at Posted at 2020-05-27

はじめに

前回の続きです.
とりあえずやりたいことはこんなんです.

network_detail.png

今回は「GCP上のApacheからローカルのラズパイApacheにリバースプロキシする」です.
ここでやりたいことは,GCPからVPN接続しているローカルのラズパイにぶん投げさせます.

GCP側

Apacheインストール

必要なものをインストールします.Line BotはHTTPSに対応していないとダメなので,Certbotもインストールします.

sudo apt update
sudo apt-get install apache2
sudo apt install certbot # For HTTPS

インストールはこれだけです.
※これで,/var/www/htmlが作成され,Webページを入れていけば表示されます(デフォルトページのindex.htmlも入ってます.).

TCP443,40Portの開放

前々回同様の方法でTCP443,40ポートを開放します.

port1

port2

確認

前々回取得したドメインかグローバルIPアドレスを入力してApacheが動いているか確認します.(このとき,forbittenなんかが出てきたら,たぶんポート開放が正しくできていないです.)
http://yourdomain_or_ip

正しくインストール/ポート開放できていると以下の画面になります.

1.png

設定

次にサーバー情報を最小限にするために,以下の設定を行います.

sudo vi /etc/apache2/conf-available/security.conf
/etc/apache2/conf-available/security.conf
ServerTokens Prod
ServerSignature Off

SSL化

証明書発行

certbotを使って,SSLの証明書を発行します.--dry-run引数はちょっと試してみるなコマンドです.いきなり--dry-runなしでやってもいいですが,念のためにやっておいた方がいいです.

$ sudo certbot certonly --webroot -w /var/www/html -d {domain} --email {mail address} --agree-tos -n --dry-run

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for {domain}
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - The dry run was successful.

と成功したら,本番です.

sudo certbot certonly --webroot -w /var/www/html -d {domain} --email {mail address} --agree-tos -n

エラーなく成功したら,

sudo ls /etc/letsencrypt/live/{domain}/
# >> README  cert.pem  chain.pem  fullchain.pem  privkey.pem # -> OK

で証明書ができているか確認します.

証明書を有効化

証明書を有効化して,WebページをSSL化します.

cd /etc/apache2/sites-available/
sudo cp default-ssl.conf default-ssl.conf.bak # 念のため,バックアップ
sudo vi default-ssl.conf

メールアドレスや先ほど作成した証明書のパスを設定します.

/etc/apache2/sites-available/default-ssl.conf
# 3行目くらい
ServerAdimin {mail address(above address)}
# 25行目くらい
SSLEngine on
# 32, 33行目くらい
SSLCertificateFile /etc/letsencrypt/live/{domai}/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/{domai}/privkey.pem
# 42行目くらい
SSLCertificateChainFile /etc/letsencrypt/live/{domai}/chain.pem

Softether serverの443ポートを閉じる

前回でやっているかもしれませんが,一応.

2.PNG

サービスやシステムを有効化する

先ほど編集したSSLの設定や,Apacheのサーバーを再度設定しなおします.

sudo service apache2 start 
sudo systemctl reload apache2
sudo a2ensite default-ssl
sudo a2enmod ssl 
sudo apachectl -t # >> Syntax OK
sudo systemctl restart apache2
sudo reboot

これで,https://yourdomain_or_ip
(hhtp*s*に注意)を開いて,以下のようになっていればSSL化はできています.

3.png

certbotの更新

このままでは,時間が経つと(期間は忘れました.調べてください)証明書が無効になってしまうので,定期的に更新させます.
まずは,更新がうまくいくかを--dry-runで確認します.

$ sudo certbot renew --dry-run
- - - - - - - - - - - - - - - - - 
- - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/{domain}/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

とか出ればOK.
毎月ごとに更新するように,crontabで設定します.

sudo crontab -e # or crontab -u root -e
# renew ssl certification
0 0 1 * * certbot renew

80ポートを閉じる or リダイレクト

SSL化が完了し,80ポートは不要なので,どちらかを選びます.
ポートを閉じるのは割愛し,
リダイレクトの方法を書きます.

※更新の際に80ポートは開放しとかないといけませんでした!

/etc/apache2/sites-available/hogehoge.confファイルがあるので,(たぶん000-default.confファイル)以下を書き込みます.正規表現でhttpsを強制的につけるように設定させています.

sudo vi /etc/apache2/sites-available/hogehoge.conf 
/etc/apache2/sites-available/hogehoge.conf
<VirtualHost *:80>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        ...

編集後,リロードします.

sudo a2enmod rewrite
sudo systemctl restart apache2

ラズパイ側

インストール設定等は基本同じなので,割愛します.ただし,SSL化は不必要なので,certbotは要りません!

インストールが終わり,Apacheを起動し,確認まで行います.
※確認の際はポート開放等していないので,ラズパイのローカルIPで確認してください.(例:http://192.168.5.111など)

テストのため,/var/www/html/index.htmlをわかりやすいように変更します.

/var/www/html/index.html
This is vpn server for wake on lan!

リバースプロキシでぶん投げる

GCP→ラズパイにぶん投げます.
GCPにSSHで接続します.まず,リバースプロキシのために,もろもろ設定します.

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo systemctl restart apache2

そうして,先ほど編集したファイルに以下を記入します.

sudo vi /etc/apache2/sites-available/default-ssl.conf
/etc/apache2/sites-available/default-ssl.conf
ProxyPreserveHost On
ProxyPass / http://{raspi's local IP}:80/
ProxyPassReverse / http://{raspi's local IP}:80/

再起動します.

sudo systemctl restart apache2

確認します.https://{domain}
で以下のベージになっていればOKです.

4.png

おわりに

とりあえず,長いのでここで終了です.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1