簡潔な答え
シンWeb サーバーを使用しています。はnginx
すべてのリクエストを実行中のインスタンスにリダイレクトするように構成されてthin
おり、それがシークレットです。
アイデアは次のとおりです。
- Rails がポートで実行されているとしましょう。
3000
nginx
アプリケーションのディレクトリですべての静的を直接処理します
nginx
すべての要求(静的なものではない)をリダイレクトしますlocalhost:3000
構成例
nginx
設定ファイルは次のとおりです。
server {
listen 80;
server_name myapp.com;
client_max_body_size 800M;
client_header_timeout 23m;
client_body_timeout 23m;
send_timeout 23m;
root /home/user/myapp/public/;
error_log /home/user/myapp/log/nginx_errors.log;
access_log /home/user/myapp/log/nginx_access.log;
# One more statics route
# location /assets/(.+-[a-z0-9]+\.\w+) {
# root /home/user/myapp/public/assets/$1;
# internal;
# }
location /images/(.+)(\?.*)? {
root /home/user/myapp/public/images/$1;
internal;
}
location / {
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Sendfile-Type X-Accell-Redirect;
if (-f $request_filename) {
expires max;
break;
}
if (!-f $request_filename) {
proxy_pass http://127.0.0.1:3000;
break;
}
}
}
そして、ここにthin
設定ファイルがあります:
chdir: /home/user/myapp/
environment: production
address: 0.0.0.0
port: 3000
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 100
require: []
wait: 30
servers: 1
daemonize: true
threaded: true
Thin と nginx を実行してアプリケーションを取得する
したがって、すべての静的を処理し、適切に Rails アプリケーションのインスタンスにnginx
リダイレクトするアプリケーションを実行するには、次の手順を実行します。myapp.com
thin
gem の依存関係を に追加しますGemfile
。gem 'thin'
- すべてのバンドルをインストールします。
bundle install
nginx
構成ファイルをコピーして貼り付け、編集します。/etc/nginx/sites-available/myapp.conf
- ウェブサイトを有効にする
nginx
:ln -s /etc/nginx/sites-enabled/myapp.conf /etc/nginx/sites-available/myapp.conf
thin
で構成ファイルを作成し/etc/thin
、この投稿の内容をコピーして貼り付けてから修正します。mkdir /etc/thin && touch /etc/thin/myapp.yml
- システムにグローバルにインストール
thin
します:(thin install
そして、指示に従ってください)
- 実行
thin
してから実行しますnginx
:/etc/init.d/thin start && /etc/init.d/nginx restart
注:サーバーをローカルで実行していて、ドメイン/etc/hosts
でアプリケーションをテストする場合は、ルートを追加することを忘れないでください。myapp.com
127.0.0.1 myapp.com
あとがき
nginx
は、私の知る限り、主にプロキシ サーバーまたは静的処理サーバーとして使用されます。これは、その最小性と速度が原因で発生しました。nginx
そのようなタスクが本当に得意です。
それでも、Phusion Passenger
本当に、本当に遅いものです。仕事中に自分で気づいたこと。に切り替えたのはそのためthin
です。
したがって、私の答えは私自身の経験に基づいており、それ以上のものではありません。
それでも、passenger
代わりにthin
-nginx
を使用できますが、アプリケーションにリダイレクトされます。ただし、リクエストの処理にはさらに時間がかかる場合があります。
これがいつか誰かを助けることを願っています。質問と幸せなコーディングをありがとう!