server { listen 80; server_name localhost; rewrite_log on; error_log /var/log/nginx/rewrite.log notice; location ~ ^/weather+\.json { rewrite ^ /weather/$arg_date.json; } location ~ ^/weather/.*\.json { default_type application/json; root /var/www/html; try_files $uri =404; error_page 404 = @info; } location @info { more_set_headers -s 404 "Cache-Control: no-cache, no-store"; return 404 " "; } } と
GMOクラウド ALTUSにフラッシュディスクが追加されていました(2018年8月29日追記) 少し前からですが、GMOクラウドのディスクでフラッシュディスク(SSD)が選択できるようになっていました。 この記事を書いたとき(2015年)の状況は再現できないですが、恐らくディスクアクセスに関する悩みからは開放されそうですね。 はじめに これまでの経緯はこちらにあります。 マルチコアサーバがなんか重い時に原因究明しかけていました。 管理に携わっているサーバが「なんか重い」症状に陥った件についての解決編です。 LAがちょくちょくあがって問題認識 対象サーバはマルチコアでコア別に見ると特定のコアで普段からiowaitが高い ddやfioなどでディスク負荷を掛けるとめっちゃ重い という状態でした。 調査 サポセンからの連絡 GMOのクラウドを使っていますがここサポートセンターは優しいです。ddとf
nginxのv1.9あたりからOSS版でも使えるTCPロードバランシング機能をmrubyでプログラマブルに制御できるようにngx_mrubyでもサポートしました。 github.com これで、HTTPやHTTP/2だけでなくTCPのロードバランシングでもmrubyによって通信をプログラマブルに制御できるようになったわけです。 nginxのTCPロードバランシング機能は、nginx内部ではstreamモジュールとして、httpモジュールとは別で実装しているため、ngx_mrubyでも一から実装し直す必要がありました。 ということで少し面倒だなぁと思っていたのですが、ちょうど、僕の最近やりたい事としてTCPのロードバランサをもう少しプログラマブルに書きたいというのがあって、色々とTCPロードバランサを探したり、既存のソフトウェアで設定を試行錯誤するよりも、自分でnginxのTCPロードバラン
タイトルの通りです。 先日行われた、Iikanjini Speed Up Contestの略であるところのISUCON5の本選にはてなの若手エンジニア3人によるチーム「はむちゃん」で参加し、見事惨敗してきました。最後のスコア計測時に再起動試験をクリアできなかったので最終スコアはなしで、終了直前のベンチマークで出した値は4万点台だったので仮に再起動試験で同程度のスコアを出せていたとしても9位ライン、ということになります。isucon.net 予選が好成績で調子に乗っていた記事はこちらです。astj.hatenablog.com 本選の感想 最初に、今回の終了直後のこのツイートをもって感想とさせてください。 そらきれい— Julius/HP (@ast_j) 2015, 10月 31 ふりかえり 本選のお題が何になるかはいろいろ噂されていましたが、冗談半分に言われていたマイクロサービスとDoc
nginxでDDoS対策をするための方法を調べてみました。 いくつか方法が見つかったので、リンクをまとめてみました。あとで、色々試してみようと思います。 nginxをプロキシサーバとして利用して、バックエンドにアプリサーバを配置するような構成で使うので、外部から来たDDoSをnginxでブロックしてアプリサーバを守る。といったような用途になるかと思います。 もちろん、nginxが応答できるHTTPリクエストの範疇に収まらない攻撃は、その前段階でブロックしたり、他のサーバにアクセスを逃したりする必要があります。 DDoS攻撃に対するシンプルな戦略 | ツチノコブログ(http://tsuchinoko.dmmlabs.com/?p=611) さらに、こちらで紹介されているように、完璧に防ごうとすると青天井のコストが見えてしまったりするので、”どれくらいDDoSからの保護をするのか”を明確にル
インフラストラクチャー部 id:sora_h です。クックパッドでは、社内向けの Web アプリ (以降 “社内ツール”) を社外のネットワークから利用する際、アプリケーションレベルでのアクセス制御とは別に、リバースプロキシでもアクセス制御を実施しています。*1 これまで BASIC 認証あるいは VPN による社内ネットワークを経由した接続という形で許可していました。しかし、iOS の Safari などでは BASIC 認証時のパスワードを保存できない上、頻繁に入力を求められてしまいますし、VPN はリンクを開く前に接続をしておく必要があります。これにより、社内ツールを社外で開く時に手間がかかってしまう問題がありました。 これに対し、一部では typester/gate などを導入し Google Apps での認証を行なっていました。しかしいくつか問題があり、非アドホックな対応では
Dockerでは一般的に次のようなコマンドを実行します。 $ docker run -d -p 8080:80 wordpress この場合、ホストマシンへの8080番へのアクセスをコンテナの80番ポートへつなぐという意味になります。そのためURLとしては、 http://ホストのアドレス:8080/ といったポート番号を使ったサーバアクセスになります。しかしこれはコンテナが増えていった場合にあまり格好良くありません。そこで nginx-proxy を使ってドメインを割り当てたアクセスを行うようにしましょう。 jwilder/nginx-proxy 用意するもの Linuxサーバ(今回はさくらのクラウドでUbuntu 14.04 LTSを使ってます) Docker(今回は1.0.1を使っています) nginx-proxyの実行 まず nginx-proxy を起動します。これはDocker
nginxの背後にELBがいて、proxy_pass https://xxx.yyy.comみたいに指定していたんだが、突然クライアントにHTTP 499が返却されてしまうという事案が発生した。なおこの記事の対象はnginx1.8系とnginx1.6系。調べたところによると割とみんなよくハマる定期ネタのようだ。 どういうことか nginxの仕様としてproxy_passに名前を使っている場合、その名前解決はnginx起動時に行われる。そしてそのときに取得したIPはnginxにキャッシュされてnginxの再起動もしくはHUPを受け取るまで解放されない。 なのでELBのようにIPが変化するものをnginxの後段に置くときは注意する。 proxy_pass https://xxx.yyy.com; だけでなく、resolverでDNSとそのキャッシュのexpireを指定、さらにset $xxxで
Improving web application performance is more critical than ever. The share of economic activity that’s online is growing; more than 5% of the developed world’s economy is now on the Internet (see Resources for Internet Statistics below). And our always‑on, hyper‑connected modern world means that user expectations are higher than ever. If your site does not respond instantly, or if your app does n
nginxにluaを組み込む openresty/lua-nginx-module · GitHub というのが非常に便利で、単なるreverse proxyだったnginxに、あらゆる役割を持たせられるようになります。 nginxの設定を動的にしたり、nginxからDBやmecached, redisなどへのアクセスも可能になります。HTTP requestを発行することさえできます。 これにより、例えばnginxの設定をDB化したり(NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした)、ちょっとした認証機能を入れたり、アクセスをmemcachedやredisなどに記録して攻撃を動的に判定してブロックしたりとか、nginxのレイヤーで色んなことができるようになります。(バックエンドのアプリケーションでも勿論同様のことは可能ですが、前段でブロックできるのが嬉し
OpenLDAP と言えば、マルチマスタ構成が組めると書いてあったり、試してみると実はシビアな環境だとトランザクションないからダメだったり、Berkeley DB を RDBMS に置き換えれば行けるんじゃねと思ったら、案の定罠満載だったりするのだけど、同様に高可用性の設計が以外と難儀する。 一般的にはミラーにして、片方をマスタとして読み書きし、スレーブ側を読込専用で使うような、要は MySQL のマスタースレーブライクに使うパターンが多い模様。そして負荷分散に関しては LB 挟んでフェイルオーバーが一般的な模様。 ざっくり言うと、gihyo の連載(ちょっと古いが)に載っている。 第21回(最終回) OpenLDAPの冗長化対策【3】:そろそろLDAPにしてみないか?|gihyo.jp … 技術評論社 閑話休題、今回はここで紹介されている書込用ポートと読込用ポートを分けて、読込を負荷分散
nginxをJavaScriptで拡張できるnginScriptがローンチされたので軽く触ってみた。 nginScriptをビルド nginScriptは今のところnginx本家のMercurialリポジトリからcloneすることができる。また、nginxモジュールの実装とnginScriptの実装が一緒に含まれているため、まずはnginScriptをビルドする。
今回はConoHaのロードバランサーを使って、1000req/secをさばけるWordPressのクラスタ構成を作ってみます。WordPressの負荷軽減策やスケールアウトはよく語られるテーマではありますが、今回はロードバランサー、イメージ保存、1Gbpsのローカルネットワークなど、ConoHaならではの機能を使って構築してみます。またその際のチューニングポイントなども解説します。こちらはConoHa以外の環境でもきっと有用だと思います。 このページではあまり限界性能を引き出すチューニングを目指すのではく、実際に皆様がConoHa上でクラスタ構成を構築する際に、どういう構成を作れば良いのか、どんなオプションを使えば良いのか、スケールするにはどういうチューニングを行うのか、などの参考にしていただくのが目的です。WordPressは利用者も多く、PHPで書かれていてMySQLへの接続も必要な、
経緯 WebSocketを使ったアプリケーションを作ったが、ポートが80しか使えない nginxでどっちも80に流したい ポイント / はまり所 WebSocketのプロキシにはUpgradeヘッダ(HTTP 1.1)への対応が必要 Upgradeヘッダへの対応は nginx v1.3.13以降 参考: WebSocket proxying 厳しい条件から先に書く デフォルトだと30秒通信がないと切断される(!) nginxでリバースプロキシしているときだけ一定時間で接続が切れるので何かと思えば、 普通のHTTPの通信と同様に30秒(だったはず)通信がなかった場合はタイムアウトってことで自動でコネクションを切ってくれていたみたい。 ping/pongを30s以内にやればいいんだろうけど、とりあえず5分に設定。 config server { listen *:80 default_serv
ApacheやNginxとopensslのバージョンを指定するとおすすめの暗号スイートなど、SSL設定ファイルを表示してくれるMozillaのサイトがあります。 https://mozilla.github.io/server-side-tls/ssl-config-generator/ これを使えば安全な暗号スイートのみを使ってる設定などが簡単に生成されますので、この通りに指定すれば良いです。 Apacheの場合はデフォルトでは暗号スイート設定の記述はなかったと思いますが、下記の3つは表示通りに指定しておくのが良いかと思います。 SSLProtocol SSLCipherSuite SSLHonorCipherOrder Oldを選択すると、古いブラウザにも対応してる暗号スイートを含めます。ただ暗号強度が弱いものが含まれるためサイトのアクセス傾向をみて古いブラウザのアクセスが無いのであれ
原稿の締め切りを越えた先にあるもの、それは校正です。「俺達の戦いはこれからだ!」的な展開に胸が熱く・・・いえ、ちょっと胃のあたりがチクチクする@cubicdaiyaです。 今回はメルカリのプッシュ通知システムとその変遷について紹介します。 メルカリとプッシュ通知 メルカリではアプリ内でのさまざまなイベントの発生時に対象ユーザに対してプッシュ通知を行うようになっています。アプリ内で発生するイベントというのは例えば、 商品の購入 購入した商品の発送 商品に対するいいね!、コメント といったものです。通常アプリ内でイベントが発生した際はAPIサーバにHTTPSリクエストを発行し、MySQLデータベースへの参照・更新が行われた後ユーザにレスポンスを返します。そして必要であればプッシュ通知を行います。 メルカリのプッシュ通知システムの課題と変遷 メルカリのプッシュ通知システムはこの1年間で2度刷新さ
tmixエンジニアのid:ksssです。 今年の夏も暑いですね。 僕は最近tmixで作ったドライTシャツを着て、朝のランニングで体力づくりに取り組んでいます。 http://tmix.jp/designs/2052395 このTシャツには、プログラマー界での有名な言葉をもじって「ぐだぐだ言ってないで、走れ!」という意味を込めていて、なまけがちな自分をとっとと走りに行かせようと意識をたかめています。 今回はここに表示されている画像の裏側についてお話したいと思います。 動的画像変換 このTシャツ画像はリクエストを受けたときに指定のサイズの画像を生成して返しています。 動的画像変換を使うと、管理するファイルの削減や、事前処理の単純化、デザインへの柔軟対応などのメリットがあり、tmixでも様々なページで使われています。 動的画像変換には様々な実装がありますが、tmixではあまりがんばらない動的画像
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く