2015-12-10 18 views
5

NginxとRoR Webサーバー(Unicorn,またはWEBrickなど)で自分のローカルコンピュータにRuby on Railsアプリケーションを展開したいと考えています。なぜ私はサブドメインにアクセスできないのですか?

以下に示すように、私はpostサブドメインで私のWebアプリへのアクセスをしたい:

upstream sub { 
    server unix:/tmp/unicorn.subdomain.sock fail_timeout=0; 
# server 127.0.0.1:3000; 
} 

server { 
    listen 80; 
    server_name post.subdomain.me; 

    access_log /var/www/subdomain/log/access.log; 
    error_log /var/www/subdomain/log/error.log; 
    root  /var/www/subdomain; 
    index index.html; 

    location/{ 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby; 
    } 

    location @ruby { 
    proxy_pass http://sub; 
    } 
} 

すべてが正常に動作していると私はpost.subdomain.meを入力するとき、私は私のRoRのアプリを見ることができます。

問題:私はpost.subdomain.me URLを使用する場合、私は(request.subdomain戻り空とrequest.hostリターンsubdomain.mesubdomain instaed)私のサブドメインにアクセスすることはできません。しかし、私がpost.subdomain.me:3000を使用すると、すべてのものが完璧に機能します(私はそれを実現するために私の髪の毛の半分を失った)。なぜ、どのように解決できますか?

+0

HTTPサーバーには何を使用していますか?あなたはUnicorn、Thin、Webrickに言及しましたが、あなたが試したものは何も言いませんでした。 –

+0

@TomL:それらのすべてで、私は同じ問題を抱えています。 –

+0

あなたの 'proxy_xxx'ディレクティブのすべてが間違った' location'ブロックにあります。 'location @ ruby​​'ブロックの' proxy_pass'ディレクティブでそれらを保持する必要があります。そうでなければ、それらは無視されます。 –

答えて

3

ポートでアプリにアクセスすると、nginxによってプロキシされていないレールサーバーに直接アクセスしていますが、これはデバッグには問題ありませんが、通常は運用には適していません。 proxy_set_header Host post.subdomain.me;

+0

いいえ、そうではありません。ご回答ありがとうございます。 –

+0

'$ http_host'を' $ host'またはハードコードドメインに置き換えるように編集しました – Vasfed

+0

まだ動作しません。私は両方を試しました。 –

2

proxy_set_headerproxy_redirectディレクティブが設定:

おそらくnginxのホストに$hostデフォルト

location @ruby { 
    proxy_set_header Host $host; 
    proxy_pass http://sub; 
} 

そして「hardcode'-方法を試してみてください、ヘッダーがクライアントによって渡されていないホストproxy_passディレクティブと同じ場所ブロック内にあるか、または同封のserverブロックから継承する必要があります。あなたはこのようなあなたの設定ファイルをフォーマットする必要があります。

location/{ 
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby; 
} 

location @ruby { 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 
    proxy_pass http://sub; 
} 

EDIT:@Vasfedが提案されているようnginxproxy_set_header Hostための他の値を試し、正しくRoRのに情報を渡していないと仮定すると。わずかに異なる意味を持つ3つの候補があります。

proxy_set_header Host post.subdomain.me; 
    proxy_set_header Host $server_name; 
    proxy_set_header Host $host; 
+0

私はそれを試して、まだ動作しません。 –

+0

@ AliSepehri.Kh編集:Vasfedの提案を明示的に述べました。 –

+0

ええ、あなたは完全に正しいです。私の悪い。 –

関連する問題