ユーザ用ツール

サイト用ツール


nginx

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
nginx [2011/08/17 13:59] – [passenger] nullponnginx [2020/05/29 09:30] (現在) nullpon
行 1: 行 1:
 ====== nginx ====== ====== nginx ======
-非同期IOで動作する高速なHTTPサーバ。+非同期IOで動作する高速なHTTPサーバ。読み方は「えんじんえっくす」
  
-===== Basic認証 =====+ 
 +===== コンフィギュレーション ===== 
 + 
 +configファイルは cong/nginx.conf である。 
 + 
 +==== Basic認証 ====
 Apache の htpasswd がそのまま使える。 Apache の htpasswd がそのまま使える。
  
行 26: 行 31:
 </code> </code>
  
-===== passenger ===== +==== 最大接続数 ====
-nginx + passenger でrailsアプリを起動する。 +
- +
-Ubuntu 10.04では以下のライブラリをインストールする +
 <code> <code>
-$ sudo aptitude install build-essential +worker_processes  2; 
-$ sudo aptitude install libcurl4-openssl-dev+ 
 +events { 
 +    worker_connections  1024; 
 +}
 </code> </code>
  
-rubyやgemrails等のイントール後、gemでpassengerをイここではジョを明示してが、指定せず最新版入れる良い+worker_processes と worker_connections の積場合は2048リクエストが最大接続数となる。想定される最大クラント数×1ペジ当たりの平均ファイ数より多少大きい値設定すると良い。 
 + 
 +==== ファルディクリプタの制限 ==== 
 +Linuxではユザが使用可能なリソース数が制限されているUbuntuではデフォルトでファイルを1024以上オできないが、nginxで同時大量のリクエスト処理行う1024を上回る可能性がある。 
 + 
 +worker_rlimit_nofile で nginx プロセスがオープンできるリソースの制限を変更できる
  
 <code> <code>
-$ sudo gem install -v=3.0.7 passenger --no-rdoc --no-ri +worker_processes  2; 
-$ sudo /var/lib/gems/1.8/gems/passenger-3.0.7/bin/passenger-install-nginx-module+worker_rlimit_nofile 4096; 
 + 
 +events { 
 +    worker_connections  1024; 
 +}
 </code> </code>
  
-とりあえず起動停止+※ この設定は1 worker_processesあたりの設定? worker_connections同じで良いのか? 仮にそうだとしてkeep aliveやssiを使っていると1コネクションで複数ファイルを開くので、その場合はconnectionよ大きい値を指定しないいけない? 要調査。 
 + 
 +===== ログローテーション ===== 
 +Ubuntuのログローテーションの例(月単位でローテーション)
  
 <code> <code>
