php - 是否可以在 nginx 没有安装卷的情况下将请求传递给 php-fpm

标签 php docker nginx volume

我正在尝试将我的遗留单体迁移到 k8s,现在我有 nginx 和 php-fpm(带代码)图像,我希望 nginx 只提供 http 流量并将其传递给 fpm,但 nginx 坚持要有文件,我没有 try_files 指令,但无论如何它都会尝试查找根文件和索引文件。

那么是否有可能不将源代码挂载到 nginx,我真的不明白为什么它应该在那里,但我找不到任何工作示例

nginx.conf:

server {
    listen 80;

    index index.php;
    # This dir exist only in php-fpm container
    root /var/www/html/public; 

    location ~* \.php$ {

        client_max_body_size 0;

        include fastcgi_params;
        fastcgi_pass php-fpm:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }
}

2018/08/17 16:44:40 [error] 9#9: *46 "/var/www/html/public/index.php" is not found (2: No such file or directory), client: 192.xxx.xxx.xxx, server: , request: "GET / HTTP/1.1", host: "localhost"

192.xxx.xxx.xxx - - [17/Aug/2018:16:44:40 +0000] "GET / HTTP/1.1" 404 571 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36" "195.xxx.xxx.xxx"

最佳答案

问题是 index 指令需要文件 index.php 存在,以便在内部将 URI / 重定向到 /index.php.

您可以通过添加 location/ 来在内部将所有内容重定向到 /index.php 来避免使用 index 指令。

例如:

location / {
    rewrite ^ /index.php last;
}
location ~* \.php$ {
    root /var/www/html/public; 
    client_max_body_size 0;

    include fastcgi_params;
    fastcgi_pass php-fpm:9000;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $document_root;
}

关于php - 是否可以在 nginx 没有安装卷的情况下将请求传递给 php-fpm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51900221/

相关文章:

ruby-on-rails - Cloudfront 正在缓存来自 nginx 的 404 错误,以获取源服务器上确实存在的 Assets

docker - 单个域的多个位置的 Nginx 代理

php - 如何使用 Controller 为 laravel 数据库中的特定列创建随机字符串值?

php - 日历打不开

javascript - 使用 MPDF 将 HTML 保存为 PDF 和电子邮件

linux - 在 Docker 容器中运行命令

php - 如何在选项 html 表单上加载 mysql 数据

python - 如何在 docker 镜像中安装 python?

r - 使用Docker在Shiny app R软件包中加载软件包

node.js - 使用哈希方法与 nginx 进行负载平衡