404,同时试图使dockerized nginx服务静态文件安装在一个卷

我正努力在Docker容器中设置nginx。 我基本上有两个容器:

  • 一个php:7-apache容器,提供一个dynamic的网站,包括它的静态内容。

  • 一个nginx容器,里面有一个卷作为/ home / www-data / static-content文件夹(我在docker-compose.yml中做这个),尝试提供一个静态的网站(与服务的网站无关apache容器)。

我想使用域dynamic.localhost来服务我的dynamic网站,而static.localhost服务我的静态网站只能由静态文件组成。

我有我的nginx容器下面的Dockerfile:

########## BASE ######### FROM nginx:stable ########## CONFIGURATION ########## ARG DEBIAN_FRONTEND=noninteractive ENV user www-data COPY ./nginx.conf /etc/nginx/nginx.conf COPY ./site.conf /etc/nginx/conf.d/default.conf RUN touch /var/run/nginx.pid && \ chown -R ${user}:${user} /var/run/nginx.pid && \ chown -R www-data:www-data /var/cache/nginx RUN chown -R ${user} /home/${user}/ && \ chgrp -R ${user} /home/${user}/ USER ${user} 

正如你所看到的,我使用nginx的两个configuration文件:nginx.conf和site.conf。 这里是nginx.conf(这不重要,因为没有什么特别的,但如果我做错了,只是让我知道):

 worker_processes auto; error_log /var/log/nginx/error.log debug; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; } 

这里是文件site.conf,我几天来一直写得很糟糕:

 server { listen 8080; server_name static.localhost; root /home/www-data/static-content; location / { try_files $uri =404; } } server { listen 8080; server_name dynamic.localhost; location / { proxy_pass http://dynamic; proxy_redirect off; proxy_set_header Host $host:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Port 8080; proxy_set_header X-Forwarded-Host $host:8080; } } 

( http://dynamic将请求传递给我名为“dynamic”的apache容器)。

所以基本上我总是得到404,我试图访问我的静态内容目录中的任何文件。 例如:

  • static.localhost:8080 / index.html应服务于/home/www-data/static-content/index.html但我得到404代替。
  • static.localhost:8080 / css / style.css应该服务/home/www-data/static-content/css/style.css,但我也得到404。

我尝试了各种各样的东西,比如编写try_files / home / www-data / static-content / $ uri ,但是我没有得到任何结果。 我读了nginx文档的一些部分,并search堆栈溢出,但没有发现我帮助。 如果我犯了一个愚蠢的错误,我很抱歉,但是现在我唯一关心的事情就是让这个工作起来,明白我做错了什么。

谢谢

我解决了我的问题,只是不使用静态文件的卷,而是在容器中复制它们。 我怀疑这是由docker-compose挂载卷的方式以及以非root用户身份运行的nginx进程的权限问题。 这不是一个完美的解决scheme,因为我不得不放弃使用音量,但它会做的。