実現したいこと
AWSのパブリックサブネットに設置したEC2インスタンス(webサーバ)へのHTTPリクエストを、プライベートサブネットに設置したEC2インスタンス(APサーバ)にリバースプロキシで転送したい。
web、AP、DBサーバの3層構造が一般的であり、セキュリティ的にAP,、 DBはプライベートサブネットに設置すると良いらしい(自分調べ)とのことで、AWSの勉強のためにこのような手法を試してます(実務で扱っているわけではありません)。
バキバキの初心者です。用語の使い方等が間違っていたら教えてください。
前提
色々試してみた結果ごちゃごちゃしてしまい、必要な情報が書けていないかもしれません。
不足している情報があれば言ってください。
以下のような設計を考えています。
今のところ、以下の通信はうまくいっていると思います。
- ホストマシンからwebサーバへのhttp接続(ブラウザからパブリックIPでnginxのページが表示される)
- ホストマシンからwebサーバへのssh接続
- ホストマシンからwebサーバを踏み台にしたAPサーバへのssh接続
- APサーバからDBサーバへのTCP3306接続
- APサーバからエンドポイントを介したS3への接続
ホストマシンからhttpでwebサーバにアクセスした際に、リバースプロキシでAPサーバの3000番ポートに転送されるように、webサーバのnginxの設定ファイル、APサーバのapacheの設定ファイルを書き換えてみたのですが、接続できません。
- nginxの設定ファイル
こちらを参考に、/etc/nginx/conf.d/proxy.conf
を作成し、以下のように書き込みました。
root
に書いてあるのはAPサーバのlaravelプロジェクトのドキュメントルートです(これをapacheの設定ファイルにも書き込んでいます)
server { listen 80; server_name .*; root /var/www/laravel-project/AWS-EC2-laravel/public; location / { try_files $uri @app; } location @app { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://APサーバのプライベートIP:3000; } }
- apacheの設定ファイル
こちらや、こちらを参考にして、/etc/httpd/conf/httpd.conf
を以下のように書き換えました。
# DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/var/www/laravel-project/AWS-EC2-laravel/public" # 書き換え # # Relax access to content within /var/www. # <Directory "/var/www/laravel-project/AWS-EC2-laravel/public"> # 書き換え AllowOverride All # NoneからAllに書き換え # Allow open access: Require all granted </Directory>
発生している問題・エラーメッセージ
ブラウザから、http://webサーバのパブリックIP
にアクセスすると、502 Bad Gatewayというエラー(nginxのエラーページ)が表示されます。
試したこと
webサーバからの3000番ポートへのリクエストを受けつけるため/etc/httpd/conf/httpd.conf
を
Listen webサーバのプライベートIP:3000 # 80から書き換え
と書き換え、apacheを再起動すると、
(99)Cannot assign requested address: AH00072: make_sock: could not bind to address webサーバのプライベートIP
というエラーになりました。
補足情報
APサーバにはapacheに加えてphp-fpmというPHP用のアプリケーションサーバ(?)も入っています。何の目的で入れたのかもあまり理解していないのですが、これの設定ファイルを書き換える必要もあるのでしょうか?

回答1件
あなたの回答
tips
プレビュー