nginx の実装の説明(@ KMC 春合宿 2015)
Dockerを使ってProductionを運用してみて数ヶ月。 以下の様な構成で(今のところ)安定して動いているので、備忘録としてまとめておきます。 DBのコンテナ化も考えましたが、データ永続化の面などでちょっと不安だったのでやめました。 なぜDockerを選択したか まず背景として、大人の事情で1台のサーバ上に複数サービスを運用する必要がありました。 ApacheやTomcatを、別インスタンスで稼働させる手も考えましたが、 将来の移行コストやポート番号の管理問題もあり、Dockerを選択しました。 (というか、これならDockerでいけそう。やってみたい!というモチベーションがあったのが大きいです) 前提 serviceA、serviceBをサーバ1台で運用 serviceA、serviceBで同じデータベースを参照 ドメイン部分は固定(ここではhoge.jpとする)。サブドメインを分
概要 以前NginxでHTTP/2 - Carpe Diemを書きましたが最近改めて確認してみると のようにHTTP/2が使えていないことが分かりました。今回はこの問題に対応します。 原因 TLS上でのプロトコルのネゴシエーションは以下の2つがあるのですが、 ネゴシエーション ポイント NPN 使用出来るプロトコルのリストをサーバが提示しクライアントが選択する ALPN 使用出来るプロトコルのリストをクライアントが提示しサーバが選択する SPDYがまだ使えていた時にはChromeもNPNに対応していたのですが、HTTP/2に本格的に対応してからALPNのみにしか対応しなくなりました。またAndroidのHTTPクライアントである github.com もALPNでないといけないので、ネイティブアプリでHTTP/2を扱う上でやはりALPNに対応する必要があります。 ALPNに対応するにはOp
今日は夏コミのようですね!僕は今年は特に原稿を描いておらず用事も無いためコミケに縁のない夏を過ごしてしまいました。 ところで最近拙作の ATS(Apache Traffic Server) プラグインである ts_mruby にレスポンスボディをいじくるメソッドを追加し、ふと思い立って画像リサイズのロジックを mruby で書いてみました。 そのレスポンスボディ加工メソッドは ATS::Filter#transform! になります。 このメソッドではブロックまたは Proc オブジェクトを渡すとブロックパラメータに加工前のレスポンスボディが渡され、評価値でレスポンスボディを差し替えます。 f = ATS::Filter.new f.transform! do |body| # append text to the end of response body body + "rewritte
みなさん,Docker使ってますか? 開発環境に導入する話はよく聞きますが,本番Dockerで運用してますか? 本番をDockerにする上で障壁になりそうなホットデプロイ. 普段,コンテナではなくインスタンス上で直接サービスを動かしている限り,そこまで苦労はしていないんじゃないだろうか. たとえば,Railsであればunicornなどは,graceful restartに対応している. そのため,デプロイの際にサービスを止めずにデプロイすることができるのは,当たり前のことに思える. しかし,Dockerとなると,ポートという障壁が出てきて,一筋縄ではいかない. ECSのような楽な解決方法がある一方で,Docker swarmを使うようなシーンでは,やはり一筋縄ではいかないのではないだろうか. お題 本番にDockerを導入するにあたり,以下のような環境を前提として試していた. 中に入れるの
こんにちは、オールアバウトの筋トレエンジニア芸人の@musclemikiyaです。 今回は、オールアバウトの画像リサイズの仕組みについて紹介したいと思います。 紹介するのは、以前まで使用していた非リアルタイム版と、今年構築したリアルタイム版の2種類です。後者で使用している仕組みは、既に多数の導入事例が報告されていますが、構成や負荷に関する情報があまりなかったので、参考になれば嬉しいです! サービス紹介 以下はオールアバウトで運営している、画像を使用しているサービスです。 総合情報サイトAll About CafeSnap (iOS/Android向けアプリ) All Aboutまとめコンテンツ All About News Dig For M All About Japan その他いろいろ 旧構成(SQSを使用した非同期リサイズ) 以前は下記の構成で、PHPのアプリケーションとImageM
nginxのリクエスト数を制限する、ngx_http_limit_req_moduleの動作を勝手に勘違いして勝手にハマったというお話です。 大したことではないのですがdockerでその動作を再現した例はこちらです。 github.com 何にハマったのかというと、”5r/sが5req per secではない”のです。 ”2r/sも2req per secではない”のです。でも”1r/sは1req per secです”。なぞなぞでしょうか。 ...dockerのコンテナを動かしてshellを実行すると次のようなエラーログとアクセスログが出力されます。 nginx_1 | 2016/06/13 15:35:35 [error] 8#8: *18 limiting requests, excess: 0.995 by zone "five", client: 192.168.99.1, ser
Amazon EC2 に Nginx をインストールして起動しようとすると、以下のようなエラーが出て起動に失敗しました。 $ sudo service nginx start Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] still could not bind() エラーメッセージにある通り、ほかのプロセスが先に 80 番ポートをリッスンしていたのが原因でした。 特定のポートをリッスンしているプロセスを調べるには lsof コマンドが使えます。ポート番号を調べるには i オプションを使います。なお、lsof コマンドを実行するには root 権限が必要です。 $ sudo lsof -i:80 COMMAND PID USER F
CentOS に nginx(えんじんえっくす)をインストールする方法を紹介します。 nginx のインストール nginx は CentOS の通常のリポジトリからは提供されていません。そこで、nginx から提供されているCentOS用のリポジトリファイルを追加します(つくります)。こうすることで他のパッケージと同様に yum でインストールできます。 リポジトリファイル # touch /etc/yum.repos.d/nginx.repo # vi /etc/yum.repos.d/nginx.repo nginx のリポジトリファイルの内容はこちらです。 [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 yum で
redmineをいじれる環境を構築する機会があったので、ついでにこれまで触って来なかったnginxを使って見ることにした。僕は基本的に枯れてきたものしか使わないので、そういうことです。ついでに、unicornというものがPassengerの代わりとして注目されているようだったので、試しに導入してみた。 nginxはともかくunicornが何なのかよくわからなかったので調べてみたところ、次世代RailsサーバーUnicornを使ってみた | TechRachohttp://techracho.bpsinc.jp/bps/2010_07_09/2075がわかりやすかった。 debianのセットアップざっと触って一番高速だった、http://ftp.riken.jp/Linux/debian/debian-cd/6.0.4/amd64/iso-cd/からnetinstイメージを落として、適当にセ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く