質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

Q&A

解決済

1回答

2282閲覧

Apache,Passenger,Rails構成で高アクセスのページのみを503表示

退会済みユーザー

退会済みユーザー

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

0グッド

0クリップ

投稿2016/09/21 00:54

###前提・実現したいこと
Apache,Passenger,RailsでWebサービスを運用しております。

キャンペーンのランディングページなどで、
特定のページにアクセスが集中するケースが発生しており、
その際に、次のような挙動をさせたいと思っています。

  • 特定のページに負荷が集中した場合、そのページへのアクセスの一部で503を返す(Railsに処理させない)
  • 負荷が落ち着いたら、503の返却を停止する

一部ページに負荷が集中した場合に、サービス全体が影響を受けるのでなく、
負荷が集中したページだけに影響を留めるのが理想です。

ハードウェア的な解決方法ではなく、ソフトウェア的に解決したいと思っています。

  • Apacheのモジュールやrack middlewareなど

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

HAProxyはいかがでしょうか。高性能なソフトウェアロードバランサです。

ApacheのLISTENポートを8080等に変更し、HAProxyで以下の設定を入れます。
以下の例は同時接続数を100に制限する場合です。

xxx.xxx.xxx.xxx:80には元々ApacheがLISTENしていたアドレスを、yyy.yyy.yyy.yyy:8080にはApacheがLISTENしているアドレスに置き換えてください。

global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 30000 user root group root daemon defaults mode http log global option httplog option dontlognull option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 30000 frontend www bind xxx.xxx.xxx.xxx:80 default_backend www_backend backend www_backend mode http balance leastconn option forwardfor #option httpchk GET /path/to/health_check #http-check expect status 200 timeout server 60s server www_01 yyy.yyy.yyy.yyy:8080 weight 1 maxconn 100 check inter 10s rise 2 fall 2

負荷が集中したページ配下のみで制御するには、ある程度ディレクトリを分割してbackend www_backendを定義します。

以下の例では、/dir1を接続数10, /dir2を接続数20、/dir3を接続数30に制限しています。

frontend www bind xxx.xxx.xxx.xxx:80 acl acl_dir1 path_beg /dir1 acl acl_dir2 path_beg /dir2 acl acl_dir3 path_beg /dir3 use_backend www_backend_dir1 if acl_dir1 use_backend www_backend_dir2 if acl_dir2 use_backend www_backend_dir3 if acl_dir3 default_backend www_backend backend www_backend mode http balance leastconn option forwardfor #option httpchk GET /path/to/health_check #http-check expect status 200 timeout server 60s server www_01 yyy.yyy.yyy.yyy:8080 weight 1 maxconn 100 check inter 10s rise 2 fall 2 backend www_backend_dir1 mode http balance leastconn option forwardfor #option httpchk GET /path/to/health_check #http-check expect status 200 timeout server 60s server www_01 yyy.yyy.yyy.yyy:8080 weight 1 maxconn 10 check inter 10s rise 2 fall 2 backend www_backend_dir2 mode http balance leastconn option forwardfor #option httpchk GET /path/to/health_check #http-check expect status 200 timeout server 60s server www_01 yyy.yyy.yyy.yyy:8080 weight 1 maxconn 20 check inter 10s rise 2 fall 2 backend www_backend_dir3 mode http balance leastconn option forwardfor #option httpchk GET /path/to/health_check #http-check expect status 200 timeout server 60s server www_01 yyy.yyy.yyy.yyy:8080 weight 1 maxconn 30 check inter 10s rise 2 fall 2

投稿2016/09/21 01:15

編集2016/09/21 01:23
moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/21 04:55

希望していた挙動を実現できそうなことが分かりましたので、 ベストアンサーにさせて頂きます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問