我正努力在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:
我尝试过各种各样的事情,比如写 try_files / home / www-data / static-content / $ uri ,但我没有得到任何结果。我阅读了nginx文档的一些部分,并在Stack Overflow上搜索,但我找不到任何帮助。如果我犯了一个愚蠢的错误,我道歉,但我现在唯一关心的是让它发挥作用,并了解我做错了什么。
由于
答案 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