Nginx应用与运维——Nginx Web服务应用实战(HTTP增强协议服务器的搭建)

Nginx Web服务应用实战

7、HTTP增强协议服务器的搭建

7.1、HTTP/2协议服务

HTTP/2是HTTP协议的2.0版本,该协议通过多路复用、请求优化、HTTP头压缩等功能提升网络传输速度、优化用户体验。HTTP/2使用二进制分帧层将传输的数据分割为更小的数据和帧,并对它们进行二进制格式编码处理,以实现在不改变HTTP现有语义等标准的基础上提升传输性能,从而降低响应延迟、提高请求吞吐的能力。HTTP/2通过多路复用技术使客户端可以并行发送多个请求,以提高带宽的利用率。HTTP/2是基于SPDY协议设计的,是SPDY的演进版本,但其不强制使用HTTPS协议,仍可支持HTTP明文传输。Nginx是通过ngx_http_v2_module实现HTTP/2协议支持的,编译配置时可通过增加参数--with-http_v2_module启用HTTP2模块。HTTP2模块配置指令如下。

  • http2_recv_buffer_size指令可编写在http指令域中。
  • http2_chunk_size、http2_push、http2_push_preload指令可编写在http、server、location指令域中。
  • 其余的指令可编写在http、server指令域中。

HTTP2服务器推送可以实现将多个资源文件(CSS、JS、图片等)同时发送到客户端,如下页面中包含style.css和nginx.png两个资源文件。

html 复制代码
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>Nginx HTTPv2 Test</title>
<head>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>Nginx HTTPv2 Test</h1>
    <img src="nignx.png">
</body>
</html>

在没有服务器推送的情况下,客户端通过3个GET方法获取该页面的所有资源。在启用服务器推送后客户端只需通过一个GET方法,就可以获取到该页面的所有资源。配置样例如下:

bash 复制代码
server {
    listen 443 ssl http2 default_server;

    ssl_certificate ssl/www_nginxbar_org.pem;       # 网站证书文件
    ssl_certificate_key ssl/www_nginxbar_org.key;   # 网站证书密钥文件
    ssl_password_file ssl/www_nginxbar_org.pass;    # 网站证书密钥密码文件
    root /opt/nginx-web;
    location / {
        http2_push /style.css                       # 服务端推送
        http2_push /nginx.png                       # 服务端推送
    }
}

7.2、WebDAV协议服务

WebDAV(Web-based Distributed Authoring andVersioning)是基于HTTP/1.1的增强协议。该协议使用户可以直接对Web服务器进行文件读写,并支持对文件的版本控制和写文件的加锁及解锁等操作。Nginx通过ngx_http_dav_module模块实现对WebDAV协议的支持,使用户通过WebDAV模块的配置指令实现文件的管理操作,该模块支持WebDAV协议的PUT、DELETE、MKCOL、COPY和MOVE请求方法,在配置编译参数时,需要添加--with-http_dav_module参数启用该功能。ngx_http_dav_module模块的配置指令如表所示。

上述指令都可编写在http、server、location指令域中。

Nginx的自有模块对WebDAV协议的支持并不完整,可以通过第三方模块nginx-dav-ext-module增加文件特性查找和对写文件的加锁与解锁支持。ngx_http_dav_module模块的配置指令如表所示。

  • dav_ext_lock_zone指令只能编写在http指令域中。
  • dav_methods和dav_ext_lock指令可编写在http、server、location指令域中。
  • WebDAV协议方法及方法说明如表所示。

    进行WebDAV协议的MOVE/COPY操作时,会通过HTTP请求头属性字段Destination指定目标路径,如果客户端请求头中没有字段Destination, Nginx会直接报错。为增加服务端兼容性,可以通过第三方模块headers-more-nginx-module的more_set_input_headers指令在MOVE/COPY操作的HTTP请求头中强制添加Destination字段。

