このサイトを http2 対応した

今まで http だったこのサイトを http2 対応しました。 静的ファイルもそうですが、このサイトで動いている kibana が体感で速くなった気がします(計測すればよかった)。 SSL 証明書は最近流行りの Let’s Encrypt ではなくて、温かみのある StartSSL で取得しました。パスワードではなく、証明書でのログインがいいですね。 どちらも無料で取得できます。前者はコマンドラインから取得できるが構成管理難しめ、後者はサイト上から手作業で取得が必要だが構成管理は容易、というおおざっぱな違いがあります。 今回学んだことは 「出来るだけ https 対応してから http2 対応すべし」 でした。雑に http2 にしたら 403 Forbidden や、Chrome で ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY が発生しハマりました。 あとは 「早く寝ろ」 でしょうか。日曜日の後半は完全に頭が働いていませんでした…。 nginx の設定では主に以下を学びました。 ssl_session_cache 高速化のため、セッションキャッシュを設定する ssl_ciphers より安全にするため、暗号化スイートを明示的に設定する ssl_dhparam より安全にするため、DH パラメータファイルを指定する add_header Strict-Transport-Security より安全にするため、HSTS を用いて常に HTTPS 通信を行う HTTP Strict Transport Security 以下、作業メモです。 2016-03-13(日) 金曜日の社内勉強会で http2 の話 を聞いたこともあり、16:00 頃突然 masutaka.net http2 化の意欲が湧いてきた。この時点ではすぐ出来るだろと思っていた Chef での構成管理がしやすそうな StartSSL で Class 1 の証明書を取得した。必要な CSR(Certificate Signing Request)はほぼ指示通りの以下のコマンドで作成した...

2016-03-15 (Tue) · masutaka

Chef で nginx の reload が出来なくなっていたので対策した

Ubuntu 14.04 LTS + nginx 1.9.3 の環境で、knife solo 経由での nginx reload が出来なくなっていました(Chef のバージョンは 12.4.1)。 サーバの CI では nginx start のみが実行され、nginx restart は実行 されないため、気づけなかったようです。 レシピは至って普通。 service 'nginx' do action [:enable, :start] supports status: true, restart: true, reload: true end template '/etc/nginx/sites-available/masutaka.net' do notifies :reload, 'service[nginx]' end /var/chef/cache/chef-stacktrace.out にはこんなエラーが。 Generated at 2015-07-26 01:10:55 +0900 ---- Begin output of /sbin/reload nginx ---- STDOUT: STDERR: reload: Job is not running: nginx ---- End output of /sbin/reload nginx ---- Ran /sbin/reload nginx returned 1 実際、そうなりました。よく分かりません。...

2015-07-26 (Sun) · masutaka

Homebrewのnginxをphpenvのphp-fpm付きでセットアップしたメモ

最新のPHPを使えるようになったので[2014-02-09-1] 、nginxもセットアッ プしてみました。 これでようやくOSX MavericksのApache&PHPとオサラバできます。 php-fpmの設定と起動 ~/.phpenv/versions/5.5.9/etc/php-fpm.conf.defaultを以下のように修正し、 同ディレクトリにphp-fpm.confとして保存しました。 userとgroupをコメントアウトしているのは、今回のNgnixはユーザ権限で 動かす適当なものだからです。 listenはnginxとの橋渡しです。今回は同一マシンなのでUNIXドメインソケッ トを使用しました。 自動起動スクリプトを作成しました。 上記自動起動用のファイルを設置しました。 $ ln -sfv <path to org.php.php-fpm.plist> ~/Library/LaunchAgents 自動起動ON&起動しました。 $ launchctl load -w ~/Library/LaunchAgents/org.php.php-fpm.plist nginxのインストールと設定、起動 Apacheを自動起動する設定にしていたので削除しました。 $ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist Ngnixはbrewコマンドでインストールしました。 (実際はbrew bundle[2014-01-25-1] でインストールしてます。) $ brew install nginx ==> Downloading http://nginx.org/download/nginx-1.4.4.tar.gz Already downloaded: /Library/Caches/Homebrew/nginx-1.4.4.tar.gz ==> ./configure --prefix=/usr/local/Cellar/nginx/1.4.4 --with-http_ssl_module --with-pcre --with-ipv6 --sbin-path=/usr/local/Cellar/nginx/1.4.4/bin/nginx --with-cc-opt=-I/usr ==> make ==> make install ==> Caveats Docroot is: /usr/local/var/www The default port has been set in /usr/local/etc/nginx/nginx....

2014-02-11 (Tue) · masutaka

nginxのアクセスログをFluentd経由でGrowthForecastのグラフにしてみた

