我们能否不让 ngix 根据 url 充当反向代理和 web 服务器?

我们能否不让 ngix 根据 url 充当反向代理和 web 服务器?

这是我的配置文件

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 服务器)会出现问题。*

相关内容