我在apt-get install nginx
ubuntu 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
指令,因此无法提供此服务。