SlideShare a Scribd company logo
1 of 10
Nginx
       [en-juhn-eks]
まだリバースプロキシにApache使ってるんですか?
what's Nginx?
Nginxは無料で利用できるオープンソースのハイパフォーマンスHTTPサーバ且つリバースプロ
キシで、IMAP/POP3のプロキシサーバとしても動作します。Igor Sysoevによって2002年に開発
が始まり、2004年に最初のバージョンが公開されました。今では世界中のドメインのおよそ
12.18% (22.2M)のWebサイトをNginxが稼働させています。

Nginxはその高いパフォーマンスと安定性、豊富な機能、設定の容易さ、消費リソースの低さ
で知られています。

NginxはC10K問題に取り組むべく開発された一握りのサーバのうちの一つです。従来のサーバ
とは異なり、Nginxはリクエストの処理をスレッドに依存していません。その代わりにもっと
スケーラブルな(非同期の)イベント駆動アーキテクチャを使用しています。このアーキテク
チャはメモリ使用量が少ないだけでなく、最も重要な事として、稼働時のメモリ使用量が予測
可能であるということです。
同時リクエスト数が1万リクエストもなかったとしても、Nginxのハイパフォーマンスやメモリ
消費量の少なさの恩恵を受ける事はできるでしょう。Nginx は小規模な VPS から大規模なサー
バからなるクラスタまで対応する拡張性を備えています。

NginxはWordPressやHulu、Github、Ohloh、SourceForge、WhitePages、TorrentReactor といった知
名度の高いサイトを稼働させています。
                                                         http://wiki.nginx.org/NginxJa
Totals for Active Sites Across All Domains
      June 2000 - January 2012
C10K Problem
• クライアント数があまりにも多くなると
  サーバがパンクする問題
• 簡単な例は、プロセス数。Apacheは、1リ
  クエスト=1プロセス。大量リクエストで
  生成可能なプロセスが枯渇する。
• サーバ性能が上がっててもプロセス数の
  最大は変わらない(30000程度)
• サーバがどんなに高性能になってもこの
  問題はなくならない。
イベント駆動アーキテクチャ
• ブロッキングI/O
 – データ処理中は他の処理を受け付けない
 – 処理を待たせるため、大量のWorkerプロセスが必要
   となる
 – Apache

• ノンブロッキングI/O
 – データ処理中でも他の処理を受け付ける
 – 複数の処理を1度に受け付けて、待ち時間に他の処理
   を実行できるので、Workerプロセスを効率的に使え
   る。
 – Nginx、Node.js
Nginxの構成例
         コンテンツ
            サーバ
           (Apache,
        Varnish Cache,
             etc...)



          Appサーバ
Nginx   (Apache,Node,
        Starman,etc...)

                          DB

          Appサーバ
        (Apache,Node,
        Starman,etc...)
インストール(CentOS6)
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-
centos-6-0.el6.ngx.noarch.rpm

# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

# yum -y install nginx

# chkconfig nginx on             ←自動起動の設定
設定
user nginx;                                                                             error_page 500 502 503 504 /50x.html;
worker_processes 2;                                                                   location = /50x.html {
                                                                                         root /usr/share/nginx/html;
error_log /var/log/nginx/error.log warn;
pid    /var/run/nginx.pid;                                                            }

events {                                                                              location / {
   event epoll;                                                                        proxy_redirect off;
  worker_connections 1024;
                                                                                       proxy_connect_timeout 15;
}
                                                                                       proxy_send_timeout 15;
http {                                                                                 proxy_read_timeout 15;
  include    /etc/nginx/mime.types;
  default_type application/octet-stream;                                              proxy_set_header X-FORWARDED_PROTO http;
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '             proxy_set_header Host          _:80;
          '$status $body_bytes_sent "$http_referer" '                                 proxy_set_header X-Real-IP    $remote_addr;
          '"$http_user_agent" "$http_x_forwarded_for"';                               proxy_set_header X-Forwarded-Host $host;
                                                                                      proxy_set_header X-Forwarded-Server $host;
  access_log /var/log/nginx/access.log main;                                          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  sendfile    on;
  keepalive_timeout 65;                                                               proxy_pass http://app-server/;
                                                                                  }
  upstream app-server {                                                       }
    server localhost:8080;                                                   }
  }

  server {
    listen  80;
    server_name hostname.localhost.localdomain;

    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
       return 404;
                                                                                  たったこれだけの設定で
    }

    error_page 404         /404.html;
                                                                                  Apache以上の性能がたた
    location = /404.html {

    }
      root /usr/share/nginx/html;                                                 きだせる
