标签: nginx

  • nginx 413 Request Entity Too Large 报错解决方法

    对于使用 nginx 的 PHP Web 服务器来说,要增加上传文件大小限制,除了修改 php.ini 文件的 upload_max_filesizepost_max_size 参数以外,还需要修改 nginx 的 client_max_body_size 参数,否则上传文件时 nginx 会报错 413 Request Entity Too Large。

    在 http、server 或 location 下使用 client_max_body_size size; 即可,默认 size 是 1m,如果设置为 0 代表不检查也就是不限制请求大小

    使用方法如下:

    http {
        // 其他内容…
        client_max_body_size 8M;
        // 其他内容…
    }Code language: Nginx (nginx)

    server {
        // 其他内容…
        client_max_body_size 8M;
        // 其他内容…
    }Code language: Nginx (nginx)

    location / {
        // 其他内容…
        client_max_body_size 8M;
        // 其他内容…
    }Code language: Nginx (nginx)

    可以有不同的作用域,非常灵活。

    修改完成后重新加载 nginx 让新配置生效:

    sudo nginx -s reloadCode language: Shell Session (shell)

    参考资料:

  • WordPress 修改固定链接 nginx 报 404?正确配置伪静态重写规则

    在使用 nginx 作为 Web 服务器的时候,如果 WordPress 设置了自定义链接格式,那么需要修改 nginx 的配置文件来处理链接重写,不然会出现 404 错误。要将配置文件中默认的规则:

    location / {
      try_files $uri $uri/ =404;
    }Code language: Nginx (nginx)

    修改为:

    location / {
      try_files $uri $uri/ /index.php?$args;
    }Code language: Nginx (nginx)

    解释

    原来的配置文件中,nginx 首先查找是否有 $uri 这个文件,如果没有,再查找是否有 $uri/ 目录,如果仍然没有,就返回 404 Not Found。新的配置文件将最后 =404 部分进行了修改,如果没有找到 $uri 文件也没有找到 $uri/ 目录,就把这个请求重写到 index.php 去处理,同时带上 $args 参数。当请求到 index.php 时,PHP 就开始接手处理了。

    为什么 index.php?$args 而不是 index.php?$uri 呢?这是因为 $uri 不会保留参数。那如果只传 $args,WordPress 又是怎么知道 URI 的呢?WordPress 可以通过 $_SERVER 变量获取到 URI。具体的解析处理比较复杂,但 PHP 程序是可以获取到 URI 的。所以,$args 一定要从 nginx 这里传过去,不能丢了,在这里把 $args 丢了 PHP 后面就获取不到了,而无论这里有没有显式地传 $uri,nginx 都会把 URI 传给 PHP。