Rails和Nginx www和非www混淆了

时间:2014-04-07 19:22:58

标签: ssl nginx

我已经浏览了很多相关的帖子,但我不明白我哪里出错了。

我希望所有httphttps以及mydomain.comwww.mydomain.com请求转到https://www.mydomain.com(类似于this人)

我已经检查了我的SSL证书,它说是www.mydomain.com。如果我去mydomain.com或www.mydomain.com,我已经检查了证书,它似乎提供相同的信息,两者似乎都是安全的(小绿锁)。

我在this帖子上尝试了解决方案,但收到了以下错误:

Restarting nginx: nginx: [emerg] invalid parameter "443" in /path/nginx/sites-enabled/example:3

我遇到的问题是用户在www.mydomain.com页面上登录,出于某种原因,他们被重定向到mydomain.com页面,然后他们会出现注销并需要再次登录。说实话,我不确定这是一个rails问题还是一个nginx配置问题。

我的nginx配置文件如下:

server {
    listen      80;
    server_name mydomain.com www.mydomain.com;
    return 301 https://www.mydomain.com$request_uri;
}

server {
    listen 443 ssl default;
    server_name www.mydomain.com;
    ...other stuff...
}

我真的很感激帮助。我很困惑。

1 个答案:

答案 0 :(得分:0)

我想我已经解决了这个问题,我认为我的问题部分是轨道问题,部分与nginx相关。

在轨道中我有

def default_url_options
  if Rails.env.production?
    {:host => "myapp.com"}

我改为

def default_url_options
  if Rails.env.production?
    {:host => "www.myapp.com"}

它有所帮助,但如果人们首先导航到myapp.com就不行了。

完全解决了将另一个重定向服务器添加到我的nginx配置文件中的问题:

server {
  listen      443 ssl;
  server_name myapp.com;
  return 301 https://www.myapp.com$request_uri;
}

我希望这有助于某人。