Synology NAS,Nginx,php-fpm,文件未找到

Synology NAS,Nginx,php-fpm,文件未找到

你好,新年快乐!

我还收到非常常见但烦人的错误:“找不到文件”。

现在,我试图尽可能精确,希望有人知道问题所在。我正在尝试做的简短列表:

  • Synology NAS 与容器管理器
  • 在 /volume1/web 上创建文件夹
  • 使用 docker-compose.yml 文件创建项目

这是我的结构:

my_project/
    - .docker/
        - nginx/
            - conf.d/
                - default.conf
            - Dockerfile
        - php/
            - Dockerfile
    - logs/
        - nginx/
            - access.log
            - error.log
        - php/
            - php.log
    - src/
        - public/
            - index.html
            - index.php
    - .env
    - docker-compose.yml

这是我的代码:

docker-compose.yml

version: '3.9'

services:
  nginx:
    container_name: nginx
    build:
      context: ./.docker/nginx
      dockerfile: Dockerfile
    ports:
      - '8080:80'
      - '8443:443'
    volumes:
      - ./src:/var/www/html
      - ./.docker/nginx/conf.d:/etc/nginx/conf.d
      - ./logs/nginx:/var/log/nginx
    depends_on:
      - php
    networks:
      - internal

  php:
    container_name: php
    build:
      context: ./.docker/php
      dockerfile: Dockerfile
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
      - ./logs/php/php.log:/var/log/fpm-php.www.log
    networks:
      - internal

networks:
  internal:
    driver: bridge

默认配置文件

server {
    listen 80;
    listen [::]:80;

    root /var/www/html/public;
    
    index index.html index.htm index.php;
    
    charset utf-8;
    
    location \ {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ [^/]\.php(/|$) {
        try_files                         $uri =404;
        fastcgi_pass                      php:9000;
        fastcgi_index                     index.php;
        fastcgi_param   PATH_INFO         $fastcgi_path_info;
        fastcgi_param   SCRIPT_FILENAME   $realpath_root$fastcgi_script_name;
        include                           fastcgi_params;
    }
}

php/Dockerfile

FROM php:8.3.1-fpm-alpine

nginx/Dockerfile

FROM nginx:1.25.3-alpine

在我的本地 docker 上,它运行完美,没有问题。但是当我尝试在 Synology NAS 上创建项目并想要打开 input.php 时,我收到“文件未找到”的提示,而 html 文件可以正常工作。

到目前为止,我已经尝试了很多解决方案,包括来自这里、stackoverflow 和其他网站、教程等等。这是一个非常常见的问题,我想我找不到一个非常简单的解决方案...

编辑:

我使用了绝对路径而不是相对路径。仍然出现相同的错误。再次更改了文件夹和文件的 chmod。仍然出现相同的错误。

以下是日志:nginx/access.log

172.21.0.1 - - [04/Jan/2024:19:03:00 +0000] "GET / HTTP/1.1" 404 27 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "-"

nginx/error.log->空

在 nginx 容器的卷中添加了一个 error.log: - ./errors:/var/www/errors 有时(并非总是)会发生此错误:

2024/01/04 19:13:48 [info] 31#31: *5 client timed out (110: Operation timed out) while waiting for request, client: 172.21.0.1, server: 0.0.0.0:80

这是我通过“docker ps”得到的:

CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                                                            NAMES
986db5183632   paso4-nginx   "/docker-entrypoint.…"   22 minutes ago   Up 17 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp   nginx
cec07fa44c31   paso4-php     "docker-php-entrypoi…"   22 minutes ago   Up 22 minutes   9000/tcp                                                                         php

使用 docker container top nginx 获取

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                9420                9398                0                   20:27               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 9509                9420                0                   20:27               ?                   00:00:00            nginx: worker process
101                 9510                9420                0                   20:27               ?                   00:00:00            nginx: worker process
101                 9511                9420                0                   20:27               ?                   00:00:00            nginx: worker process
101                 9512                9420                0                   20:27               ?                   00:00:00            nginx: worker process

使用 docker container top php 获取:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                5658                5636                0                   20:01               ?                   00:00:00            php-fpm: master process (/usr/local/etc/php-fpm.conf)
82                  5738                5658                0                   20:01               ?                   00:00:00            php-fpm: pool www
82                  5739                5658                0                   20:01               ?                   00:00:00            php-fpm: pool www

答案1

尽管我有点尴尬,但我还是想分享解决方案。:-)

  1. /src 文件夹的用户权限错误。/public 文件夹有 0755,这是正确的,但 /src 没有。
  2. 当我使用终端(在 Mac 和 Windows 上)修改文件夹(/src 和 /public)的权限时,我 - 这也是让我尴尬的主要原因 - 没有正确连接到 nas。只能作为 nas 的 root 用户,而不是 docker 的 root 用户。

尽管如此还是非常感谢!!!

相关内容