Nginxの特徴
• 下位サーバの戻りを気にせずに他の処理も受
  け付けられるので、リバースプロキシに適し
  ている
• 静的コンテンツが得意
  (不足はあるがコンテンツキャッシュ機能も
    存在する)
• 動的コンテンツは苦手
   (動的コンテンツは、ApacheやNode.js,
    Starmanに任せたほうが幸せ)
リバースプロキシには、
Apacheではなく、Nginxを使いましょう。

More Related Content

What's hot

10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormationKazuyuki Honda
 
serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?Sho Hashimoto
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろkjwtnb
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
serverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようserverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようDaisuke Ikeda
 
Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)Kimiyuki Yamauchi
 
Tomcat環境をインストールする(debian)
Tomcat環境をインストールする(debian)Tomcat環境をインストールする(debian)
Tomcat環境をインストールする(debian)Kimiyuki Yamauchi
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0Satoshi Kume
 
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレperyaudo
 
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたWebサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたdo_aki
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)Iwana Chan
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼうDaiki Ichinose
 
ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!ftnk
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall博文 斉藤
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESIIwana Chan
 

What's hot (20)

10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation10分で作る Node.js Auto Scale 環境 with CloudFormation
10分で作る Node.js Auto Scale 環境 with CloudFormation
 
serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?serverspecみんなで集めて(゚Д゚)ウマー?
serverspecみんなで集めて(゚Д゚)ウマー?
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
serverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようserverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみよう
 
Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)Lamp環境&Wordpress設定(debian)
Lamp環境&Wordpress設定(debian)
 
Tomcat環境をインストールする(debian)
Tomcat環境をインストールする(debian)Tomcat環境をインストールする(debian)
Tomcat環境をインストールする(debian)
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0
 
Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
 
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみたWebサーバ勉強会4 nginx で php-fpm を動かしてみた
Webサーバ勉強会4 nginx で php-fpm を動かしてみた
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
test
testtest
test
 
ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
 
Lxc on cloud
Lxc on cloudLxc on cloud
Lxc on cloud
 
Vagrant+Chef
Vagrant+ChefVagrant+Chef
Vagrant+Chef
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESI
 

Similar to Nginx

Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805shinyatsukasaki
 
Word press on conoha このべん #3
Word press on conoha このべん #3Word press on conoha このべん #3
Word press on conoha このべん #3Wataru OKAMOTO
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携Akihiro Kitada
 
nginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するnginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するAtsushi Hayakawa
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記96smcln
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChefMasahiro NAKAYAMA
 

Similar to Nginx (20)

Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Openresty
OpenrestyOpenresty
Openresty
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805
いまさら聞けないNGINXコンフィグ_F5-NGINX-Community-20200805
 
Word press on conoha このべん #3
Word press on conoha このべん #3Word press on conoha このべん #3
Word press on conoha このべん #3
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携
 
nginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するnginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積する
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChef
 
Capistrano
CapistranoCapistrano
Capistrano
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Recently uploaded (9)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

