Help us understand the problem. What is going on with this article?

[nginx] (nginxに)跪くまで5分だけ!!

早い話がnginxに乗り換えようかなって考えてる人を後押しするための記事です。
もう既にnginxの人はお呼びではないかもしれませんが、あったあったて頷いてくれると嬉しいです。
独白視点で興奮気味に語っていきます。
(以下Apache = Apache HTTP Serverです。)

経緯

CentOS7でWEB + PHP + Node.jsという新しいシステムを構築しようとしていた時にQiitaで結構目についたnginxという言葉。

nginxとは一体なんぞや?
google先生は今日も博識だった。

出会い

まぁ、まずはWikipediaを見ないことには始まりませんね。(一部抜粋)

nginxは、フリーかつオープンソースのWebサーバである。
加えて、HTTP、SMTP、POP3、IMAPのリバースプロキシの機能も持つ。
処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されている。

  • え、Webサーバーなの?
    Apacheしか知らなかった俺氏にとっては新しい技術なんじゃね?(好奇心むき出し)

  • そしてリバースプロキシ機能付き!
    Node.jsとの連携がクソ楽勝になるじゃん!!

  • そして高性能!!
    なんと!?
    そんなすごいWebサーバーがあるのですか?

プログラムはあなたの思ったように動かなくても、設定に書いてあるように動く

Apacheは嫌いだった。
そんなに頻繁に人が訪れるサイトを管理しているわけではないので速度やC10K問題なんてどうでもよかった。
最も許せず、わかり辛かったことは設定ファイルである。
何度も何度もGoogle先生に聞いて、ダブってる箇所を訂正しエラーを潰していく。
Apacheの設定を変えることは本当に一日仕事だった。

だがnginxの設定ファイルはわけが違った。
(設定ファイルのPathについてはUbuntu・Arch Linux環境におけるものです。)

/etc/nginx/nginx.conf
user  nginx nginx;
worker_processes  8;

error_log  /var/log/nginx/error.log warn;

events {
    worker_connections  1024;
}

http {
    server_tokens off;
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_iso8601] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    charset         UTF-8;
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout             0;
    keepalive_timeout              65;
    server_names_hash_bucket_size  64;
    types_hash_max_size            4096;
    types_hash_bucket_size         128;

    #gzip  on;

    # SSL関係の設定
    ssl_session_cache    shared:SSL:50m;
    ssl_session_timeout  1d;
    ssl_session_tickets  off;

    ssl_protocols  TLSv1.2 TLSv1.3;
    ssl_ciphers    ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256;

    ssl_prefer_server_ciphers  on;

    # OCSP Stapling
    ssl_stapling         on;
    ssl_stapling_verify  on;

    # HSTS
    # RootDomainがあるServerでのみ有効化(SubDomainで有効化しても無意味)
    #add_header Strict-Transport-Security  'max-age=31536000; includeSubDomains; preload';

    # server設定ファイルを以下のPathから読み込む
    include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/default.conf
geo $access_allowed {
    default 0;
    127.0.0.1 1;
    192.168.0.0/24 1;
}

server {
    listen       80;
    server_name  localhost;

    charset     UTF-8;
    access_log  /var/log/nginx/localhost/access.log  main;
    error_log   /var/log/nginx/localhost/error.log;

    location / {
        root   /var/www;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
        if ($access_allowed = 0) { return 403; }
    }

    # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock

    location ~ \.php$ {
        root           /var/www;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

テスト環境のみで使っているコンフィグファイルの丸コピ(全文)である。
細かいことは気にしなくていい。
だが、はっきりとわかることがあると思う。

そう!Apacheとは比にならないほど綺麗であると!
VirtualHostの設定がどこそこでロードファイルの読み込みがどこそこでサーバールートの設定がどこそこで・・・
そして意味不明なコンフリクト(設定の衝突・競合)が発生するのである。
勘弁しろ下さい!!

で?

Apacheは金輪際出入り禁止!!
nginx初見者の俺氏にとって死角はなかった!!
Apacheさんにはテスト環境からも本番環境からも即刻退去してもらいました。

nginxのいいとこまとめ

  • リバースプロキシ機能付きWebサーバー(各言語のWebフレームワークと相性いい)
  • リバースプロキシ機能を全面に押し出して使用することも可能
  • (↑ロードバランサー・SSLアクセラレーション・WAF・Apacheとの共存)
  • 同時接続数がApacheの10~100倍は耐えられます(開発者の言葉)
  • 多分これが一番早いと思います
  • メモリの扱いがApacheより上手い
  • 設定ファイルがスクリプトライクで簡潔
  • 軽量サーバーの中では一番の有望株(長く使われるほど、お手入れが活発化する)

以上で5分位だと思いますが、それ以上にnginxをよく知るためのリンク集

こんなもんかね。

おまけ

因みに・・・
nginxを使わないでNode.jsと共存させたい場合。

node-http-proxyなるものがあるらしい。
 
 
 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした