这是我的配置文件
server {
listen 80;
server_name localhost;
root /var/www/example/public/;
location / {
try_files $uri $uri/ $uri.html =404;
}
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我希望将 localhost/api 重定向到 nodejs 服务器,而其余部分由 nginx 处理。
但当我检查access.log
127.0.0.1 - - [21/May/2016:12:06:57 +0530] "GET /api/ HTTP/1.1" 404 9 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
这意味着 nginx 正在尝试查找 api.html,但我希望将其重定向到 locahost:3000
我在网上查了一下,很多 nginx 的配置文件都有仅有的充当节点的反向代理,或使用 .jpg、.png 等文件扩展名提供静态内容
Can we not enable ngix to act as reverse proxy and webserver, based on url ?
编辑1
如果我将 nodejs 服务器置于 / ,并将静态文件置于其他路径,那么它可以正常工作
例子
server {
listen 80;
server_name localhost;
root /var/www/example/;
location /public {
try_files $uri $uri/ $uri.html =404;
}
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我可以在 example.com/ 浏览 nodejs 服务器,在 example.com/public 浏览静态文件
但我不明白为什么这个简单的配置(在 / 中有静态文件且在 example.com/api 中有 api 服务器)会出现问题。*