操作
发布信息¶
- 版本: 1.4.46
- 上一版本: 1.4.45
- 分支: 1.4
- 状态: 稳定版
- 发布目的: 错误修复
- 发布经理: gstrauss
- 发布日期: 2017-10-21
1.4.45版的重要更改¶
- 新模块: mod_openssl, mod_vhostdb, mod_wstunnel
- 新协议: Upgrade: websocket, HAProxy PROXY, RFC7239 Forwarded
- 错误修复
下载¶
- https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.46.tar.gz
- GPG 签名: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.46.tar.gz.asc
- SHA256:
17025112e02eab13855e83288bdc9d1174b301dcc65a8d2cf911cdcaa9480553
- https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.46.tar.xz
- GPG 签名: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.46.tar.xz.asc
- SHA256:
a2abfc9752992ae3260209f9c4228e7511af4ae12d5fca5e9463234e9e2b47ee
- SHA256 校验和: https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.46.sha256sum
精选功能¶
- HTTP/1.1 Upgrade: websocket (mod_proxy, mod_cgi, and mod_wstunnel)
- HTTP/1.1 Expect: 100-continue
- 代理: HAProxy PROXY 协议 (mod_extforward, mod_proxy)
- 代理: RFC7239 Forwared HTTP 扩展 (mod_extforward, mod_proxy)
- 代理: 后端主机/URL头部基础重映射
- 配置: Lighttpd 启动时将 DNS 名称解析为第一个返回的 IP
- 配置: 允许使用 := 覆盖之前的配置值
- 配置: 允许对任意 HTTP 请求头 ($REQUEST_HEADER[]) 设置条件
- 新模块: mod_openssl - 隔离 SSL/TLS 代码; 更清晰的抽象
- 新模块: mod_vhostdb* - 通过数据库后端实现大规模虚拟主机的框架
- 新模块: mod_wstunnel - 解码/编码 websocket 协议到/从后端
- 动态后端通用代码; 通用功能; 更好的进程管理
- 大量新的实验性功能指令
错误修复¶
- 核心: 修复客户端赶上后端流时的流式响应问题
- CGI: RFC3875 CGI 本地重定向严格遵守; 本地重定向默认禁用
- BSD: 使用电平触发模式的 kqueue
- 修复 HTTP 分块输入时触发的断言
- SSL: 修复 SSL 双向流传输问题
行为更改¶
- mod_scgi 在未指定主机时绑定到 INADDR_LOOPBACK
(之前的行为使用 INADDR_ANY)
如果 lighttpd 正在生成 SCGI 后端,默认现在是限制暴露
到 localhost,除非明确配置为其他。这与
mod_fastcgi 中的行为(自2008年以来)相符。 - 核心: mimetype.assign 匹配 basename 或最长扩展名(".tar.gz"),
而不仅仅是任何后缀匹配,如果条目达到16个或更多 - 核心: 增加默认 server.max-keep-alive-requests 从 16 到 100
- 代理: 添加 X-Forwarded-Host
- openssl: ssl.read-ahead = "disable" 默认 (对慢速嵌入式系统更安全)
- mod_cgi cgi.local-redir = "disable" 默认
(RFC3875 6.2.2 本地重定向优化在 lighttpd 1.4.40 中添加) - 可重现构建: 在 lighttpd -h 或 lighttpd -v 中省略
__DATE__
和__TIME__
1.4.45版以来的更改¶
- [TLS] 标记使用 -lcrypto 但不使用 -lssl 的代码
- 移除冗余的请求结束钩子调用
- [mod_mysql_vhost] 移除开发调试代码
- [核心] con 接口用于读/写; 隔离 SSL
- [核心] 新增插件钩子以帮助隔离 SSL
- [mod_openssl] 新模块 (初步布局)
- [核心] 将 network_open_file_chunk() 移至 chunk.c
- [mod_openssl] 将 openssl 代码移至 mod_openssl
- [mod_openssl] 将 openssl 配置移至 mod_openssl
- [核心] 将 connection_read_cq() 移至 connections.c
- [mod_geoip] 从 handle_request_env 钩子调用
- [构建] 仅 mod_openssl 依赖于 -lssl
- [mod_auth] 如果是外部认证,启用可选授权 (修复 #2481)
- [mod_openssl] 允许在 URL 路径上进行 ssl.verifyclient (修复 #2245)
- [核心] 不要发送带有空值的请求/响应头
- [mod_setenv] 用于覆盖/移除头部的指令 (修复 #650, 修复 #2295)
- [mod_secdownload] 新指令修改哈希路径 (修复 #646, 修复 #1904)
- [核心] 将连接节流移至 connections-glue.c
- [核心] 支持 Expect: 100-continue 与 HTTP/1.1 (修复 #377, #1017, #1953, #2438)
- [mod_openssl] 使用 TLS SNI 设置基于主机的证书
- [mod_ssi] 将 #exec cmd="..." 输出发送到临时文件
- [mod_scgi] tests/mod-scgi.t 单元测试
- [mod_auth] 支持 LDAP 组进行 HTTP 认证 (修复 #1817)
- [核心] 使用 getaddrinfo,inet_pton 代替 gethostbyname (修复 #2783)
- [mod_auth] 在 DN 和过滤器中转义 LDAP 用户名
- mod_vhostdb* (dbi,mysql,pgsql,ldap) (修复 #485, 修复 #1936, 修复 #2297)
- [mod_auth] 让 LDAP 模板替换 '?'
- 应用 debian/patches/spelling.patch
- [核心] 允许模块中的连接级状态
- [TLS] 在 rand.c 中包含 <openssl/opensslv.h>
- [核心] 配置匹配任意 HTTP 请求头 (修复 #1556)
- [mod_flv_streaming] 添加结束位置参数 (修复 #1887)
- [核心] 后端发来的 X-LIGHTTPD-KBytes-per-second (修复 #954)
- [核心] 提高带宽写入限制的准确性
- [核心] 更快的优雅关机
- [测试] 移除依赖 CGI.pm 的未使用文件
- [文档] doc/initscripts.txt (修复 #2782)
- [核心] 在 main() 中尽早检查 issetugid()
- [核心] 合并重复的 getrlimit, network_init
- [核心] 将间隔计时器移到 worker 事件循环附近
- [核心] 在 main() 顶部初始化全局变量
- [核心] 使用 SIGUSR1 优雅重启 (修复 #2785)
- [mod_authn_mysql] 修复关机时的轻微内存泄漏
- [mod_rrdtool] 如果加载但未配置,则不报错
- [文档] SIGUSR1 文档和 lighttpd-angel SIGUSR1
- [mime.conf] 将 text/markdown 添加到 utf-8 列表,重新生成 mime.conf
- [mod_cgi] RFC3875 CGI 本地重定向严格遵守 (#2108)
- [mod_cgi] 不将“Status”发送回客户端
- [核心] 添加 308 永久重定向的标签
- [mod_openssl] 从全局范围继承 ssl.*
- [核心] 处理后端发送 Transfer-Encoding 的情况 (#2786)
- [核心] 在电平触发模式下使用 kqueue (修复 #2788)
- [mod_fastcgi,mod_scgi] 后端 spawn EINTR 重试 (#2788)
- [核心] 配置选项以拦截动态处理程序错误 (修复 #974)
- [核心] 在 server.c 中设置默认 server_tag
- [核心] 在服务器启动消息中包含 lighttpd 版本
- [核心] 将 version.h 逻辑移至 server.c
- [核心] 如果 max-fds 过大则发出跟踪 (修复 #2789)
- [mod_fastcgi,mod_scgi] 统一 waitpid 处理 (修复 #2791)
- [mod_cgi] 修复 CGI 本地重定向与 url.rewrite-once 的问题 (修复 #2793)
- [mod_scgi] 修复 unused_procs 双向链接
- [mod_scgi] 修复 proc->id 潜在的重复使用
- [mod_fastcgi,mod_scgi] 整合后端进程计数 (#2788)
- [mod_cgi] 如果没有头部,则状态为 200 OK(已弃用) (#2786)
- [核心] 修复 mod_extforward 的正则表达式条件替换 (修复 #2794)
- [测试] 更正 mod-scgi.t 的跳过计数
- [mod_vhostdb_ldap] 修复倒置逻辑 (coverity)
- [mod_cgi] cgi.local-redir = [enable|disable] (#2108, #2793)
- [核心] $REQUEST_HEADER[...] 包含其他配置 (#1556)
- [mod_usertrack] usertrack.cookie-attrs 配置选项 (修复 #2795)
- [核心] 如果未指定,默认 server.max-fds=4096 (#2789)
- 更新 .gitignore,添加 .gitattributes
- [核心] 减少小 max_conns 的连接分配
- [配置] 针对数组列表进行更具体的检查
- [mod_authn_gssapi] 在 cygwin 下需要 -lcom_err
- [mod_cgi,fastcgi,scgi,proxy] 修复流式响应 (修复 #2796)
- [mod_auth] 对于时间 <=1978 的系统,摘要随机数
- [文档] simple-vhost.debug 接受整数值 (修复 #2797)
- [核心] 修复无效配置文件导致的崩溃 (修复 #2798)
- [核心] 移除未使用的成员 con->in_joblist
- [mod_proxy] 移除对 con->got_response 的使用
- [核心] 整合动态处理程序响应解析
- [核心] 移除现在未使用的 buffer_search_string_len
- [mod_cgi] 消除编译 -Os 时的警告
- [mod_scgi] 连接成功后不再重新连接
- [测试] 减少等待后端启动的时间
- [核心] server.syslog-facility (修复 #2800)
- [核心] server.syslog-facility (使用 -1 表示未设置) (#2800)
- [核心] 允许覆盖之前的配置值 (修复 #2799)
- [mod_proxy] 如果可用,设置 Content-Length
- [mod_proxy] 设置 X-Forwarded-Host (修复 #418)
- [核心] 移除多余的 Content-Length 数字检查
- [核心] 移除一些未使用的头文件包含
- [核心] 使用 con->dst_addr_buf 而不是重新计算 IP
- [核心] 在需要的地方包含 "fdevent.h"
- [核心] 使 stat_cache 对 stat_cache.c 私有
- [核心] 收集 ioctl FIONREAD 代码
- [核心] 在需要的地方包含 <netdb.h>
- [核心] 当 mkstemp() 失败时报告文件路径 (修复 #2802)
- [核心] 导出 http_request_host_policy() 以供重用
- [mod_extforward] 简化头部搜索
- [mod_extforward] 整合 ipstr_to_sockaddr()
- [mod_extforward] IP 验证后更新 scheme
- [mod_extforward] 重新安排代码; 准备 Forwarded
- [mod_extforward] 支持 Forwarded HTTP 扩展 (#2703)
- [mod_proxy] 支持 Forwarded HTTP 扩展 (修复 #2703)
- [核心] inet_pton(), inet_ntop() 在 (sock_addr *) 上
- [核心] 在 con->proto 中保存连接级别协议
- [mod_extforward] 支持 HAProxy "PROXY" 协议 (修复 #2804)
- [mod_extforward] 修复 Forwarded 处理中的错别字
- [核心] 修复 stat_cache 初始化错误
- [核心] 性能: stat_cache_mimetype_by_ext()
- [核心] inet_ntop_cache 现在是 4 元素缓存
- [mod_openssl] 退出时释放 local_send_buffer
- [核心] 扩展 mimetype 搜索,不带前导 '.'
- [核心] Linux 内核 < 2.6.27 时不使用 SOCK_CLOEXEC
- [核心] 内联简单缓冲区是否为空检查
- [核心] buffer_substr_replace()
- [核心] sys-strings.h 对 strings.h 的抽象
- [mod_proxy] 修复反斜杠转义
- [核心] 从规范化主机字符串中省略默认端口
- [核心] 修复没有 ipv6 支持的构建问题
- [核心] 允许配置数组中的字符串和整数
- [mod_accesslog] 为 %T 标记高精度时间戳 (修复 #2807)
- [核心] 允许配置数组中的字符串、整数和数组
- [核心] 为 plugin_config 分配内存以实现一致初始化
- [mod_proxy] 头部中简单的主机/URL映射 (修复 #152)
- [mod_uploadprogress] 处理查询字符串进度 ID (修复 #2808)
- [mod_fastcgi] 整合后端读取代码
- [mod_proxy,mod_scgi] 修复截断的错误跟踪
- [核心] 如果 con->fd 为负,则跳过 socket shutdown()
- [核心] 在连接升级后充当透明代理
- [核心] 移除 fde_ndx 的冗余重置
- [核心] configparser: 修复错误情况下的资源处理 (修复 #2809)
- [核心] 修复配置文件中无效语法导致的崩溃 (修复 #2810)
- [核心] 准备模块过渡到透明代理
- [mod_proxy] 对 Upgrade: websocket 的基本支持 (修复 #2811)
- [mod_extforward] 在 OSX 上编译
- [核心] 设置 server.max-keep-alive-requests = 100 (修复 #2205)
- [核心] 性能: 如果长度已知,跳过冗余的 strlen()
- [核心] 配置“else”子句中的可选条件 (修复 #1268)
- [mod_cgi] 对 Upgrade: websocket 的基本支持
- [核心] 将缓慢后端的流缓冲到磁盘
- [核心] 如果 !HAVE_FORK 则消除编译器警告
- [构建] 如果 --enable-extra-warnings=error 则 -Werror
- [构建] autotools 使用 AC_PROG_CC_STDC 宏
- [mod_openssl] ssl.ca-crl-file 用于 CRL (修复 #2319)
- [mod_openssl] ssl.ca-dn-file (修复 #2694)
- [mod_proxy] 修复 coverity 识别的错别字
- [mod_openssl] 如果未强制执行,则忽略客户端验证错误
- [mod_openssl] 修复 openssl 1.1.0 的编译问题
- [mod_extforward] 消除 clang 编译器警告
- [mod_dirlisting] 将 "../" 排序到名称顶部
- [mod_openssl] safer_X509_NAME_oneline() (修复 #2693)
- [核心] 允许 SSL/TLS 更早的插件初始化
- [mod_openssl] 调整 ssl.ca-dn-file 的使用
- [核心] 修复 Mac OS X 上的编译器警告
- [核心] server.socket-perms 设置 unix 上的权限 (修复 #656)
- [核心] 如果是 AF_INET,AF_INET6,从 sock_addr 获取端口
- [核心] server.error_handler_404 X-Sendfile ENOENT (#2474)
- [核心] 整合 fork()/execve() 代码 (#1393)
- [核心] 将 log_error_{open,cycle.close} 移至 server.c
- [核心] 重命名 fd_close_on_exec()
- [核心] 移除未使用的 stat_cache.h 包含
- [核心] 添加 stdlib.h 缺失的包含
- [核心] 减少 unistd.h 和其他头文件的暴露
- [核心] sock_addr_from_str_hints 可重用名称解析
- [核心] 继续收集 netdb.h 的使用
- [核心] 继续收集 netdb.h 的使用
- [核心] 继续收集 netdb.h 的使用
- [核心] fdevent_connect_status() 共享代码
- [核心] 添加 const 以减少 .data 段大小
- [mod_proxy] 将 data_fastcgi 移至 mod_proxy.c
- [mod_proxy] 在配置时存储地址族
- [mod_fastcgi] 稍微简化计数器
- [mod_fastcgi] 整合 connect() 错误处理
- [mod_fastcgi] 在 fcgi_create_env() 中设置 request_id
- [mod_fastcgi] 将延迟的 connect() 移入 switch()
- [mod_fastcgi,mod_scgi] 统一 connect() 错误
- [mod_scgi] 移除未使用的 parse_response 成员
- [mod_fastcgi,mod_scgi] 结构成员一致性
- [mod_fastcgi,mod_scgi] 在启动时解析 bin_path
- [mod_fastcgi,mod_scgi] 使用临时缓冲区用于 cgi_env
- [核心] 用于套接字后端的共享代码
- [核心] 将负载分散到套接字后端进程
- [核心] 为套接字后端进程存储 sockaddr
- [核心] 在启动时为套接字后端解析 DNS
- [核心] 套接字后端进程的自适应生成 (修复 #1162)
- 抑制 -Wimplicit-fallthrough 编译器警告
- [文档] 更新 README
- [核心] fdevent_cycle_logger()
- [核心] 精确回收 lighttpd worker pid
- [核心] 如果管道日志记录器退出则重新启动 (修复 #1393)
- [mod_webdav] PROPFIND getetag attr 必须与 GET 匹配
- [核心] SA_SIGINFO 存在与否的一致行为
- [核心] 在测试模式下不删除 pid 文件
- [核心] 如果没有加密,添加公共域 SHA1
- [mod_wstunnel] websocket 隧道到其他协议
- [核心] 仅将 SIGHUP 转发给 lighttpd worker
- [mod_dirlisting] 将 README 和 HEADER 视为路径 (修复 #2818)
- [核心] 设置一次性模式 fd O_NONBLOCK, FD_CLOEXEC
- [核心] 移除 fdevent fcntl_set 钩子
- [mod_extforward] 评论中的错别字
- [mod_cgi] 添加缺失的 #include
- [核心] 修复 coverity 识别的无效 sizeof()
- [核心] 添加缺失的 #include
- [核心] base_decls.h 消除编译器警告
- [核心] 在 bind 之后、listen 之前设置 socket 权限
- [核心] 如果后端服务器配置包含 '_' 则发出警告
- [mod_extforward] PROXY 协议和 SSL_CLIENT_VERIFY
- [核心] 针对 AIX mmap 定义的变通方法
- [mod_accesslog] 每 4 秒刷新访问日志
- [mod_cgi] 修复正确执行解释器的错误
- [mod_fastcgi] 修复流式传输最小缓冲区时的返回问题
- [核心] 尝试消除 coverity 误报
- [核心] 尝试消除 coverity 误报
- [核心] 尝试消除 LEDE 中的编译器警告
- [核心] SIGCHLD handle_waitpid 模块钩子
- [mod_rrdtool] handle_trigger 返回 HANDLER_GO_ON
- [mod_openssl] ssl.read-ahead="disable" 用于流
- [mod_cgi] 在 CGI 退出时添加 FDEVENT_IN
- [mod_cgi] 进程退出后省略 cgi_handle_fdevent
- [mod_webdav] 检查 HAVE_UUID 是否使用 -luuid
- [核心] 调整 li_rand_pseudo* 接口
- [mod_wstunnel] 修复配置解析错误
- [核心] fdevent setsockopt() 辅助函数
- [核心] 使 strftime_cache_get() 成为 16 元素缓存
- [核心] 如果流式传输到后端,禁用 Nagle
- [核心] 修复 HTTP 分块输入时触发的断言 (修复 #2822)
- [mod_wstunnel] 修复 NULL 指针解引用
- [algo_sha1] 修复编译中断和警告
- [lemon] 修复 gcc implicit-fallthrough 警告
- [核心] URI scheme 不区分大小写
- [网络] 不向 unix socket 路径追加端口
- [单元测试] 整合 base64 测试代码
- [核心] 对 AF_UNIX 使用 sun_path 作为地址字符串 (修复 #2826)
- [核心] 更简洁的代码; 从 network.c 中移除 goto
- [核心] /dev/stdin 监听器用于 inetd 等待 yes
- [核心] DNS 解析后比较监听地址
- [核心] 内联 chunkqueue_is_empty()
- [核心] 限制 TCP_CORK 的使用
- [核心] 如果 rd 较小,则从 http_response_read 返回
- [核心] 网关可能在读取主体前升级连接
- [mod_wstunnel] 如果是 bin 则设置 Sec-WebSocket-Protocol
- [mod_wstunnel] 移除无效的追加 '\0'
- [核心] 消除 coverity 警告
- [核心] 处理 poll 超时后待关闭的文件描述符 (修复 #2827)
- [核心] 修复 config 中 $REQUEST_HEADER[...] 解析问题 (#1556)
- [mod_dirlisting] 自定义 js 日期解析函数 (修复 #2823)
- [核心] 如果 create_env 返回,则移除 fd 兴趣
- [mod_openssl] 复制更大的 SSL 数据包的数据
- [mod_openssl] 移除错误的 SSL_set_shutdown()
- [核心] 如果 !header-strict 则允许 LF 结束行
- [核心] 为后端添加回 REQUEST_SCHEME
- [核心] 从 fdevent_libev 移除 fdevent_sched_run (#2827)
- [mod_openssl] ssl.read-ahead="disable" 默认
- [核心] 调整解析器以进行有效变量扩展
- [cmake] 处理 WITH_WEBDAV_LOCKS 选项
- [cmake] 修复 attr 头文件检测和链接
- [cmake] 将 mod_cml 与 memcached 链接
- [核心] 可重现构建: 隐藏
__DATE__
__TIME__
(修复 #2828) - [核心] 性能: 更高效的 fdevent_sched_run()
- [核心] 将 DNS 转换为 IP 字符串以进行条件套接字比较