LoginSignup
4
1

More than 5 years have passed since last update.

ELB の仕様を Apache と比較

Last updated at Posted at 2016-07-16

Amazon Elastic Load Balancing のリクエストヘッダ仕様を Apache HTTP Server と比較してみる (当社調べ)

ここで "クライアント" とは リバースプロキシサーバーに直接接続しにきたヤツのことです。

Apache の mod_proxy_http をデフォルトで使った場合

Host: {オリジンサーバーのホスト}
X-Forwarded-For: {クライアントが送ってきた X-Forwarded-For リクエストヘッダ値 + クライアントのIPアドレス}
X-Forwarded-Host: {クライアントが送ってきた X-Forwarded-Host リクエストヘッダ値 + クライアントが送ってきた Host リクエストヘッダ値}
X-Forwarded-Server: {クライアントが送ってきた X-Forwarded-Server リクエストヘッダ値 + リバースプロキシサーバーのホスト名. ServerNameで指定}
Connection: Keep-Alive

ELB の場合

Host: {クライアントが送ってきた Host リクエストヘッダ値}
X-Forwarded-For: {クライアントが送ってきた X-Forwarded-For リクエストヘッダ値 + クライアントのIPアドレス}
X-Forwarded-Port: {クライアントが接続してきたリバースプロキシサーバーのポート番号}
X-Forwarded-Proto: {クライアントが使用したプロトコル. 典型的には http や https}
Connection: keep-alive

いずれも、Accept*: や User-Agent: などクライアントが送ってきたヘッダはそのまま流します。

ELB は X-Forwarded-Port や X-Forwarded-Proto をカンマ連結しません。

Apache の挙動を ELB に似せるための設定サンプル

似せるだけです。 実際には ELB は X-Forwarded-Host や X-Forwarded-Server に値を追加しません。

# SSLオフロードの場合
ProxyPass / http://{origin_server}/
ProxyPassReverse / http://{origin_server}/
ProxyPreserveHost On
<VirtualHost *:80>
  RequestHeader set X-Forwarded-Port 80
  RequestHeader set X-Forwarded-Proto http
</VirtualHost>
<VirtualHost *:443>
  RequestHeader set X-Forwarded-Port 443
  RequestHeader set X-Forwarded-Proto https
</VirtualHost>
# 必要に応じて
# ProxyPassReverseCookieDomain
# Filter & Substitute
4
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
4
1