我正在尝试在单个 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;
}