我配置了grunt-connect-proxy(实际上是基于http-node-proxy)将localhost:3000
上的请求代理到托管myserver.com
的后端。
后端应用程序在Nginx(+ nginx乘客模块)+乘客上运行。这里没有反向代理。
nginx配置如下:
server {
listen 80 default_server;
root /home/deployer/app/current/public;
passenger_enabled on;
access_log /var/log/nginx/app.access.log;
if (-f $document_root/system/maintenance.html){
rewrite ^(.*)$ /system/maintenance.html;
break;
}
location ~* ^/assets/ {
try_files $uri 404;
}
location ~* ^.+.(css|js|jpeg|jpg|gif|png|ico)$ {
expires 30d;
}
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
它实际上就像这里描述的那样: https://www.digitalocean.com/community/articles/how-to-install-rails-and-nginx-with-passenger-on-ubuntu
第一个请求没问题:当我输入localhost:3000
时,我实际上是在myserver.com上。
HTTP代码= 200。
当我尝试访问受保护的页面(使用Devise)时,让我们说http://localhost:3000/admin/articles
,我得到一个HTTP代码= 302,但我被重定向到myserver.com
。
这意味着:我可以登录myserver.com
但不能登录localhost:3000
。
如何告诉Rails或Devise考虑代理地址?
答案 0 :(得分:0)
您没有提供任何配置数据,但我认为您的问题是您没有设置proxy_redirect
在包含proxy_pass
proxy_redirect default;
答案 1 :(得分:0)
线索在这里:https://github.com/rack/rack/blob/master/lib/rack/request.rb#L88
我必须发送HTTP_X_FORWARDED_HOST
标头,其值为localhost:3000
。
然后,它是grunt代理,你会有类似的东西:
{
context: ['/'],
host: 'myserver.com',
port: 80,
https: false,
changeOrigin: true,
xforward: true,
headers: {
'x-forwarded-host': 'localhost:3000'
}
}