Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
nginxによる実践的Webシステム / Practical nginx web system
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Harukasan
PRO
February 08, 2016
Technology
6.6k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
nginxによる実践的Webシステム / Practical nginx web system
nginx実践入門出版記念 nginx tech talks
2016-02-08
Harukasan
PRO
February 08, 2016
More Decks by Harukasan
See All by Harukasan
Building a Standalone Programming Environment
harukasan
PRO
1
1.9k
Successor to PicoRabbit: Ruby Programming Envorinment / RubyKaigi 2025 follow up
harukasan
PRO
1
1.2k
Write your own mrbgem, Create your own device
harukasan
PRO
1
440
PicoRabbit: a Tiny Presentation Device Powered by Ruby
harukasan
PRO
2
1.8k
pixivを支える技術 / 技育CAMPアカデミア
harukasan
PRO
3
620
20240401 新卒研修 - ピクシブにおける技術領域
harukasan
PRO
1
950
ピクシブのコンテンツ配信基盤技術 / pixiv TECH SALON
harukasan
PRO
5
6k
Goにおける画像ファイル処理 / golang.tokyo #19
harukasan
PRO
7
6.9k
WebRTC動画をトランスコードする / Transcoding video streams from WebRTC
harukasan
PRO
5
1.7k
Other Decks in Technology
See All in Technology
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
150
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
580
事業価値と Engineering 2026年度版
recruitengineers
PRO
49
24k
MIRU 2026 チュートリアル
keisuke198619
0
920
2026-08-05 IBM Z開発最前線!IBM Bob Premium Package for Zって何がすごいの?
yutanonaka
0
120
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
180
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
390
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
9
2.8k
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.6k
猫付きpingコマンドを自作
uyuki234
0
240
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
120
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
2
990
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
Designing Powerful Visuals for Engaging Learning
tmiket
1
490
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Exploring anti-patterns in Rails
aemeredith
3
460
Transcript
Title Text 正誤情報とサンプルでみる nginxによる実践的Webシステム MICHII Shunsuke nginx tech talks 2016-02-08
MICHII Shunsuke / harukasan - 2012ʹ৽ଔͱͯ͠ΠϯϑϥνʔϜʹଐ - ίϯςϯπ৴Λ͡Ίͱͯ͠αʔϏεશମͷج൫Λ୲ - αʔϏεج൫͚ͩͰͳ͘σʔλղੳج൫ͷߏஙͳͲ
- ٕज़ܥࡶࢽͷࣥචͳͲ 2 Infrastructure team in pixiv Inc.
お詫びと訂正 正誤情報は技術評論社様のサポートページに掲載頂いております 最新版はサポートページをご確認下さい: http://gihyo.jp/book/2016/978-4-7741-7866-0/support - 報告/確認次第速やかに掲載いたします - 間違いやすいところを間違っていて申し訳ないです…… 3
サンプルコードについて Github上のリポジトリで公開されています: https://github.com/wdpress/nginx_Practical_Guide - 基本的に動作する状態のコードです - ローカルでの動作確認の他、Travis CI上で書式チェックだけ行っています 4
5 第1章 nginxの概要とアーキテクチャ 第2章 インストールと起動 第3章 基本設定 第4章 静的なWebサイトの構築 第5章
安全かつ高速なHTTPSサーバの構築 第6章 Webアプリケーションサーバの構築 第7章 大規模コンテンツ配信サーバの構築 第8章 Webサーバの運用とメトリクスモニタリング 第9章 Luaによるnginxの拡張──Embed Lua into nginx 第10章 OpenResty──nginxベースのWebアプリケーションフレームワーク 殆どの章は サンプルコードがあります
6 正誤情報とサンプルコードでみる nginx実践入門
nginx実践入門 7
8 nginx実践入門 nginx.orgはこの表記
9 NGINX実践入門 ? nginx.comはこの表記
10 Nginx実践入門 ? 日本語情報に多い
nginxなのかNGINXなのかNginxなのか Preferred variant is "nginx". Sometimes "NGINX" is used, too.
Use of "Nginx" is discouraged as Igor thinks it looks ugly. But, actually, most of us don't really care. — Maxim Dounin - nginxかNGINXがよさそう - nginx.orgはnginx、nginx.comはNGINXになっている 11
12 本書に関しては小文字です
13 最新版の挙動を確認して利用して下さい 本書の動作環境と現時点の最新版 Debian GNU/Linux 変更なし (Jessie) nginx 1.9.10 (1.9.5)
OpenResty 1.9.7.3 (1.9.3.1) PCRE 8.38 8.37 zlib 変更なし 1.2.8 OpenSSL 1.0.2f 1.0.2d GD 変更なし 2.1.1 Fluentd 0.12.19 0.12.16 最新版 (執筆時)
14 第2章 インスト−ルと起動 - nginxのビルドと基本的な操作方法
2.1 ソースコードからのインストール ビルドスクリプト (build.sh) - Ubuntu/Debian向けビルドスクリプト (Debianの場合ちょっと書き換える必要あり) - 本書で紹介しているモジュールが組み込まれる 15
2.2 パッケージからのインストール Debian (ch2/2.2-list2.1-sources.list) RHEL/CentOS (ch2/2.2-list2.2-nginx.repo) 16 deb http://nginx.org/packages/mainline/debian/
jessie nginx deb-src http://nginx.org/packages/mainline/debian/ jessie nginx [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/リリース番号/$basearch/ gpgcheck=0 enabled=1
ビルドについて - 本書ではソースコードからのビルドを推奨 - mainlineの最新版を常にアップグレードしながら利用 - 依存するライブラリはそれほど多くない - OpenSSL、PCRE、zlibがあればとりあえず動く -
image filterにはGDが別途必要 17
18 第3章 基本設定 - HTTPサーバにおける一般的な設定 - パフォーマンスに関する基本的な設定も含んでいる
本書で基本となる設定例 19 user www-data; pid run/nginx.pid; worker_processes 1; pcre_jit on;
error_log logs/error.log; worker_rlimit_nofile 65535; events { worker_connections 1024; } http { keepalive_timeout 60s; sendfile on; tcp_nopush on; … } (ch3/nginx/3.3-list3.7-nginx.conf, ch3/nginx/3.4-performance_tuning.conf)
nginxにおける パフォーマンスチューニング - 基本的にはチューニングしなくても十分なパフォーマンスが発揮できる - その上でニッチケースにおいては特別なチューニングが必要なこともある - まずは本書で紹介しているくらいの設定を入れておき、環境に合わせて チューニングするのが良い 20
tcp_nodelayディレクティブ - 本書では紹介していない - tcp_nodelayディレクティブの値がonである時、TCP_NODELAYオプション の有効/無効を場合によって切り分けることで最適化する - BSD/darwinではTCP_NOPUSHとTCP_NODELAYを併用 - lunuxでは排他的に利用する
- デフォルトでonなので基本的に設定する必要はない 21
22 第4章 静的なWebサイトの構築 - 一般的な静的ファイル配信 - コンテンツ配信(オリジンサーバ)として使用する場合は 7.4 オリジンサーバの構築も参考に
server { root /var/www/html; location /images/ { # プレフィックスを指定 root
/var/www/img; } } locationとrootディレクティブ 23 http://www.example.com/images/logo.png 誤: /var/www/img/logo.png 正: /var/www/img/images/logo.png リクエストURI 返されるファイルパス 表4.1 リスト4.2 locationディレクティブによる設定の例 リスト4.2の設定におけるリクエストURIと返されるファイルパス 正誤情報 (ch4/nginx/4.1-list4.2-location_directive.conf)
rootディレクティブの挙動 - locationディレクティブの中に記述したとしてもrootディレクティブの 挙動は変化しない - URIのパスとのマッピングをとるのではなく、ルートの位置を指定する 24 ファイルシステム上の絶対パスは、URIにおける絶対パスの前方にroot ディレクティブに指定されたパスを結合したものになります —
第3章 基本設定 P.45
rootディレクティブの使い方 - location中にあるせいで挙動がわかりづらい - サンプルコードとしてあんまり良くない例 25 (ch4/nginx/4.1-list4.2-location_directive.conf) server { root
/var/www/html; location /images/ { # プレフィックスを指定 root /var/www/img; } } リスト4.2 locationディレクティブによる設定の例
rootディレクティブの使い方 - rootディレクティブの記述箇所は同じサービスであれば1箇所だけにする - パスの書き換えにはrewriteディレクティブを用いた方が無難 - どうしてもlocationディレクティブによって、静的ファイルパスだけを 書き換えないといけない場合はaliasディレクティブを検討する (本書では未説明) 26
27 第5章 安全かつ高速なHTTPSサーバの構築 - HTTPS通信を提供するために推奨されている設定を紹介 - 執筆時にはLet’s encryptがなかった……
常に最新の情報を参照し対策する - Webにおけるセキュリティ対策としては 常に情報をアップデートし続けることが最も重要 - 書籍を読んで設定して安心せず、常に最新の情報に目を光らせておく - nginxは無停止でバイナリの更新が可能 - バイナリアップグレードの方法は8.6
無停止でのアップグレードを参照 28
29 第6章 Webアプリケーションサーバの構築 - PHPやRuby on Railsアプリケーションなどアプリケーションプロセス と同居するnginxについて
リクエスト/レスポンス バッファリング PHP-FPM、Unicornのようなアプリケーションの場合、通信開始から通信終了 までスレッドがブロックされる 30 ハンドシェイク 通信終了 リクエスト レスポンス リクエスト処理
リクエスト/レスポンス バッファリング nginxによってバッファリングすることで、ブロック時間を短縮できる nginx—アプリケーション間はUNIXドメインソケットで通信 31 ハンドシェイク 通信終了 リクエスト レスポンス リクエスト処理
nginx
リクエストのバッファリング POSTされるサイズが大きい場合、以下のディレクティブの設定を確認: client_max_body_size client_body_buffer_size client_body_temp_path 特にclient_max_body_sizeの値を超えるリクエストでは413エラーを返す ので注意が必要 32 書式6.2 書式6.3
書式6.4
プロキシのタイムアウト nginxではプロキシに関するタイムアウトを設定できる proxy_connect_timeout proxy_send_timeout proxy_read_timeout 33 書式6.11
書式6.12 書式6.13 nginx TCPハンドシェイク HTTPリクエスト HTTPレスポンス
34 第7章 大規模コンテンツ配信サーバの構築 - ピクシブでの事例をより一般化した内容 - 如何にスケールしやすいコンテンツ配信を実現するのか
参考資料 pixivにおけるコンテンツ配信 https://speakerdeck.com/harukasan/jpnap-users-meeting-2015-02 サムネイルマスタとgo-thumber https://speakerdeck.com/harukasan/use-thumbnail-master-with-go-thumber 35
36 第8章 Webサーバの運用とメトリクスモニタリング - Webサーバの運用にはどのような事柄が必要か - Fluentd/Norikraによるメトリクスモニタリングも紹介
ログの書き出しフォーマット - 書き出し形式を後から変えやすいものにしておく - TSV、またはLTSVにしておくと後からフィールドの追加がやりやすい - LTSVにしておくと転送側(Fluentd)の設定をあまり変えなくて良い - shell scriptでちょっと処理したいときはTSVの方が便利
37
ログ解析基盤につなぎやすいように設計する - 必要なログベースではなく、必要かもしれないログはすべて送れる様に しておく - nginxをフロントサーバとして利用することで、HTTPリクエストを とりあえず集めることができるようになる 38
39 第9章 Luaによるnginxの拡張 - ngx_luaによるnginxの拡張方法について
ngx_luaのコメント 40 誤: location / { default_type text/plain; content_by_lua ‘
# レスポンス生成 … # レスポンスを返す ‘; } リスト9.4 log_by_luaディレクティブによるロギング 正: location / { default_type text/plain; content_by_lua ‘ -- レスポンス生成 … -- レスポンスを返す ‘; } 正誤情報
ngx_luaのコメント - Luaのコメントは’#’ではなく’--‘ではじめる - v0.9.17から推奨されているcontent_by_lua_blockでも同じ書式が推奨 41 location / { content_by_lua_block
{ -- レスポンス生成 … -- レスポンスを返す } } ←このブレースの中はLuaを記述
42 まとめ: nginxによる実践的Webシステム
nginxによる実践的Webシステム 本書の個人的テーマ: - 単なるリファレンスではなく、実際にWebサービスにおいて活かせる、 使える本にする - 特定の組織・システムに限定されない、より一般化した情報にする - なんかこのまま使えないけど、どっか使える、みたいなかんじ 43
44 第3章 基本設定 nginx とりあえずnginxが動かせるようになる
45 第4章 静的なWebサイトの構築 nginx 静的ページを配信できるようになる
46 第5章 安全かつ高速なHTTPSサーバの構築 nginx HTTPS HTTPS通信を提供できるようになる
47 第6章 Webアプリケーションサーバの構築 nginx HTTPS Application アプリケーションサーバ Webアプリケーションを動かせるようになる
48 第7章 大規模コンテンツ配信サーバの構築 nginx コンテンツ配信クラスタ HTTPS Application nginx nginx nginx nginx
nginx nginx nginx アプリケーションサーバ CDN コンテンツ配信ができるようになる
49 第8章 Webサーバの運用とメトリクスモニタリング nginx コンテンツ配信クラスタ HTTPS Application nginx nginx nginx nginx
nginx nginx nginx アプリケーションサーバ Fluentd Norikra GrowthForecast ログ解析・運用基盤 CDN メトリクス収集・分析できる
50 第9, 10章 Luaによるnginxの拡張 nginx コンテンツ配信クラスタ HTTPS Application nginx nginx nginx
nginx nginx nginx nginx アプリケーションサーバ Fluentd Norikra GrowthForecast ログ解析・運用基盤 CDN Lua Lua Lua Luaが拡張できるようになる
nginxによる実践的Webシステム nginxは単なるHTTPサーバではなく、HTTPによって提供されるWebシステム のあらゆる部品としてnginxを利用することができる 51 nginx Application Application HTTPS