我想通过user id
和RoR网络服务器(例如Nginx
,Unicorn
或Thin
)在我的本地计算机上部署我的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
时,每件事情都完美无缺(我失去了一半的头发才意识到这一点)。为什么以及如何解决它?
答案 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