使用namecheap在nginx上配置子域

use*_*416 6 subdomain dns configuration nginx

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

我想设置以下配置

  • (www).example.com指向:var/www/blog
  • (www).static.example.com:指向var/www/static

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

这是我在Namecheap上的配置:

  • @ 111.111.111.111记录类型: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;
}
Run Code Online (Sandbox Code Playgroud)

然而,这导致以下情况:

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

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

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

cns*_*nst 3

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

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

您看不到404发件人random.example.com,因为第一个服务器server成为您的默认服务器。为了避免这种情况,您可能需要一个带有参数的指令server的额外上下文,您可以在其中无条件地处理所有请求。listendefault_serverreturn 404;

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