无法为多个域配置 nginx

无法为多个域配置 nginx

我正在尝试在单个 VPS 上托管多个域(带有简单的静态页面),运行 Ubuntu 12.04 LTS、nginx。所有域的基本 nginx 配置与此类似(全部在 sites-available 目录中分开):

server { 
 listen 80; 
 server_name www.example.com; 
 return 301 $scheme://example.com$request_uri; 
}

server { 
 listen 80; 
 server_name example.com;

 root /home/username/example.com; 
 index index.html; 
}

它适用于第一个域,对于第二个域,只有当我删除第一个服务器块时它才有效,对于第三个域,它根本不起作用。nginx 启动失败。我不知道我做错了什么。

答案1

问题在于域名太长。当我检查 nginx 错误日志时,我发现了以下错误消息:

could not build the server_names_hash, 
you should increase server_names_hash_bucket_size: 64

因此,我取消了/etc/nginx/nginx.conf文件中以下行的注释。

http {
 ....
 #server_names_hash_bucket_size 64;
 ....
}

现在,一切都按预期进行:)

答案2

如果您想在本地主机上测试子域名,则可能必须将其名称添加到本地主机文件中。通常在 /etc/hosts 中本地化

这些子域名必须以某种方式解析,尝试添加 sub.localhost 127.0.0.1,如果你要访问网络,请添加包含服务器 IP 的 A 记录,然后使用以下方法检查 DNS:

访问 www.myexample.com

如果它正常工作,它应该返回一个 IP,并对每个子域执行相同的操作。

让我知道这个是否奏效

答案3

将“返回 301”更改为“重写……”

server { 
 listen 80; 
 server_name www.example.com; 
 rewrite ^(.*)$ $scheme://example.com$request_uri; 
}

相关内容