2015-12-10 15 views
5

Ruby on Rails uygulamasını yerel bilgisayarımda Nginx ve RoR web sunucuları (Unicorn, Thin veya WEBrick gibi) dağıtmak istiyorum. Aşağıda gösterildiği gibiNginx proxy geçişi yoluyla neden alt alana erişemiyorum?

, ben post alt alan tarafından web-app erişimi istiyorum:

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; 
    } 
} 

Her şey iyi çalışıyor ve ben post.subdomain.me yazarken benim RoR app görebilirsiniz.

Sorun: post.subdomain.me url kullandığınızda benim alt alana gelen erişemez (request.subdomain döner boş ve request.host döner subdomainsubdomain.me ait testlerinin öngördüğü). Ben post.subdomain.me:3000 kullandığınızda Ancak her şey (Farkındayım benim kıl yarısını kaybetti) mükemmel çalışır. Neden ve Nasıl Çözebilirim?

+0

? Unicorn, Thin ve Webrick'den bahsetmiştin ama hangisini denediğini söylemedin. –

+0

@TomL: Hepsiyle aynı problemim var. –

+0

senin 'proxy_xxx' yönergelerinin tamamı yanlış' location' blokta bulunmaktadır. Onları '@ yon' bloğunda 'proxy_pass' direktifiyle tutmalısınız, aksi takdirde yok sayılır. –

cevap

3

Eğer portu ile uygulamaya erişmek zaman - değil nginx tarafından proxy, doğrudan raylar sunucu erişen, bu ayıklama için iyi, ama genellikle üretim için iyi değildir. proxy_set_header Host post.subdomain.me;

+0

Hayır, değil. cevap için teşekkürler. –

+0

'$ http_host' yerine' $ host' veya hardcode domain ile değiştirmek için düzenlenmiştir – Vasfed

+0

Henüz çalışmıyor, ikisini de denedim. –

2

proxy_set_header ve proxy_redirect direktifleri yapılandırın:

Muhtemelen

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

Ve 'hardcode'-yol deneyin başlığı, istemci tarafından nginx ana bilgisayara $host varsayılan geçti değildir barındırmak proxy_pass yönergesi ve gerek aynı yerde blok içinde olabilir ya da çevreleyen server blok miras için. Böyle yapılandırma dosyasını biçimlendirmek gerekir:

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: nginx doğru RoR bilgi geçiyor @Vasfed önerildiği gibi, proxy_set_header Host için başka değerler deneyin olmadığını varsayarsak. Her biri biraz farklı anlamlar taşıyan üç aday daha var. HTTP sunucusu için kullandığınız Ne

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

Denedim, henüz çalışmıyor. –

+0

@ AliSepehri.Kh DÜZENLEME: Vasfed'in önerisini açıkça belirtin. –

+0

Evet, tamamen haklısınız. Benim hatam. –