如何使用通配符 DNS 设置 nginx 服务器

如何使用通配符 DNS 设置 nginx 服务器

这是关于使用子域名的 Rails 应用程序示例。您可以在此处访问它:http://rodrigora.com.br。在此应用中,您可以创建站点并为其指定一个子域。

例子:

地点:Google

子域名:gog

该网站应由http://gog.rodrigora.com.br

但是,该应用程序对于任何子域都无法访问,无论是www


DNS 服务器配置:

DNS

nginx 服务器配置:

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

server {
  listen 80 default;
  #server_name localhost;
  client_max_body_size 4G;
  keepalive_timeout 10;
  root /home/ubuntu/apps/blog/current/public;
  try_files $uri/index.html $uri.html $uri @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  # Rails error pages
  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root /home/ubuntu/apps/blog/current/public;
  }

  location ~ ^/(assets)/  {
    root /home/ubuntu/apps/blog/current/public;
    gzip_static on; # to serve pre-gzipped version
    expires max;
    add_header Cache-Control public;
  }
}

额外的信息:如果我www.rodrigora.com.br在浏览器上访问,Google Chrome 会显示未找到的页面,但nginx会记录以下行:

186.210.71.46 - - [21/Sep/2013:22:08:37 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.65 Safari/537.36"

问题:

  • 那么,nginx 说子www域名不存在?

  • 如何配置此应用程序以响应任何子域?


资源:

Railscast 子域名

DNS 传播

通配符 DNS 检查

答案1

输入服务器名称,这样*.rodrigora.com.brnginx 服务器就可以接受任何带有该域名的请求。

答案2

你有没有尝试过listen 80 default_server;

这可能更符合您的需要。我相信服务器名称_;是一个万能名称。

server {
    listen 80 default_server;
    server_name _;
    rewrite ^(.*)$ http://www.domain.tld$1 permanent;
}

相关内容