使用 nginx 重定向到“www”前缀域

使用 nginx 重定向到“www”前缀域

我在 godady 中引入了一个域名,并在 Linux/Unix(Ubuntu)服务器上安装了 Passenger + Nginx,并部署了一个 Ruby 应用程序。现在我的域名看起来像这样 http://example.com当我尝试从浏览器请求时。但我希望我的域名默认重定向到万维网每次从浏览器请求时(例如http://www.example.com)。

例子.conf

    server {
    listen 80;
    server_name www.example.com example.com;
    # return 301 $scheme://www.example.com$request_uri;
    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/example/public;

    # Turn on Passenger
    passenger_enabled on;
    passenger_spawn_method direct;
    passenger_min_instances 1;
    #passenger_pool_idle_time 0;
    rails_env development;
    passenger_ruby /usr/local/rvm/gems/ruby-2.3.3/wrappers/ruby;
    passenger_sticky_sessions on;


}

取消注释该行

返回 301 $scheme://www.example.com$request_uri;

抛出错误

www.example.com redirected you too many times.
Try clearing your cookies.
ERR_TOO_MANY_REDIRECTS

我不得不手动输入www.example.com在浏览器中。相反,我该如何重定向到万维网默认情况下?

非常感谢您的帮助。提前致谢!

答案1

你基本上需要两个server配置块:

  • 一个用于www; 仅重定向到基本域
  • 一个用于基础域

以下是一个帮助您入门的示例:

server {
    listen 80;
    server_name www.example.com;

    location / {
        # Redirection happens here
        return 301 http://example.com$request_uri;
    }
}


server {
    listen 80 default_server;
    server_name example.com;

    # Other conf directives go here
}

答案2

最简单的方法可能是使用 NGINXif语句。只需将以下内容放入虚拟主机配置中:

if ($host = "example.com") {
    return 301 $scheme://www.$host$request_uri;
}

并确保将“example.com”替换为您的域名。

虽然这是我发现的最简单的方法,但它并不是最好的方法。server建议的方法是针对非 www创建一个单独的块,并将return声明放在那里。

相关内容