Docker部署Nginx+PHP-FPM环境下静态资源返回403 Forbidden问题求助
Docker部署Nginx+PHP-FPM环境下静态资源返回403 Forbidden问题求助
大家好,我正在把本地的PHP/Nginx开发环境迁移到Docker上,大部分功能都跑通了,唯独所有静态资源(.css、.js、*.jpg这类)访问时都会返回403 Forbidden。我一整天都在翻各种解决方案试,但都没解决问题。
网上这类问题的常见方案是把容器用户改成特定UID(我的情况是1000),但这么做之后Nginx容器启动直接报Permission denied 13错误,根本跑不起来。
我的环境信息:
- 主机系统:PopOS(Linux)
- 使用的容器:
- Nginx:
nginx:latest - PHP:
php:8.2-fpm
- Nginx:
- 两个容器都自定义了Dockerfile,通过
docker-compose.yml管理
目前的情况是:访问localhost:3030能正常加载index.php等动态内容,但访问比如localhost:3030/dist/images/test.png这类静态资源就会触发403。我猜测是Nginx没有这些文件的访问权限,但实在搞不懂该怎么授权——因为是本地开发环境,我没有把文件复制进容器,只是通过卷绑定把本地项目目录挂载到了两个容器里,PHP容器的挂载和Nginx是一样的。感觉应该是漏了个很基础的配置,不然不该卡这么久。
项目文件结构示例:
/public/ /public/index.php /public/dist/ /public/dist/images/test.png
我的配置文件:
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
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; } }
有没有大佬能帮我看看哪里出问题了?实在想早点搞定这个新的本地开发环境😭
备注:内容来源于stack exchange,提问作者WiZu




