关于 Nginx 的记录

使用 Nginx 遇到的问题总结

499

HTTP 499 错误代码是 Nginx 特有的,表示客户端在服务器完成响应之前关闭了连接。在实际的应用场景中,这通常发生在用户停止加载页面,或者浏览器跳转到另一个页面时。

在你提供的日志中,HTTP 499 错误可能发生在以下情况:

  1. 用户在接收完整响应之前停止了页面加载。
  2. 用户在接收完整响应之前跳转到了另一个页面。
  3. 客户端网络连接不稳定,导致连接中断。
  4. 客户端或者服务器超时,可能是因为处理请求所需的时间超过了服务器或客户端的超时设置。

对于这种情况,可以尝试以下几种解决方法:

  1. 调整超时设置:如果这个问题经常出现,可能是因为 Nginx 服务器的超时设置过低。你可以尝试提高 proxy_read_timeoutkeepalive_timeout 的值。
  2. 优化应用性能:如果你的应用服务器处理请求的时间过长,可能需要优化应用的性能。
  3. 处理网络问题:如果你的用户经常遇到网络连接问题,可能需要找出并解决这些问题。这可能包括改进服务器的网络连接,或者使用 CDN 等技术来改进对远程用户的服务。

关于 499 错误码的真正原因

发现一个有趣的事情,一个接口一直报 499 错误,排查了各种原因,做了上述的各种尝试。最终发现问题的原因,因为是 http 非 https 请求(且该明文请求存在跨境问题,域名没有备案只能用 ip 请求)然后 url 上因为有 youtube 关键字,所以一直 499。草,谢谢 GFW

root 和 alias 的区别

rootalias都是Nginx中的指令,它们用于定义请求URI和文件系统路径之间的映射关系。但是它们工作的方式有所不同,下面列出了rootalias之间的主要区别:

  1. 工作方式:

    • root: 定义了请求URI的基础路径。当请求一个资源时,Nginx会拼接root指定的路径和请求的URI来获取文件的完整路径。
    • alias: 为特定的location直接定义完整的文件系统路径。Nginx不会尝试拼接alias路径和请求URI,而是直接使用alias指定的路径。
  2. 例子:

    假设请求的URL是/images/pic.jpg:

    • 使用root:

      nginx
      1location /images/ {
      2    root /data;
      3}

      文件的完整路径会是 /data/images/pic.jpg.

    • 使用alias:

      nginx
      1location /images/ {
      2    alias /data/photos/;
      3}

      文件的完整路径会是 /data/photos/pic.jpg.

  3. 末尾的斜杠:

    当使用alias时,locationalias路径的末尾斜杠需要特别注意,确保它们的使用能正确映射到预期的文件或目录。

  4. 使用场景:

    • root经常用于普通的静态文件服务,它适合于目录结构和URL结构保持一致的场景。
    • alias适用于URL结构和文件系统目录结构不完全一致的情况,它可以为特定的URL定义一个完全不同的文件系统路径。
  5. 限制:

    alias不能在location中使用正则表达式,而root可以。

简而言之,rootalias都是定义URI到文件系统路径的映射,但它们的工作方式和适用场景有所不同。

对于请求 /images/subdir/pic.jpg

对于请求 /images/subdir/pic.jpg

  1. 使用 root:

    nginx
    1location /images/ {
    2    root /data;
    3}

    这将会尝试从 /data/images/subdir/pic.jpg 提供文件。

  2. 使用 alias:

    nginx
    1location /images/ {
    2    alias /data/photos/;
    3}

    这将会尝试从 /data/photos/subdir/pic.jpg 提供文件。

如你所见,无论是使用 root 还是 alias,子目录(在这个例子中是 subdir)仍然会被追加到最终的文件路径中。这是因为Nginx会将location指定的路径之外的部分(即子路径和文件名)追加到rootalias指定的路径上。