Docker Nginx 将所有静态内容(无 index.php)作为 403 Forbidden 提供

Docker Nginx 将所有静态内容(无 index.php)作为 403 Forbidden 提供

我正在尝试将我的个人开发设置从本地 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;
    }
}

相关内容