Memo/Linux/nginx

https://dexlab.net:443/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: 指定のレスポンスヘッダを消す


構文チェック

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

古いバージョン


Windows版

  • 終了: stop.bat
    nginx -s stop

apacheのgraceful相当の再起動

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

  • CentOS6.x
    sudo /sbin/service nginx upgrade

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

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

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

http {
    server_tokens off;
}

http headerを消す

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

SSL


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


SSLv3無効化

  • ELB Security Policy-2015-05 と同じ設定
    ssl on;
    ssl_prefer_server_ciphers on;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    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で秒数を指定する
          server {
              listen       80;
              server_name  localhost;
      
              location / {
                  proxy_pass http://localhost:3000/;
                  proxy_http_version 1.1;
                  proxy_set_header Upgrade $http_upgrade;
                  proxy_set_header Connection "upgrade";
                  proxy_read_timeout 300; # default: 60 seconds
              }

ロードバランサ

チューニング

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

HttpRealipModule?

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

インストール

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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (8d)