WebDAV协议服务配置过程如下所示。

  • (1)模块编译
    模块编译配置样例如下:

    bash 复制代码
    # 编译模块
    $ ./configure --with-http_dav_module --add-module=../nginx-dav-ext-module --add-module=../headers-more-nginx-module
  • (2)设置文件夹权限
    文件夹权限配置样例如下:

    bash 复制代码
    chown -R nobody:nobody /opt/nginx-web/davfile
    chmod -R 700 /opt/nginx-web/davfile
  • (3)设置登录账号及密码
    登录账号及密码配置样例如下:

    bash 复制代码
    echo "admin:$(openssl passwd 123456)" >/etc/nginx/conf/.davpasswd
  • (4)Nginx配置
    Nginx配置样例如下:

    bash 复制代码
    dav_ext_lock_zone zone=davlock:10m;                   # DAV文件锁内存共享区
    
    server {
        listen 443 ssl http2;                             # 启用HTTPS及HTTP/2提升传输性能
        server_name  dav.nginxbar.org;
        access_log  logs/webdav.access.log  main;
        root    /opt/nginx-web/davfile;
        
        ssl_certificate ssl/www_nginxbar_org.pem;         # 网站证书文件
        ssl_certificate_key ssl/www_nginxbar_org.key;     # 网站证书密钥文件
        ssl_password_file ssl/www_nginxbar_org.pass;      # 网站证书密钥密码文件
        ssl_session_cache shared:SSL:10m;                 # 会话缓存存储大小为10MB
        ssl_session_timeout  20m;                         # 会话缓存超时时间为20分钟
    
        client_max_body_size 20G;                         # 最大允许上传的文件大小
    
        location / {
            autoindex on;
            autoindex_localtime on;
    
            set $dest $http_destination; 
            if (-d $request_filename) {                   # 对目录请求、对URI自动添加"/"
                rewrite ^(.*[^/])$ $1/;
                set $dest $dest/;
            }
    
            if ($request_method ~ (MOVE|COPY)) { # 对MOVE|COPY方法强制添加Destination请求头
                more_set_input_headers 'Destination: $dest';
            }
    
            if ($request_method ~ MKCOL) {
                rewrite ^(.*[^/])$ $1/ break;
            }
    
            dav_methods PUT DELETE MKCOL COPY MOVE;      # DAV支持的请求方法
            dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;# DAV扩展支持的请求方法
            dav_ext_lock zone=davlock;                   # DAV扩展锁绑定的内存区域
            create_full_put_path  on;                    # 启用创建目录支持
            dav_access user:rw group:r all:r;            # 设置创建的文件及目录的访问权限
    
            auth_basic "Authorized Users WebDAV";
            auth_basic_user_file /etc/nginx/conf/.davpasswd;
        }
    }

主流操作系统均支持WebDAV协议,用户既可以直接通过添加网络设备的方式添加WebDAV网站目录,也可以使用支持WebDAV协议的客户端进行访问。

相关推荐
小白的码BUG之路1 小时前
Docker -- 构建ruoyi-auth镜像
运维·docker·容器
我叫洋洋3 小时前
涂鸦 T5+ hashcat 自动化破解 WPA2:从单缺 M2 到全自动值守的踩坑实录 破解wifi 密码
运维·单片机·自动化
扶风ff10 小时前
新品知识更新太快?用练题簿在线刷题,安排企业培训的小测与复盘
前端·学习·小程序
꯭自꯭闭꯭10 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课10 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
ZhangJun9510 小时前
在 32GB 内存电脑上本地搭建 Qwen3.6-35B-A3B 大模型踩坑实录
运维·人工智能·阿里云·ai·软件构建
一条破秋裤10 小时前
Linux 共享内存通信:POSIX 共享内存与 mmap
linux·运维·服务器
贵州山魈羡民11 小时前
【玩转手机】通过 Podroid 上的 Alpine 部署 1Panel,把微型服务器装进口袋
运维·服务器
小白的码BUG之路11 小时前
Docker -- 构建nacos镜像
运维·docker·容器