Nginx 忽略我的第二个服务器指令

Nginx 忽略我的第二个服务器指令

我在apt-get install nginxubuntu 14.04 上安装了 nginx。因此,默认设置包括来自目录的配置/etc/nginx/conf.d/

include /etc/nginx/conf.d/*.conf;

在我的 conf.d 文件夹中,我有以下两个文件(site1.conf 和 site2.conf)

server {
    listen 80;

    location /site1/ {
        proxy_pass http://127.0.0.1:3000/;
    }
}

server {
    listen 80;

    location /site2/ {
        proxy_pass http://127.0.0.1:3001/;
    }
}

当我访问 时http://x.x.x.x/site1/,我得到了来自端口 3000 上运行的服务器的响应,正如预期的那样。http://x.x.x.x/site2/然而,当我访问 时,我得到了 404。错误日志中显示

2014/07/29 09:37:51 [error] 23060#0: *9 "/usr/share/nginx/html/site2/index.html" is not found (2: No such file or directory), client: 5.57.55.92, server: , request: "GET /site2/ HTTP/1.1", host: "217.147.85.96"

这表明它使用默认配置,将 site2 视为查找 index.html 文件的文件夹。

为什么会这样?我找不到任何原因。我尝试为两种配置设置 server_name,但没有任何区别。

答案1

两个location指令都需要位于同一个 vhost 配置中。

不同的虚拟主机旨在允许同一台服务器为不同的主机名和/或协议提供服务。您实际上所做的就是创建两个虚拟主机,但没有办法区分这两个虚拟主机,例如使用指令server_name。由于无法区分它们,因此nginx只能使用第一个默认虚拟主机配置并尝试映射请求,但由于没有调用目录site2也没有location指令,因此无法提供此服务。

相关内容