nginx不能提供静态内容。出现403禁止错误

我有一个使用nginx作为反向代理的node.js项目。我正在尝试配置nginx提供静态内容。nginx和node.js都是docker容器。我已经尝试了以下解决方案:

  1. 如何从node.js服务器的反向代理的nginx服务器提供静态文件?
  2. 使用NGINX提供静态文件

不管我做什么,我总是得到以下错误:

/ usr / src / app / public /“的目录索引被禁止。

这是我的nginx配置:

server {
    listen 80;
    server_name ~ ^(.+)$;
    root /usr/src/app/public;
    location / {
        try_files $uri @nodejs;
    }
    location @nodejs {
        default_type text/css;
        proxy_set_header Accept-Encoding  "";
        proxy_set_header Host $host;
        set $key $http_host$request_uri;
        set_escape_uri $escaped_key $key;
        srcache_fetch GET /redis $key;
        srcache_store PUT /redis2 key=$escaped_key&exptime=120;
        add_header X-Cached $srcache_fetch_status;
        proxy_pass http://node;
    }
    location = /redis {
       ...
    }
    location = /redis2 {
       ...
    }
    include /etc/nginx/default.d/*.conf;
}

这是我的docker-compose:

services:
  web:
    ports:
      - "127.0.0.1:80:80"
    build:
      context: .
      dockerfile: docker/nginx/Dockerfile
    volumes:
      - ./docker/nginx/server.conf:/etc/nginx/conf.d/server.conf
      - ./docker/nginx/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
    links:
      - node:node
  node:
    ports:
      - "81:80"
    environment:
      DEVELOP: "true"
    build:
      context: .
      dockerfile: ./docker/node/Dockerfile

如上所述,我得到了“` / usr / src / app / public /“的目录索引被禁止”的错误。

更多信息:

可能是什么问题?请提供建议。

更新:

我已根据所建议的更新了nginx配置:

try_files $uri @nodejs;

起初,问题似乎得到了解决,我可以加载后端服务器。但是,为了验证现在静态内容是否从nginx容器提供,我已从nodejs容器中删除了public目录,现在我得到以下错误:

无法查找在“/usr/src/app/public”视图目录中的视图“index”

有谁知道可能是什么问题吗?

点赞
用户2746227
用户2746227

由于您的节点容器在 docker-compose 文件中设置为通过端口 81 进行公开,因此您的 proxy_pass 必须更新如下。

proxy_pass http://node:81;

请参考此文章逐步设置带有 nodejs 反向代理的 nginx https://medium.com/@francoisromain/setup-node-js-apache-nginx-reverse-proxy-with-docker-1f5a5cb3e71e

2019-12-19 10:43:02