Nginx

  • 1. Nginx [en-juhn-eks] まだリバースプロキシにApache使ってるんですか?
  • 2. what's Nginx? Nginxは無料で利用できるオープンソースのハイパフォーマンスHTTPサーバ且つリバースプロ キシで、IMAP/POP3のプロキシサーバとしても動作します。Igor Sysoevによって2002年に開発 が始まり、2004年に最初のバージョンが公開されました。今では世界中のドメインのおよそ 12.18% (22.2M)のWebサイトをNginxが稼働させています。 Nginxはその高いパフォーマンスと安定性、豊富な機能、設定の容易さ、消費リソースの低さ で知られています。 NginxはC10K問題に取り組むべく開発された一握りのサーバのうちの一つです。従来のサーバ とは異なり、Nginxはリクエストの処理をスレッドに依存していません。その代わりにもっと スケーラブルな(非同期の)イベント駆動アーキテクチャを使用しています。このアーキテク チャはメモリ使用量が少ないだけでなく、最も重要な事として、稼働時のメモリ使用量が予測 可能であるということです。 同時リクエスト数が1万リクエストもなかったとしても、Nginxのハイパフォーマンスやメモリ 消費量の少なさの恩恵を受ける事はできるでしょう。Nginx は小規模な VPS から大規模なサー バからなるクラスタまで対応する拡張性を備えています。 NginxはWordPressやHulu、Github、Ohloh、SourceForge、WhitePages、TorrentReactor といった知 名度の高いサイトを稼働させています。 http://wiki.nginx.org/NginxJa
  • 3. Totals for Active Sites Across All Domains June 2000 - January 2012
  • 4. C10K Problem • クライアント数があまりにも多くなると サーバがパンクする問題 • 簡単な例は、プロセス数。Apacheは、1リ クエスト=1プロセス。大量リクエストで 生成可能なプロセスが枯渇する。 • サーバ性能が上がっててもプロセス数の 最大は変わらない(30000程度) • サーバがどんなに高性能になってもこの 問題はなくならない。
  • 5. イベント駆動アーキテクチャ • ブロッキングI/O – データ処理中は他の処理を受け付けない – 処理を待たせるため、大量のWorkerプロセスが必要 となる – Apache • ノンブロッキングI/O – データ処理中でも他の処理を受け付ける – 複数の処理を1度に受け付けて、待ち時間に他の処理 を実行できるので、Workerプロセスを効率的に使え る。 – Nginx、Node.js
  • 6. Nginxの構成例 コンテンツ サーバ (Apache, Varnish Cache, etc...) Appサーバ Nginx (Apache,Node, Starman,etc...) DB Appサーバ (Apache,Node, Starman,etc...)
  • 7. インストール(CentOS6) # wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release- centos-6-0.el6.ngx.noarch.rpm # rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm # yum -y install nginx # chkconfig nginx on ←自動起動の設定
  • 8. 設定 user nginx; error_page 500 502 503 504 /50x.html; worker_processes 2; location = /50x.html { root /usr/share/nginx/html; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; } events { location / { event epoll; proxy_redirect off; worker_connections 1024; proxy_connect_timeout 15; } proxy_send_timeout 15; http { proxy_read_timeout 15; include /etc/nginx/mime.types; default_type application/octet-stream; proxy_set_header X-FORWARDED_PROTO http; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' proxy_set_header Host _:80; '$status $body_bytes_sent "$http_referer" ' proxy_set_header X-Real-IP $remote_addr; '"$http_user_agent" "$http_x_forwarded_for"'; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; access_log /var/log/nginx/access.log main; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; sendfile on; keepalive_timeout 65; proxy_pass http://app-server/; } upstream app-server { } server localhost:8080; } } server { listen 80; server_name hostname.localhost.localdomain; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 404; たったこれだけの設定で } error_page 404 /404.html; Apache以上の性能がたた location = /404.html { } root /usr/share/nginx/html; きだせる
  • 9. Nginxの特徴 • 下位サーバの戻りを気にせずに他の処理も受 け付けられるので、リバースプロキシに適し ている • 静的コンテンツが得意 (不足はあるがコンテンツキャッシュ機能も 存在する) • 動的コンテンツは苦手 (動的コンテンツは、ApacheやNode.js, Starmanに任せたほうが幸せ)