Omniauth Nginx Unicorn回调错误的主机URL

jls*_*str 1 nginx unicorn omniauth ruby-on-rails-3.2

我已经将Rails应用程序部署到VPS服务器,并且我正在使用Nginx/Unicorn组合,一切正常,除了由于某种原因超出我的理解,Omniauth回调重定向错误,

即.

http://unicorn/users/auth/linkedin/callback?oauth_token=95218ed3-b426-45ab-b022-693d2a2447cb&oauth_verifier=25955
Run Code Online (Sandbox Code Playgroud)

它应该是:

http://my-real-domain.com/users/auth/linkedin/callback?oauth_token=95218ed3-b426-45ab-b022-693d2a2447cb&oauth_verifier=25955
Run Code Online (Sandbox Code Playgroud)

怎么了?为什么回调使用nginx中定义的上游名称?

upstream unicorn {
  server unix:/tmp/unicorn.todo.sock fail_timeout=0;
}

server {
  listen 80;
  listen [::]:80 ipv6only=on default_server;

  root /home/deploy/work/project/current/public;
  index index.html index.htm;

  server_name my-real-domain.com;

  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;

  location ~ ^/assets/ {
    expires 1y;
    add_header Cache-Control public;

    add_header ETag "";
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

请你帮助我好吗?我需要知道如何克服这种错误的重定向.

提前致谢!

Dan*_*ack 8

默认情况下,Nginx不会传递主机头,您必须告诉它:

 location @unicorn {
    proxy_set_header Host $http_host; 
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://unicorn;
  }
Run Code Online (Sandbox Code Playgroud)

否则请求发送到的主机丢失.