【问题标题】:PHP file not found that should be found according to configured vHost未找到应根据配置的vHost找到的PHP文件
【发布时间】:2020-03-22 19:43:12
【问题描述】:

我正在尝试使用 Docker 设置 Symfony 3.x 应用程序。 我通过一个 docker-compose.yml 文件配置了 3 个 docker 容器:

  • Nginx
  • php-fpm
  • MySQL

当我导航到 my-project.dev:8080/ 时,我看到一个简单的 404-Not found-page。

  • 我无法加载 my-project.dev:8080/app_dev.php 或 my-project.dev:8080/config.php(我收到“找不到文件”错误)

我也没有在 /var/log/nginx/access.log 中看到任何条目。

docker-compose.yml:

web:
  image: nginx:latest
  ports:
    - "8080:80"
  volumes:
    - .:/var/www
    - ./docker/vhost.conf:/etc/nginx/sites-enabled/vhost.conf
    - ./docker/nginx.conf:/etc/nginx/nginx.conf
  links:
    - php

php:
  image: php:5.6-fpm
  volumes:
    - .:/var/www
  links:
    - db

db:
  image: mysql:latest
  volumes:
    - /var/lib/mysql
  environment:
    - MYSQL_ROOT_PASSWORD=my-password

nginx.conf 文件:

user  www-data;
worker_processes  4;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

vhost.conf 文件:

server {
    listen *:80;

    server_name my-project.dev;
    root /var/www/web;

    location / {
       # try to serve file directly, fallback to app.php
       try_files $uri /app.php$is_args$args;
    }

    # DEV
    # This rule should only be placed on your development environment
    # In production, don't include this and don't deploy app_dev.php or config.php
    location ~ ^/(app_dev|config)\.php(/|$) {
       fastcgi_pass php:9000;
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       include fastcgi_params;

       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    location ~ \.php$ {
       return 404;
    }

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
}

【问题讨论】:

  • 我对 Docker 一无所知...但是您的虚拟主机是否也不需要被告知在端口 8080 上侦听?你有什么在8080上听吗? grep "8080" /etc/nginx/sites-available/* 会返回什么吗?
  • 嗨达伦,感谢您的回复。我找到了导致问题的原因:我忘记为 php-fpm 图像添加“音量”配置属性 + 我必须将 /var/www/html 中的“WORKDIR”覆盖到 /var/www php-fpm 图片。

标签: php nginx docker symfony fpm


【解决方案1】:

我必须通过创建这样的图像来覆盖 php-fpm 图像的 WORKDIR:

Dockerfile:

FROM php:5.6-fpm
MAINTAINER Firstname Lastname <firstname.lastname@domain.com>
WORKDIR /var/www

构建映像:

docker build -t companyx/php-5.6-fpm .

更新 docker-compose 文件:

web:
  image: nginx:latest
  ports:
    - "8080:80"
  volumes:
    - .:/var/www
    - ./docker/vhost.conf:/etc/nginx/sites-enabled/vhost.conf
    - ./docker/nginx.conf:/etc/nginx/nginx.conf
  links:
    - php

php:
  image: companyx/php-5.6-fpm
  volumes:
    - .:/var/www
  links:
    - db

db:
  image: mysql:latest
  volumes:
    - /var/lib/mysql
  environment:
    - MYSQL_ROOT_PASSWORD=my-password

【讨论】:

    【解决方案2】:

    问题是你的定义是这样的:

    location ~ ^/(app_dev|config)\.php(/|$) {
       fastcgi_pass php:9000;
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       include fastcgi_params;
       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       fastcgi_param DOCUMENT_ROOT $realpath_root;
    }
    
    location ~ \.php$ {
       return 404;
    }
    

    您正在使用返回 404 的 php 页面。

    你应该换行 try_files $uri /app.php$is_args$args;

    try_files $uri /app_dev.php$is_args$args;

    【讨论】:

      【解决方案3】:

      我有同样的问题并尝试了不同的建议解决方案,但我的情况不同,我在 public/ 文件夹中丢失了 index.php

      确保你在public文件夹中有这个类,你可以自己做,或者在你的根目录下创建一个symfony项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多