@Konboi memo

主に技術に関してつらつらと。

haproxy × nginx × unicron の設定でハマった

はじめに

2台のマシンという制限の中で冗長化を考え

f:id:Konboi:20130425192515p:plain

  • Server01

    • haproxy: 80ポート
    • nginx: 82ポート
    • unicron: 3000ポート
  • Server02

という構成になっています。

3000ポートではRailsのアプリケーションが動いています。

ハマったところ

ハマったところは Server1のRailsが redirect_to などの同一ドメイン内へのアクセスを行うと example.domain.com:82 portでアクセスしようとしてきてエラーになるというものでした。

原因

原因は、下記のように Railsアプリケーション(unicorn)が82ポートからアクセスがきていると認識し、 きたポート通りの82ポートへ返すようにしているというのが原因でした。

f:id:Konboi:20130425192707p:plain

解決方法

今回の解決方法は haproxy, nginx でヘッダーを拡張し、 Railsアプリケーション(unicorn)側にどこからのアクセスかを認識させた。

具体的な方法はか下記

nginx

 set_real_ip_from {haproxyのローカルIP};
 real_ip_header   X-Forwarded-For;

haproxy

backend server_backend    
  option   forwardfor

まとめ

  • haproxy使ったサーバー構築を初めてゼロから構築してみたのでハマった。
  • nginx1.4がでたのでnginxでやるのもいいかも
  • アプリ担当の人に迷惑をかけた。 すんません。