You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

docker compose搭建nginx+php-fpm环境访问https报403无权限错误

问题原因及对应解决方案

1. SSL证书/密钥文件权限异常(最常见原因)

HTTP访问走80端口无需读取SSL证书,因此不受影响;HTTPS访问时Nginx需要读取证书和密钥文件,如果你在WSL生成的证书文件挂载到容器后,权限设置过高(仅root可读、所有者不是Nginx运行用户),就会触发权限拒绝错误。

解决步骤:

  • 首先在WSL环境中修改证书文件权限:
# 证书文件设置为所有用户可读
chmod 644 ./nginx/certs/server.crt
# 密钥文件设置为所有者可读写
chmod 600 ./nginx/certs/server.key
  • 开发环境下也可以直接在docker-compose的nginx服务配置中添加user: root参数,指定Nginx用root用户运行,避免权限适配问题:
services:
  nginx:
    image: nginx:alpine
    user: root # 新增这一行,仅开发环境使用
    # 其余原有配置保持不变
  • 修改后重启容器生效:docker compose down && docker compose up -d

2. 项目目录文件权限不足

如果站点根目录下的index.php或者其他静态文件,挂载到容器后Nginx没有读取权限,也会返回403错误。

解决步骤:

在WSL中给项目目录开放全局可读权限(仅开发环境适用):

chmod -R 755 ./../app

3. 单Server块同时监听80/443的兼容问题

部分旧版本Nginx对同一个Server块同时监听HTTP和HTTPS的配置兼容不好,可能导致HTTPS请求的路径解析异常。

解决步骤:

将HTTP和HTTPS配置拆分到两个独立的Server块,HTTP直接重定向到HTTPS:

# HTTP服务:重定向到HTTPS
server {
    listen 80;
    server_name test.lan;
    return 301 https://$host$request_uri;
}

# HTTPS服务:实际业务配置
server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/certs/server.crt;
    ssl_certificate_key /etc/nginx/certs/server.key;

    root /var/www/test.lan;
    index index.html index.php;
    server_name test.lan;

    location / {
        try_files $uri $uri/ @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /index.php/$1 last;
    }

    location ~\.php {
        try_files $uri /index.php;
        fastcgi_pass php-fpm:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

修改配置后重启Nginx容器即可。


内容的提问来源于stack exchange,提问作者tuga74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:33:00