使用namecheap在nginx上配置子域

时间:2014-06-01 00:50:05

标签: nginx configuration dns subdomain

我使用namecheap购买了一个域名,为了简单起见,我们称之为example.com。 我在基于Debian的VPS上运行nginx。

我想设置以下配置

  • (www).example.com指向:var / www / blog
  • (www).static.example.com:指向 无功/网络/静态

但是,我无法使用nginx来配置子域,或者我需要使用Namecheaps控制面板做什么?

这是我在Namecheap上的配置:

  • @ 111.111.111.111记录类型:A TTL:1800
  • www example.com记录类型:Cname / Alias TTL:1800

没有配置子域,我应该在这里配置子域名吗??

这是我的nginx配置:

server {
    root /var/www/blog;
    index index.html index.htm;
    server_name localhost example.com www.example.com;
    location / {
    index index.html index.htm;
   }
}

server {
    root /var/www/static;
    index index.html index.htm;
    server_name static.example.com www.static.example.com;
    location / {
    index index.html index.htm;
}

然而,这导致以下结果:

  • www.example.com指向正确的目的地

  • random.example.com指向www.example.com(我不希望发生这种情况,它应该返回404)

  • static.example.com给我一个错误400.如果我查看我的日志,它找不到文件/var/www/blog/static/index.html,而实际上我希望它指向到/var/www/static/index.html

1 个答案:

答案 0 :(得分:3)

您必须记住,设置DNS和配置nginx是完全不同的任务。

我喜欢设置DNS的方法是从CNAME和其他子域返回到原始域www,如果它们在逻辑上相同,并托管在同一台服务器上。 (但是,从技术上讲,这是不正确的,因为这意味着您指定所有域都有MX条记录,以及显示可用于邮件的TXT / SPF条记录但是没有人真正关心,所以,只要你没有将你的TLD本身作为CNAME,事情应该没问题。)

您没有看到404中的random.example.com,因为第一个server成为您的默认服务器。为了避免这种情况,您可能希望额外的server上下文与listen指令具有default_server参数,您可以无条件地return 404;查看所有请求。

您的最终server上下文可能无法正常工作的原因可能是由于缺少listen指令。通常有助于在所有服务器之间使用相同的listen指令。