nginx
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
nginx [2011/07/10 13:00] – nullpon | nginx [2020/05/29 09:30] (現在) – nullpon | ||
---|---|---|---|
行 1: | 行 1: | ||
====== nginx ====== | ====== nginx ====== | ||
- | 非同期IOで動作する高速なHTTPサーバ。 | + | 非同期IOで動作する高速なHTTPサーバ。読み方は「えんじんえっくす」 |
- | ロシア製ということで当初胡散臭く見られていたが、圧倒的な静的ファイルの配信力により信頼を勝ち得ている。また Passenger と組み合わせる事で Rails アプリ実行環境としても注目されている。 | ||
- | 動的リンク機能を持っていないため、機能拡張するごとにコンパイルが必要になる。が、たびたび機能拡張が必要になるならばApacheを使うべきで、完全に目的特化型で使うべきである。 | + | ===== コンフィギュレーション ===== |
- | ===== Basic認証 | + | configファイルは cong/ |
+ | |||
+ | ==== Basic認証 ==== | ||
Apache の htpasswd がそのまま使える。 | Apache の htpasswd がそのまま使える。 | ||
行 30: | 行 31: | ||
</ | </ | ||
- | ===== passenger ===== | + | ==== 最大接続数 |
- | nginx + passenger でrailsアプリを起動する。 | + | < |
+ | worker_processes | ||
- | Ubuntu 10.04では以下のライブラリをインストールする | + | events { |
+ | worker_connections | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | worker_processes と worker_connections | ||
+ | |||
+ | ==== ファイルディスクリプタの制限 ==== | ||
+ | Linuxではユーザが使用可能なリソース数が制限されている。Ubuntuではデフォルトでファイルを1024以上オープンできないが、nginxで同時に大量のリクエスト処理を行うと1024を上回る可能性がある。 | ||
+ | |||
+ | worker_rlimit_nofile で nginx プロセスがオープンできるリソースの制限を変更できる。 | ||
< | < | ||
- | $ sudo aptitude install build-essential | + | worker_processes |
- | $ sudo aptitude install libcurl4-openssl-dev | + | worker_rlimit_nofile 4096; |
+ | |||
+ | events { | ||
+ | worker_connections | ||
+ | } | ||
</ | </ | ||
- | rubyやgem、rails等のインストール後、gemでpassengerをインストール。ここではバージョンを明示しているが、特に指定せず最新版を入れると良い。 | + | ※ この設定は1 worker_processesあたりの設定? worker_connectionsと同じで良いのか? 仮にそうだとしてkeep aliveやssiを使っていると1コネクションで複数ファイルを開くので、その場合はconnectionより大きい値を指定しないといけない? 要調査。 |
+ | |||
+ | ===== ログローテーション ===== | ||
+ | Ubuntuのログローテーションの例(月単位でローテーション) | ||
< | < | ||
- | $ sudo gem install -v=3.0.7 passenger --no-rdoc --no-ri | + | /var/log/nginx/*.log { |
- | $ sudo /var/lib/gems/1.8/gems/passenger-3.0.7/bin/passenger-install-nginx-module | + | 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 | ||
+ | } | ||
</ | </ | ||
- | とりあえず起動と停止 | + | nginxはUSR1シグナルでログファイルを開き直す。 |
+ | |||
+ | |||
+ | |||
+ | ==== nginx.confに設定を追加 ==== | ||
+ | |||
+ | Rubyの設定(これはビルドすると最初から設定済み) | ||
< | < | ||
- | $ sudo /opt/nginx/sbin/nginx | + | http { |
- | $ sudo /opt/nginx/sbin/nginx -s stop | + | # ... |
+ | |||
+ | passenger_root | ||
+ | passenger_ruby | ||
+ | |||
+ | # ... | ||
+ | } | ||
</ | </ | ||
- | railsを設定。 | + | 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.1310302855.txt.gz · 最終更新: 2011/07/10 13:00 by nullpon