为什么我无法通过nginx代理传递访问子域?

时间:2015-12-10 20:13:42

标签: ruby-on-rails ubuntu nginx unicorn

我想通过user id和RoR网络服务器(例如NginxUnicornThin)在我的本地计算机上部署我的Ruby on Rails应用程序。

如下所示,我想通过WEBrick子域名访问我的网络应用:

post

一切正常,当我输入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; } } 时,我可以看到我的RoR应用程序。

问题:当我使用post.subdomain.me网址时,我无法访问我的子域名(post.subdomain.me返回空,request.subdomain返回{{1} } {instation of request.host)。但是当我使用subdomain时,每件事情都完美无缺(我失去了一半的头发才意识到这一点)。为什么以及如何解决它?

2 个答案:

答案 0 :(得分:3)

当您使用端口访问应用程序时 - 您正在直接访问rails服务器,而不是由nginx代理,这适用于调试,但通常不适合生产。

客户端可能没有传递主机头,sheet.getRange(i, 4).setValue(workersCompRec); 默认为nginx主机

尝试

$host

和'硬编码'方式:location @ruby { proxy_set_header Host $host; proxy_pass http://sub; }

答案 1 :(得分:2)

((P mod 2) <> 0)proxy_set_header指令配置proxy_redirect指令,并且需要位于相同的位置块内或从封闭的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; } 没有正确地将信息传递给RoR,正如@Vasfed建议的那样,请尝试nginx的其他值。还有其他三个候选人,所有人都有不同的含义。

proxy_set_header Host