-$ sudo /opt/nginx/sbin/nginx  +/var/log/nginx/*.log { 
-$ sudo /opt/nginx/sbin/nginx -s stop+        monthly 
 +        missingok 
 +        rotate 12 
 +        compress 
 +        delaycompress 
 +        notifempty 
 +        create 640 root adm 
 +        sharedscripts 
 +        postrotate 
 +                test -f /var/run/nginx.pid && kill -USR1 `cat /var/run/nginx.pid` 
 +        endscript 
 +}
 </code> </code>
  
-==== nginx.conf ====+nginxはUSR1シグナルでログファイルを開き直す。 
 + 
 + 
 + 
 +==== nginx.confに設定を追加 ====
  
 Rubyの設定(これはビルドすると最初から設定済み) Rubyの設定(これはビルドすると最初から設定済み)
行 103: 行 134:
 </code> </code>
  
 +===== PHP =====
 +Apacheにおけるmod_phpのようなモジュールは無いので、FastCGIでphpを動作させる。php-fpmまたはspawn-fcgiを使う。
 +
 +==== php-fpm ====
 +PHP-FPM(PHP FastCGI Process Manager)はPHP5.3から導入されたFCGIのプロセス管理ツール。
 +
 +Ubuntu 10.04標準のaptリポジトリにはパッケージが無い。nginxチームが作成したリポジトリにあるので、そのリポジトリを追加する。ただし標準のリポジトリではないので、次のLTS(12.04)リリース後はサポートされない可能性もあるので注意。
 +<code>
 +$ sudo aptitude install python-software-properties
 +$ sudo add-apt-repository ppa:nginx/php5
 +$ sudo aptitude update
 +</code>
 +
 +インストール。起動スクリプトやconfigも作成される。デフォルトではport 9000でFCGIを起動する。
 +<code>
 +$ sudo aptitude install php5-fpm
 +</code>
 +
 +起動と停止
 +
 +<code>
 +$ sudo service php5-fpm start
 +$ sudo service php5-fpm stop
 +</code>
 +
 +なお、PHPをFCGIプロセスとして起動するためには、FCGIを有効にしてPHPをビルドする必要がある。aptのPHPは有効になっているので気にしなくていいが独自ビルドする場合は注意する。
 +
 +==== spawn-fcgi ====
 +
 +<code>
 +$ sudo aptitude install php5-cgi
 +$ sudo aptitude install spawn-fcgi
 +</code>
 +
 +起動スクリプトが無いので自分で作る。/etc/init.d/php5-fastcgi ファイルを作成
 +
 +<code bash>
 +#!/bin/bash
 +
 +PID_FILE="/var/run/php5-fcgi.pid"
 +
 +FCGI_EXEC="/usr/bin/spawn-fcgi"
 +FCGI_OPTS="-a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -C 3 -P $PID_FILE"
 +
 +RETVAL=0
 +
 +start_fcgi() {
 +  $FCGI_EXEC $FCGI_OPTS
 +}
 +stop_fcgi() {
 +  kill $(cat $PID_FILE) 
 +}
 +
 +case "$1" in
 +  start)
 +    start_fcgi
 +    RETVAL=$?
 +  ;;
 +  stop)
 +    stop_fcgi
 +    RETVAL=$?
 +  ;;
 +  restart)
 +    stop_fcgi
 +    start_fcgi
 +    RETVAL=$?
 +  ;;
 +  *)
 +    echo "Usage: php5-fastcgi {start|stop|restart}"
 +    exit 1
 +  ;;
 +esac      
 +exit $RETVAL
 +</code>
 +
 +デーモンとして設定
 +
 +<code>
 +$ sudo update-rc.d php5-fastcgi defaults
 +</code>
 +
 +起動と停止
 +
 +<code>
 +$ sudo service php5-fastcgi start
 +$ sudo service php5-fastcgi stop
 +</code>
 +
 +==== nginx.conf ====
 +spawn-fcgiでもphp-fpmでも同じ
 +
 +<code>
 +    server {
 +        listen 80;
 +        server_name  sample.paulownia.jp
 +        root         /var/www/sites/sample.paulownia.jp/htdocs;
 +        
 +        index        index.html index.php
 +        
 +        location ~ \.php$ {
 +            fastcgi_pass 127.0.0.1:9000;
 +            fastcgi_index index.php;
 +            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 +            include fastcgi_params;
 +        }
 +    }
 +</code>
 +
 +===== x-accel-redirect =====
 +
 +nginx をバックエンドアプリケーションのプロキシとして使っている場合に、アプリにproxyした後にnginxがファイルを返すようにする仕組み。
 +
 +主な用途は認証つきの静的ファイルダウンロード。nginxがファイルを返すためバックエンドアプリケーションに転送負荷をかけずに認証つきのファイルダウンロードを実装できる
 +
 +アプリ側は権限などのチェックを行い、問題なければ200レスポンスに以下のようなレスポンスヘッダをつける
 +
 +<code>
 +X-Accel-Redirect: /download/fifename1.png
 +</code>
 +
 +nginx側
 +
 +<code>
 +// アプリへのプロキシ
 +location / {
 +  proxy_pass: http://127.0.0.1:8080 
 +}
 +
 +// x-accel-redirectを受け取る部分
 +location /download {
 +  internal;   // これを忘れると直接パス指定でダウンロードし放題になるので注意
 +  root /var/www/download;
 +}
 +</code>
 +
 +ダウンロードさせるファイルは ''/var/www/download/'' 以下に設置する
nginx.1313589557.txt.gz · 最終更新: 2011/08/17 13:59 by nullpon