Memo/Linux/nginx

http://dexlab.net/pukiwiki/index.php?Memo/Linux/nginx
 

nginx

  • http://nginx.org/ja/

    nginx [えんじんえっくす] は Igor Sysoev によって作られた HTTP とリバースプロキシのサーバで、メールプロキシサーバでもあります。Rambler (RamblerMedia?.com) を含むロシアの多くの高負荷サイトで5年以上も動いています。Netcraft によると、nginx は 2010 年 4 月時点で 4.70% の人気サイトでサーバーとして、もしくはプロキシとして利用されています。成功例としては FastMail?.FM や Wordpress.com があります。


動的モジュール

nginx-1.9.11以降では動的モジュールがサポートされた


モニタリング


headers-more-nginx-module: 指定のレスポンスヘッダを消す


構文チェック

  1. sudo service nginx configtest
  2. # または
  3. sudo nginx -t -c /etc/nginx/nginx.conf

古いバージョン


Windows版

  • 終了: stop.bat
    1. nginx -s stop

apacheのgraceful相当の再起動

apacheのgraceful相当の再起動方法があるようだ。リクエストを受けつつ、設定を変更して再起動する。

  • CentOS6.x
    1. sudo /sbin/service nginx upgrade

proxy_passに直接ホスト名を指定すると、DNS名前解決が一度しか行われない

  • nginx-1.4.6-1.el6でも発生
  • proxy.example.comのIPが変わると動作しなくなる。nginxの再起動が必要
    1. location / {
    2.   proxy_pass http://proxy.example.com:80;
    3. }
  • 変数にすると名前解決してくれる。resolverはIPアドレスが必要。Google Public DNSを指定する場合は以下。もしくはdnsmasqをインストールして127.0.0.1を指定。
    1. location / {
    2.   resolver 8.8.8.8 8.8.4.4;
    3.   set $proxy "proxy.example.com";
    4.   proxy_pass http://$proxy:80;
    5. }

レスポンスヘッダのnginx versionを隠す

  1. http {
  2.     server_tokens off;
  3. }

http headerを消す

  • コンパイルオプションによって使えるmoduleが違うので確認
    1. nginx -v

SSL


SNI:1台のホストで複数のSSL証明書を使う


SSLv3無効化

  • ELB Security Policy-2015-05 と同じ設定
    1. ssl on;
    2. ssl_prefer_server_ciphers on;
    3. ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    4. ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:DES-CBC3-SHA';

WebSocket?

  • リバースプロキシとして利用する例。
    • デフォルトだと60秒でセッションが切れるため、proxy_read_timeoutで秒数を指定する
      1.     server {
      2.         listen       80;
      3.         server_name  localhost;
      4.  
      5.         location / {
      6.             proxy_pass http://localhost:3000/;
      7.             proxy_http_version 1.1;
      8.             proxy_set_header Upgrade $http_upgrade;
      9.             proxy_set_header Connection "upgrade";
      10.             proxy_read_timeout 300; # default: 60 seconds
      11.         }

ロードバランサ

チューニング

  • 通常は"auto"でCPUのコア数が設定される。SSLや圧縮を使用する時は例外で、倍の数のworkerを使った方が良い。
    1. vi /etc/nginx/nginx.conf
    2. ----
    3. worker_processes  auto;
    4. ----

HttpRealipModule?

  • http://wiki.nginx.org/HttpRealipModule
  • リバースプロキシや、Amazon ELB等でアクセス元IPが、リバースプロキシやロードバランサになってしまう。
  • HTTPヘッダに 「X-Forwarded-For」がある場合、これをアクセス元IPに置換するモジュール
  • Amazon ELBの場合
    1. http {
    2.     set_real_ip_from   10.0.0.0/8;
    3.     real_ip_header     X-Forwarded-For;
    4. }
  • アクセス制限をしたい場合は "location セクション"等で指定できる
    1. location / {
    2.     deny xxx.xxx.xxx.xxx;
    3. }

インストール

  • CentOS6.3 x86_64
  • リポジトリの追加
  • nginx: download からOSにあったパッケージをダウンロードできる
    1. cd /usr/local/src
    2. wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
    3. rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
  • nginxのインストール
    1. yum install nginx
  • 確認
    1. rpm -qa | grep nginx
    2.  
    3. nginx-1.2.3-1.el6.ngx.x86_64
    4. nginx-release-centos-6-0.el6.ngx.noarch

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)