nginx
差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
| nginx [2011/07/10 12:36] – 作成 nullpon | nginx [2020/05/29 09:30] (現在) – nullpon | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== nginx ====== | ====== nginx ====== | ||
| - | 非同期IOで動作する高速なHTTPサーバ。 | + | 非同期IOで動作する高速なHTTPサーバ。読み方は「えんじんえっくす」 |
| - | ===== passenger ===== | ||
| - | nginx + passenger でrailsアプリを起動する。 | ||
| - | Ubuntu 10.04では以下のライブラリをインストールする | + | ===== コンフィギュレーション ===== |
| + | |||
| + | configファイルは cong/ | ||
| + | |||
| + | ==== Basic認証 ==== | ||
| + | Apache の htpasswd がそのまま使える。 | ||
| + | |||
| + | Ubuntu 10.04では以下のパッケージに htpasswd コマンドが含まれている(Apache本体は不要) | ||
| < | < | ||
| - | $ sudo aptitude install | + | $ sudo aptitude install |
| - | $ sudo aptitude install libcurl4-openssl-dev | + | |
| </ | </ | ||
| - | rubyやgem、rails等のインストール後、gemでpassengerをインストール。ここではバージョンを明示しているが、特に指定せず最新版を入れると良い。 | + | / |
| + | < | ||
| + | http { | ||
| + | .. | ||
| + | server { | ||
| + | .. | ||
| + | location / { | ||
| + | .. | ||
| + | auth_basic "Staff Only"; | ||
| + | auth_basic_user_file / | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | ==== 最大接続数 ==== | ||
| < | < | ||
| - | $ sudo gem install -v=3.0.7 passenger --no-rdoc --no-ri | + | worker_processes |
| - | $ sudo / | + | |
| + | events { | ||
| + | worker_connections | ||
| + | } | ||
| </ | </ | ||
| - | とりあえず起動と停止 | + | worker_processes |
| + | |||
| + | ==== ファイルディスクリプタの制限 ==== | ||
| + | Linuxではユーザが使用可能なリソース数が制限されている。Ubuntuではデフォルトでファイルを1024以上オープンできないが、nginxで同時に大量のリクエスト処理を行うと1024を上回る可能性がある。 | ||
| + | |||
| + | worker_rlimit_nofile で nginx プロセスがオープンできるリソースの制限を変更できる。 | ||
| < | < | ||
| - | $ sudo / | + | worker_processes |
| - | $ sudo / | + | worker_rlimit_nofile 4096; |
| + | |||
| + | events { | ||
| + | worker_connections | ||
| + | } | ||
| </ | </ | ||
| - | railsを設定。 | + | ※ この設定は1 worker_processesあたりの設定? worker_connectionsと同じで良いのか? 仮にそうだとしてkeep aliveやssiを使っていると1コネクションで複数ファイルを開くので、その場合はconnectionより大きい値を指定しないといけない? 要調査。 |
| - | つづく… | + | ===== ログローテーション ===== |
| + | Ubuntuのログローテーションの例(月単位でローテーション) | ||
| + | < | ||
| + | / | ||
| + | monthly | ||
| + | missingok | ||
| + | rotate 12 | ||
| + | compress | ||
| + | delaycompress | ||
| + | notifempty | ||
| + | create 640 root adm | ||
| + | sharedscripts | ||
| + | postrotate | ||
| + | test -f / | ||
| + | endscript | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | nginxはUSR1シグナルでログファイルを開き直す。 | ||
| + | |||
| + | |||
| + | |||
| + | ==== nginx.confに設定を追加 ==== | ||
| + | |||
| + | Rubyの設定(これはビルドすると最初から設定済み) | ||
| + | |||
| + | < | ||
| + | http { | ||
| + | # ... | ||
| + | |||
| + | passenger_root / | ||
| + | passenger_ruby / | ||
| + | |||
| + | # ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Rails(Rack)の設定 | ||
| + | < | ||
| + | http { | ||
| + | # ... | ||
| + | |||
| + | server { | ||
| + | listen | ||
| + | server_name | ||
| + | root / | ||
| + | passenger_enabled on; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Railsの特定のパス以下にbasic認証をかけたい場合は、basic認証をかけるフォルダでも passenger_enabled on を設定する。 | ||
| + | |||
| + | < | ||
| + | http { | ||
| + | # ... | ||
| + | |||
| + | server { | ||
| + | listen | ||
| + | server_name | ||
| + | root / | ||
| + | |||
| + | location / { | ||
| + | passenger_enabled on; | ||
| + | } | ||
| + | |||
| + | location /auth/ { | ||
| + | passenger_enabled on; | ||
| + | auth_basic " | ||
| + | auth_basic_user_file "/ | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== 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.1310301360.txt.gz · 最終更新: by nullpon