404试图使dockerized nginx在卷中使用静态文件



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

  • a php:7-apache容器,它提供动态网站,包括其静态内容。

  • a nginx容器,内部的音量安装在/home/www-data/static-content 文件夹(我在docker-compose.yml)上,以尝试提供静态网站(与Apache容器提供的网站无关)。

我想使用域 dynamic.localhost 服务我的动态网站, static.localhost 仅服务于我的静态网站。P>

我有以下我的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}

正如您所看到的,我正在使用两个配置文件for nginx: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;
}

这是我一直在正确写作几天写的文件网站。

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/csss/css/style.css,但我也得到404。

我尝试了各种事情,例如编写 try_files/home/www-data/static-content/$ uri ,但我没有得到任何结果。我阅读了NGINX文档的某些部分,并在堆栈溢出上进行了搜索,但我发现没有任何帮助。如果我犯了一个愚蠢的错误,我深表歉意,但是我现在唯一关心的就是让这个工作,并了解我做错了什么。

谢谢

我通过只是不使用静态文件的卷来解决我的问题,而是将它们复制在容器中。我怀疑这是权限的问题,即通过docker-compose安装音量,而nginx进程则以非根管运行。这不是一个完美的解决方案,因为我必须放弃使用卷,但会做。

我也遇到了同样的问题,我必须将用户组的已安装卷文件更改权限。

在Dockerfile上 RUN useradd -G root,www-data -u 1000 ${user}

并更改了主机文件的权限 chmod 775 /home/www-data/static-content -R

最新更新