docker - 更改 nginx - Docker 容器中的 client_max_body_size nginx.conf 调用包括 HTTP、服务器和位置部分;导入

标签 docker nginx drupal docker-compose

我正在使用 Drupal-fpm、mariadb 和 Nginx 镜像在 Docker 中运行 Drupal。它适用于干净、标准的安装,如我的存储库的快速启动部分所述,位于 https://github.com/RightsandWrongsgit/12-factor-demo。 .我现在正尝试通过在 Drupal 的管理菜单下同步配置来“导入”一个大小约为 4M 的现有站点 Tar.gz 文件。我在 php.ini 文件中进行了修改,以处理大于默认 2M 大小的文件; (如果您想查看该点的详细信息,请在我的 repo README.md 中的注释中详细说明。)但是,我挂断的地方是处理 client_max_body_size 周围的 Ngnix 限制。在尝试导入期间,经过短暂的运行时间后,Ngnix 会抛出文件大小过大的错误并停止。 Ngnix 上传的文件大小过大的情况是此处解决的现有问题 nginx - client_max_body_size has no effect .

我遇到障碍的地方是在 Docker 容器环境中的所有三个位置增加 client_max_body_size 的语法。如果图像尚未加载,我在 Docker-compose.yml 文件中的拉入是为了让“nginx:latest”来自本地或来自 DockerHub。此图像会打开它的“nginx.conf”文件,我可以在干净、标准的快速启动安装中在运行的容器中查看它。 'nginx.conf' 的关键是它包含一个 http 部分,其最后一条语句是 'include/etc/nginx/conf.d/*.conf'(换句话说,它调用任何额外的 *.conf 文件容器中的那个目录)。

而且,是的,在容器的该目录中还有另一个 *.conf,因为我可以看到它并将其列出以供审核。那个额外的 *.conf 文件实际上是“default.conf”,它是在我建立这个“卷”的过程中放在那里的: - ./config/nginx/site.conf:/etc/nginx/conf.d/default.conf: ro' 通过我的 docker-compose.yml 服务建立 nginx。我还可以确认运行“default.conf”文件的容器的内容与本地主机的 site.conf 文件完全匹配。所以 'docker-compose.yml up' 将它放入容器中,我认为没有理由不使用 'nginx.conf' include 语句。所有这一切似乎都按照此处描述的方式工作 How to overwrite nginx default config with docker file?

这是我的问题,“site.conf”似乎接受服务器 {} 上下文中的 client_max_body_size 语句,但我似乎无法弄清楚两件事——首先,哪个位置{}上下文将它添加到或我应该使用什么附加位置部分语法,其次如何将 client_max_body_size 添加到 http{} 上下文。我所做的每一次尝试似乎都会导致抛出错误,并且 nginx 服务器镜像不会加载到容器中。

这是在标准快速启动期间工作得很好的代码,但它并没有真正扩展允许的文件大小上传并使 nginx 文件大小过大错误:

server
{
    listen   80;
    root /var/www/web;
    index index.php;
    client_max_body_size 100M;

    location / {
        error_page 404 = @drupal;
    }

    location @drupal {
        rewrite ^(.*)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

如何将此 client_max_body_size 语句添加到 http 和位置上下文中?根据此处注明的需要 - nginx - client_max_body_size has no effect

如果您能建议对上面提供的代码进行特定的编辑,我将不胜感激,因为我在这方面是一个相对的新手,并且可以使用非常明确的帮助来实际完成这项工作!谢谢

最佳答案

找到基本答案并认为它可能对其他人有帮助,所以我发布了它。 NGINX Docker 镜像包含用于基本配置的“nginx.conf”文件的拉取。 'nginx.conf' 文件中有一个 http 上下文,但在该部分的末尾包含一个 'include' 语句,该语句引用了 'nginx.conf' 文件所在位置下面的子目录(包括/etc/nginx/conf.d/*.conf;)。通配符会选取您放置在那里的“.conf”扩展名的任何其他配置文件。我的容器包含名为“site.conf”的附加配置文件,该文件在构建期间被移动到该子目录。

这是通过与 NGINX 镜像拉取关联的“nginx.conf”末尾的 include 语句拉取的“site.conf”文件。关键是 http 上下文已经建立,因此第一个 'client_max_body_size' 语句已经具有 http 上下文,不需要在 include 调用的 'site.conf' 中重述。

`client_max_body_size 0; # within http context via the 'include'

server
{
    listen   80;
    root /var/www/web;
    index index.php;
    client_max_body_size 0; # within server context

    location / {
        error_page 404 = @drupal;
    }

    location @drupal {
        rewrite ^(.*)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        client_max_body_size 0; # within location context  
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PHP_VALUE   "memory_limit = 500M; post_max_size = 400M; upload_max_filesize = 300M;";
        include        fastcgi_params;
    }
}`

所有这一切真正开始是因为尝试将 Drupal 站点从 LAMP 堆栈迁移到 NGINX 容器。修复文件大小允许移动更大的站点。如果这不能完全解决迁移问题,请多加注意,将容器构建更改为与原始站点一致的 php 版本。我发现一些在迁移到 php 7.4.x 时被弃用的代码行也导致迁移“挂起”,并且还需要使容器 php7.3.4 像 lamp stack 使用的那样。

关于docker - 更改 nginx - Docker 容器中的 client_max_body_size nginx.conf 调用包括 HTTP、服务器和位置部分;导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66054365/

相关文章:

python - Google PubSub 和自动缩放计算引擎实例 (Python)

node.js - heroku 使用 github 部署 docker 镜像

docker - 通过 Gitlab CI/CD 将 docker 服务部署到自己的服务器的正确方法

javascript - 重写反向代理页面上的所有链接

javascript - IE 性能问题 - 慢

javascript - 如何将 HTML/JS 导入到 Drupal 中?

css - 在小屏幕上用背景图像替换图像

python - 使用Docker运行项目失败

linux - 如何在mongodb中将数据库从一台服务器复制到另一台服务器

django - 通过Nginx代理HTTPS向docker-compose中的gunicorn django提供静态文件