0

nginx エラー ログには次failed (2: No such file or directory)のように記載されています。ブラウザに 404 エラーが表示されます。アプリケーションのホームページにアクセスすると、「nginx へようこそ」ページが表示さwww.myapp.comます ( )。

多くの構成バリアントを試しました。現在のものは次のとおりです。

設定ファイル

user  mo;
worker_processes  4;
error_log /opt/nginx/logs/error.log;
pid   /opt/nginx/logs/nginx.pid;
events {
worker_connections  1024;
}

http {
passenger_root /home/mo/gemshome/gems/passenger-4.0.2;
passenger_ruby /usr/local/bin/ruby193;

rails_env production;

include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;


server {
listen       80;
    server_name  www.myapp.com;
    root /home/mo/myapp/public;
passenger_enabled on;
    location / {
        root   html;
        index  index.html index.htm;
    }

    # redirect server error pages to the static page /50x.html              

それでも、Rails の運用環境が正しくセットアップされているかどうかはわかりません (nginx 構成ファイルの対応する行)。

phusionHOWTOのすべてまたはほとんどに従いました。

サーバーを実行するとアプリケーションが動作しwebrickます。だから私は自分のアプリが動作すると仮定しましたが、それはポートで実行されているので、一緒3000 に実行する方法を知る必要があります.nginxpassenger

4

2 に答える 2

2

簡潔な答え

シン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

  1. thingem の依存関係を に追加しますGemfilegem 'thin'
  2. すべてのバンドルをインストールします。bundle install
  3. nginx構成ファイルをコピーして貼り付け、編集します。/etc/nginx/sites-available/myapp.conf
  4. ウェブサイトを有効にするnginx:ln -s /etc/nginx/sites-enabled/myapp.conf /etc/nginx/sites-available/myapp.conf
  5. thinで構成ファイルを作成し/etc/thin、この投稿の内容をコピーして貼り付けてから修正します。mkdir /etc/thin && touch /etc/thin/myapp.yml
  6. システムにグローバルにインストールthinします:(thin installそして、指示に従ってください)
  7. 実行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を使用できますが、アプリケーションにリダイレクトされます。ただし、リクエストの処理にはさらに時間がかかる場合があります。

これがいつか誰かを助けることを願っています。質問と幸せなコーディングをありがとう!

于 2013-05-21T08:34:21.250 に答える