我对 Nginx 还很陌生。我想要实现的是使用它的 Docker 镜像来服务我的网页(及其所有媒体)。
我的项目结构:
.
├── nginx
│ ├── conf.d
│ └── nginx.conf
└── www
├── documents
├── favicon.ico
├── images
├── index.css
├── index.html
├── index.js
└── resources
请注意,
conf.d
和nginx.conf
与默认配置相同。
我使用以下 Docker 命令来启动容器:
sudo docker run --name nginx \
-p 80:80 \
-v ./www:/usr/share/nginx/html \
-v ./nginx/conf.d:/etc/nginx/conf.d \
-d nginx
导航到浏览器后
localhost
,我收到了具有其样式和功能的网页,但图像和字体丢失了。浏览器的控制台给了我GET 403
错误,Docker日志是:
*1 open() "/usr/share/nginx/html/images/close.svg" failed (13: Permission denied),
client: 172.17.0.1, server: localhost, request:
"GET /images/close.svg HTTP/1.1", host: "localhost", referrer: "http://localhost/"
...
我已经检查过文件和目录的权限,都是
-rw-rw-r--
。
我认为问题可能是我在 index.html
内使用相对路径来加载资源,因此我将以下内容附加到 ./nginx/conf.d/default.conf
: 的配置文件中
location /resources/ {
root /usr/share/nginx/html;
}
location /documents/ {
root /usr/share/nginx/html;
}
location /images/ {
root /usr/share/nginx/html;
}
配置的改变并没有带来解决方案。当我像
/usr/share/nginx/html/images
那样重写词根时也不会。我将不胜感激任何想法。
终于找到问题了。
根据文档,每个公共目录应该有755(
rwxr-xr-x
)权限,而公共文件有644(rw-r--r--
)权限。我更改了权限,现在可以使用了。