![Docker Nginx 将所有静态内容(无 index.php)作为 403 Forbidden 提供](https://linux22.com/image/785686/Docker%20Nginx%20%E5%B0%86%E6%89%80%E6%9C%89%E9%9D%99%E6%80%81%E5%86%85%E5%AE%B9%EF%BC%88%E6%97%A0%20index.php%EF%BC%89%E4%BD%9C%E4%B8%BA%20403%20Forbidden%20%E6%8F%90%E4%BE%9B.png)
我正在尝试将我的个人开发设置从本地 php/nginx 设置转换为 docker 设置。几乎所有东西都运行良好,我现在遇到的唯一问题是所有静态内容(*.css/*.js/*.jpg etc
)都响应 403 禁止。我整天都在浏览和尝试互联网解决方案,但似乎都不起作用。大多数发现的问题都有答案,即容器用户应设置为另一个用户(在我的情况下为 uid 1000)。这样做会导致 nginx 容器启动时出现权限被拒绝 13 错误。
希望这里有人有解决方案,以便我可以完成我的新本地设置。
主持人:Linux 操作系统 (popOS)
使用的容器:
- NGINX-nginx:最新
- PHP-php:8.2-fpm
对于这两个容器,我创建了一个dockerfile。
访问 localhost 页面时,除本地静态文件外,其他所有内容均可正常工作。因此 localhost:3030 会加载 index.php 文件等。仅当尝试访问例如 localhost:3030/dist/images/test.png 时,我才会收到禁止错误。
现在我认为这意味着 nginx 无法访问这些文件。我只是不知道如何授予此访问权限。因为这是一个本地开发环境,所以我不会复制容器中的所有文件,而只会使用 docker-compose.yml 中与项目文件夹的卷绑定以及 php 容器中的相同卷绑定。
我希望我忽略了一些愚蠢的事情,因为感觉这应该是有效的。
项目文件示例:
/public/
/public/index.php
/public/dist/
/public/dist/images/test.png
Docker 文件:
以下是此时docker文件的设置。
docker-compose.yml:
version: '3.7'
services:
ngnx:
build: ./nginx/
container_name: nginx-container
restart: unless-stopped
links:
- php
volumes:
- ./www/html/:/var/www/html/
- ./www/logs/:/var/log/nginx/
php:
build: ./php/
container_name: php-container
restart: unless-stopped
expose:
- 9000
volumes:
- ./www/html/:/var/www/html/
./nginx/Dockerfile
FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/default.conf
./php/Dockerfile
FROM php:8.2-fpm
RUN apt-get update -y && apt-get upgrade -y
./nginx/default.conf
非常基本的 nginx 文件,因为在开始调整之前我首先想要一个完全正常工作的环境。
server {
listen 80 default_server;
root /var/www/html/public;
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
access_log /var/log/nginx/error.log;
error_log /var/log/nginx/error.log error;
sendfile off;
client_max_body_size 100m;
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass php-container:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
}