更改使用docker compose搭建的wordpress上传文件大小限制

前两天想在月经杯那篇文章里加个视频,一看媒体库上传文件大小上限只有 2MB,再看我扒下来的视频只有 2.55MB,心想好吧没必要改,随便找了一个压缩视频的网站打算压缩到 2MB 以内。压缩完 1.96MB,我心想这完美啊,结果死活传不上去,显示 “从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页”。行吧,看来这个问题绕不过去了。

第一步当然是搜索这个报错意味着什么。相关信息倒是挺多的,都直接指向了文件大小限制。GitHub 上的这个 issue 讲的非常清楚了,包括解决方法。在下面大致总结一下方法(基于此 Digital Ocean 教程 搭建的wordpress):

1. 在 wordpress 的文件夹里新建一个给 php 用的配置文件uploads.ini,覆盖掉默认设置:

file_uploads = On
memory_limit = 64M                        #php 进程的内存限制
upload_max_filesize = 64M           #最大上传文件大小
post_max_size = 64M                       #单篇文章大小限制
max_execution_time = 600           #最大执行时间

2. 在docker-compose.yml里面 cue 一下,加在 wordpress volumes 的部分,让配置文件被正常加载进去:

      -./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

完成后:

...
  wordpress:
    depends_on:
      - db
    image: wordpress:5.6.0-fpm-alpine
    container_name: wordpress
    restart: on-failure
    env_file: .env
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=$MYSQL_USER
      - WORDPRESS_DB_PASSWORD=$MYSQL_PASSWORD
      - WORDPRESS_DB_NAME=wordpress
    volumes:
      - wordpress:/var/www/html
      -./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    networks:
      - app-network
...

3. 进入 nginx-conf 目录,打开nginx.conf修改 nginx 的文件请求大小,在 80 和 443 端口的 section 任意行都加上:

        client_max_body_size 64M;

完成以后是

server {
        listen 80;
        listen [::]:80;
        server_name mmydonn.space www.mmydonn.space;

        client_max_body_size 64M;

...

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name mmydonn.space www.mmydonn.space;

        client_max_body_size 64M;
...

第一次只在 80 的 section 加了结果无效,可能因为我的网站默认 https 所以还是 443 比较重要。一定要记得都加上!

4. 重建容器

$ docker-compose down
$ docker-compose up -d

或者直接 --force-recreate 选项也行。

刷新网站再看文件限制就变成 64MB 啦。

后记:当时没有截图报错信息,写文章的时候想再重现一遍就随便选了一个大文件上传,结果报错变成了正常的超过大小限制:

所以直到最后都没搞懂为什么一开始的报错是 “预料之外的响应”……猜想是 nginx 请求大小的锅,不过已经不重要了。

留下评论