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