404尝试使dockerized nginx提供安装在卷

时间:2017-12-04 15:16:03

标签: docker nginx static

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

  • 一个php:7-apache容器,为动态网站提供服务,包括静态内容。

  • 一个nginx容器,其中安装了一个卷作为 / home / www-data / static-content 文件夹(我在docker-compose.yml中执行此操作),尝试提供一个静态网站(与apache容器服务的网站无关)。

我想使用域 dynamic.localhost 来为我的动态网站提供服务,并使用 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使用两个配置文件: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将请求传递给我命名为#34; dynamic")的apache容器。

所以基本上我一直在为我在静态内容目录中尝试访问的文件获取404。 E.g:

  • 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文档的一些部分,并在Stack Overflow上搜索,但我找不到任何帮助。如果我犯了一个愚蠢的错误,我道歉,但我现在唯一关心的是让它发挥作用,并了解我做错了什么。

由于

2 个答案:

答案 0 :(得分:0)

我解决了我的问题,只是不使用静态文件的卷,而是将它们复制到容器中。我怀疑这是一个权限问题,通过docker-compose安装卷的方式和nginx进程作为非root运行。 它不是一个完美的解决方案,因为我不得不放弃使用音量,但它会这样做。

答案 1 :(得分:0)

我遇到了同样的问题,并且不得不更改用户组的已装入卷文件的权限。

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

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