在nginx服务器中创建子域

时间:2015-03-31 07:09:28

标签: ruby-on-rails nginx amazon-ec2 server

我正在尝试重定向/重写url以创建子页面的子域。例如:http://example.com/user会将网址返回http://user.example.com,但无法找到任何方式。 我的应用程序位于 ruby​​ on rails nginx 服务器上。这有什么诀窍吗?

3 个答案:

答案 0 :(得分:2)

以下内容应该处理子域重定向。

server {
    server_name example.com;

    location ~ ^/(?<user>[^/]+)/?$ {
        return 301 $scheme://$user.$server_name;
    }
}

答案 1 :(得分:1)

您可能最好关注Nginx上的wildcard subdomain,并为用户提供Rails路由。

请记住,Nginx没有连接到您的数据库。因此,Nginx conf实际上只需要能够通过服务器将网络流量发送到您的rails应用。

如果用户存在,则可以使用Rails应用程序路由将流量发送到特定用户页面。您可以使用constraint

执行此操作

-

这就是我要做的事情:

/etc/nginx/nginx.conf (or wherever your nginx config is stored)
server {
    server_name yourdomain.com *.yourdomain.com;
    ...
}

这将使您能够将任何子域请求传递到您的rails应用程序。

然后我会在Rails routes

中执行此操作
config/routes.rb
#put this at the top of the file so it does not conflict
get '', to: 'users#index', constraints: lambda { |request| User.exists?(name: request.subdomain) }

答案 2 :(得分:0)

您可以在Rails应用中执行此操作。只需在路线文件中添加规则:

get '/', to: 'users#show', constraints: { subdomain: /\d+/ }

然后,无论您访问*.example.com,它都会重定向到users#show

查看本教程以获取更多信息 Rails Routing Guide,第3.8部分。

否则,您可以在nginx配置中配置重写。我不确定它是否有效,请查看this guide

server {
  listen       80;
  server_name  user.example.com;
  return 301 example.com/user
}

希望它有用。

<强>更新

你只需要重写你的nginx配置。

server {
  listen       80;
  server_name  example.com;
  rewrite \/home$ $scheme://home.example.com;
}

然后保存配置,使用重新加载nginx sudo service nginx reload重新加载配置文件。

如果您仍然担心,请告诉我。