昨日[2013-08-14-1] インストールしたGrowthForecast をFluentdと連携させ てみます。 今回グラフにしたのは2つの情報です。 (1) nginxが各リクエストを処理した時間($request_time) (2) nginxが返したHTTP Status Codeの数 (1) nginxが各リクエストを処理した時間($request_time) [2013-07-14-1] に追加した設定が以下になります。それぞれ fluent-plugin-growthforecast をインストールするChefのレシピと、 td-agent.confの設定です。 FluentdがnginxのアクセスログをMongoDBとGrowthForecastに渡しています。 特に難しいことはなくて、type copyとstoreを使うと複数の出力先を指定 できました。 <match タグ名> type copy <store> type mongo ... </store> <store> type growthforecast ... </store> </match> (2) nginxが返したHTTP Status Codeの数 追加した設定が以下になります。さらにdatacounter plugin に渡して、 HTTP Status Codeを数え、それをGrowthForecastに渡しています。 name_keysに何を渡せばよいか少し悩みました。 タグの中でtype fileなstoreを 増やしたら、datacounter pluginが吐き出すjsonを確認出来ました。この タグの実行は数分のタイムラグがあるのは注意です。 グラフのタイトルはもっと短くしたかったのですが、remove_prefixや input_tag_remove_prefixを使っても希望のタイトルに出来なかったので、 今回は見送りました。(タイムラグのせいでデバッグしづらく、ムキーッて なって諦めました。。) 最後に http://example.com:5125 とかに(1)と(2)が表示されたはずです。 今回は伊藤直也さんの記事 が参考になりました。 特にChefのリポジトリ はめっちゃ参考になります。。

2013-08-15 (Thu) · masutaka

nginxのアクセスログをFluentd経由でMongoDBに保存してみた

Fluentdを使ってみたかったので、masutaka.netのnginxアクセスログを Fluentd経由でMongoDBに保存してみました。 Fluentdについては以下が分かりやすいです。 Fluentdで始めるリアルタイムでのログ有効活用 - CodeZine 今回も@hirocaster さんの記事をほぼトレース。 なぜFluentdなどを使ってログデータ活用するのか?|Act as Professional - hiroki.jp fluentdをインストールしてnginxのログをまずはローカルで集める|Act as Professional - hiroki.jp fluentd経由のデータをmongodbへ保存する|Act as Professional - hiroki.jp 実際に運用しているサービスのnginxログをLTSVにしてみた!|Act as Professional - hiroki.jp 実際、やっていることは単純で、 nginxがアクセスログをファイルに書き出す。 それを検知したFluentd(実際はtd-agentを利用)がMongoDBに記録する。 ってだけです。 最後の記事を参考に、nginxのログ形式はデフォルト(Combined形式と呼ぶ らしい)からLTSV 形式に変更してます。最近のtd-agentはLTSVをサポートし ているのでシンプルに書けました。あと、td-agentのログでWarningが出て いたので、pos_fileも追加しました。 fluent-plugin-mongoをインストールするChefのレシピと、nginxの設定も コピペしておきますね。 始め、nginxとtd-agentの通信はパイプかなにかを介するのかと思い、難し く考えていましたが、実際は単なるファイルでした。ポーリングしている みたいです。 もうひとつ誤解してたのが、 td-agentを使う = Hadoopを使わなければならない だと思い込んでいたことでした。やたら難しく考えていた。 やってみたら予想以上に単純でした。むしろChefのレシピを作るのに、 多大な時間を使ってしまった。。 次はGrowthForecast を試してみます。 追記(2013-07-15): 今のtd-agentはLTSVをサポートしているFluentdを同封していると指摘を受 けましたので、記事を書き換えました。repeatedlyさん、ありがとうござ いました。 追記(2013-08-15): Chefのレシピやnginxの設定も追加しました。

2013-07-14 (Sun) · masutaka

masutaka.netをさくらのVPSに置き換えました

このブログはほぼ静的コンテンツなので、置き換えるメリットはほぼありません。でもいろいろ遊びたかったので置き換えました! 置き換え前 さくらのレンタルサーバ [2009-05-17-4] リアルサーバ 他の人と/homeを共有する コントロールパネルからメールアドレスを作ったり、アクセス解析出来る カスタマイズ性はほぼない OSはFreeBSD 7.1-RELEASE-p16 WebサーバはApache/1.3.42 年間5,000円(スタンダードプラン) 置き換え後 さくらのVPS 仮想サーバ ユーザは自分だけ コントロールパネルとかはない カスタマイズしまくり OSはUbuntu12.04 LTSにした [2013-05-19-1] Webサーバはnginx/1.1.19にした 年間16,280円(プランは2G。石狩リージョン) 雑記 結構真面目にサーバを構築しました。参考にしたのはもちろん『入門Chef Solo』[2013-04-22-4] 基本的にVagrantとserverspec で検証しつつレシピを書いたので、本番環境で悩むことは少なかったです。時代は進みましたね。 Webサーバはnginxにしました。Apacheに比べて、設定がシンプルで惚れました。あと、ごく一部で使っているcgi用にfcgiwrapをインストール。 chef-soloで構築してみた疑問や課題はこんな感じ パッケージ全体のupgradeはどのタイミングでやれば良いのか? 他の人のChef-soloリポジトリを知りたい。Vagrantでも真面目にテスト書いている?とか。 chalowはChef-soloでは管理してません。まあ、Webアプリケーションなので、デプロイ対象とかそっちの話だと思う。今は自作のmkchalowコマンドでアップロードしてます。[2009-06-14-3]

2013-05-27 (Mon) · masutaka