2017-10-13 74 views
0

我有一個從nginx到rails服務器的子域名的代理問題。在我的Rails應用程序中,我有像tenant1.localhost:3000tenant2.localhost:3000等鏈接,它工作正常。在生產中,我使用Nginx + Puma,如果我打開與子域的鏈接,nginx不會代理puma任何請求。如何使用Nginx + Rails服務器處理動態子域名?

nginx.conf

upstream puma_muninn { 
    server app:3000; 
} 

server { 

    listen 80; 

    client_max_body_size 4G; 
    keepalive_timeout 10; 

    error_page 500 502 504 /500.html; 
    error_page 503 @503; 

    server_name localhost puma_muninn; 
    server_name ~^(?<subdomain>.+)localhost$; 
    root /var/www/muninn/public; 
    try_files $uri/index.html $uri @puma_muninn; 

    location @puma_muninn { 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_redirect off; 

    proxy_pass http://$subdomain.puma_muninn; 
    # limit_req zone=one; 
    access_log /var/www/muninn/log/nginx.access.log; 
    error_log /var/www/muninn/log/nginx.error.log; 
    } 

    location ^~ /assets/ { 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    location = /50x.html { 
    root html; 
    } 

    location = /404.html { 
    root html; 
    } 

    location @503 { 
    error_page 405 = /system/maintenance.html; 
    if (-f $document_root/system/maintenance.html) { 
     rewrite ^(.*)$ /system/maintenance.html break; 
    } 
    rewrite ^(.*)$ /503.html break; 
    } 

    if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$){ 
    return 405; 
    } 

    if (-f $document_root/system/maintenance.html) { 
    return 503; 
    } 

    location ~ \.(php|html)$ { 
    return 405; 
    } 
} 

production.rb

config.action_dispatch.tld_length = 2

但正如我所說彪馬甚至沒有得到nginx的請求。

任何想法?

+0

還請添加nginx.error.log日誌以更好地跟蹤您的錯誤。 – user100693

+0

nginx.error.log爲空 –

回答

0

nginx.conf中的域必須是特定的而不是localhost。