403从Docker中的Nginx容器禁止

我正在尝试使用我的nginx服务器呈现静态文件。 我的静态文件index.html和login.html分别位于public / templates / index.html和public / templates / login.html。 问题是我每次都得到一个403禁止的错误,我运行我的本地主机服务器。 如果将静态文件(index.html和login.html)从templates目录移动到public目录,则完美呈现。 我使用docker来pipe理nginx和localhost服务器。

DockerFile

FROM php:7 RUN pecl install ev-beta && \ docker-php-ext-enable ev WORKDIR /opt/app CMD ["/usr/local/bin/php", "server.php"] 

Nginx服务器configuration文件(nginx.conf)

 #user nobody; worker_processes 1; error_log /usr/local/var/log/nginx/nginx_error.log warn; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } map $http_upgrade $connection_upgrade{ default upgrade; '' close; } server { location / { root /usr/share/nginx/html; #root /var/www; try_files $uri $uri/index.html @phpsite; } location @phpsite { proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_pass http://app:8080; } } 

Server.php

 require_once 'vendor/autoload.php'; require_once 'src/SlimAdapterServer.php'; require_once 'src/SessionProvider.php'; use Slim\App; use Slim\Http\Request; use Slim\Http\Response; $provider = new \Authentication\SessionProvider(); $slim = new \Slim\App(); //HomePage Route; $slim->get('/', function(Request $req, Response $res) use ($provider): Response{ $sessionId = $req->getCookieParams()['session'] ?? ''; if(!$provider->hasSession($sessionId)){ return $res->withRedirect('/login'); } $res->getBody()->write(file_get_contents('templates/index.html')); return $res->withHeader('Content-Type', 'text/html;charset=utf8'); }); //Login Route $slim->get('/login', function(Request $req, Response $res): Response { $res->getBody()->write(file_get_contents('templates/login.html')); return $res->withHeader('Content-Type', 'text/html;charset=utf8'); }); $adapter = new \Http\SlimAdapterServer($slim); $app = new \Ratchet\App('localhost', 8080, '0.0.0.0'); $app->route('/', $adapter, ['*']); $app->route('/login', $adapter, ['*']); $app->route('/authenticate', $adapter, ['*']); $app->run(); 

我想我的php脚本检测用户是否login,如果是redirect到index.html页面,否则redirect到login.html页面。

来自Docker Web服务器容器的错误日志

 172.17.0.1 - - [11/Dec/2017:20:44:02 +0000] "GET / HTTP/1.1" 403 169 "-" "curl/7.54.0" "-" 2017/12/11 20:44:02 [error] 6#6: *8 directory index of "/usr/share/nginx/html/" is forbidden, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost"