运维锅总详解Nginx

news2024/9/20 8:13:00

本文尝试从Nginx特性及优缺点、为什么具有文中所述的优缺点、Nginx工作流程、Nginx最佳实践及历史演进等角度对其进行详细分析。希望对您有所帮助。

Nginx特性及优缺点

Nginx简介

Nginx(发音为 “engine-x”)是一款高性能的开源Web服务器及反向代理服务器,也可以用作IMAP/POP3/SMTP邮件代理服务器。Nginx由Igor Sysoev于2002年开始开发,2004年正式发布。由于其高性能、稳定性和低系统资源消耗,Nginx迅速成为了全球最受欢迎的Web服务器之一。

Nginx的特点

  1. 高并发连接处理能力

    • Nginx采用事件驱动(asynchronous)架构,可以处理数以千计的并发连接,这使得它非常适合高并发请求的场景。
  2. 反向代理和负载均衡

    • Nginx可以作为反向代理服务器,将客户端请求分发到后端服务器,并支持多种负载均衡算法(如轮询、最小连接数、IP哈希等),以提高系统的扩展性和稳定性。
  3. 静态内容处理

    • Nginx在处理静态内容(如HTML、CSS、JavaScript、图片等)时表现出色,具有快速的文件处理能力。
  4. 模块化架构

    • Nginx采用模块化设计,可以根据需求加载和卸载不同的模块,从而扩展其功能。
  5. 低资源消耗

    • Nginx以其低内存和CPU消耗著称,适合在资源有限的环境中运行。
  6. 灵活的配置

    • Nginx的配置文件语法简洁且灵活,支持使用正则表达式进行复杂的请求重写和路由。
  7. SSL/TLS支持

    • Nginx具有完善的SSL/TLS支持,可以实现安全的HTTPS连接。
  8. 缓存功能

    • Nginx可以缓存后端服务器的响应,从而减少服务器负载和提高响应速度。

Nginx的优点

  1. 高性能

    • Nginx在高并发场景下表现卓越,能够处理大量并发连接而保持低资源消耗。
  2. 稳定性

    • Nginx以其高稳定性著称,适用于大规模的生产环境。
  3. 灵活性

    • Nginx的配置和扩展非常灵活,可以满足各种复杂场景的需求。
  4. 丰富的功能

    • 反向代理、负载均衡、静态文件处理、SSL/TLS支持、缓存功能等,使得Nginx成为功能强大的Web服务器。
  5. 社区支持

    • Nginx拥有庞大的用户社区和丰富的文档资源,用户可以方便地获取支持和帮助。

Nginx的缺点

  1. 学习曲线

    • 尽管Nginx配置灵活,但对于初学者来说,其配置语法和概念可能需要一些时间来掌握。
  2. 动态内容处理能力有限

    • 与Apache相比,Nginx的动态内容处理能力(如通过CGI、FastCGI等)相对较弱,需要依赖其他应用服务器(如PHP-FPM、Unicorn等)来处理。
  3. 模块支持不如Apache

    • 尽管Nginx有许多模块,但其第三方模块支持和数量不如Apache丰富。
  4. 配置变更重载

    • 每次修改配置文件后,Nginx需要重载配置,这可能会导致服务短暂中断。

总结

Nginx以其高性能、稳定性和灵活性在Web服务器和反向代理服务器领域占据了重要地位。虽然在某些方面(如动态内容处理和模块支持)可能不如Apache,但其优异的并发处理能力和低资源消耗使其成为处理高流量网站和应用的理想选择。

Nginx为什么具有上述优点

Nginx能够实现上述特性的原因主要归功于其独特的设计和架构。以下是一些关键原因:

1. 事件驱动架构

Nginx采用事件驱动(event-driven)的非阻塞架构,这使得它能够处理大量的并发连接,而不会因为等待I/O操作而阻塞。这种架构的优点包括:

  • 高并发处理能力:Nginx使用epoll(在Linux上)或kqueue(在FreeBSD上)等高效的事件通知机制,可以同时处理数以万计的并发连接。
  • 低资源消耗:非阻塞I/O和事件驱动的方式减少了每个连接的资源占用,尤其是内存和CPU。

2. 多进程模型

Nginx采用了多进程模型,其中包括一个主进程和多个工作进程。主进程负责管理配置和监控工作进程,而工作进程负责实际处理客户端请求。优点包括:

  • 稳定性和可靠性:即使一个工作进程崩溃,主进程仍然可以启动新的工作进程,保证服务的持续运行。
  • 高效利用多核CPU:多个工作进程可以分布在多个CPU核心上,充分利用现代多核处理器的优势。

3. 模块化设计

Nginx的模块化架构使其能够灵活地加载和卸载各种功能模块。每个模块负责特定的功能,如HTTP处理、反向代理、负载均衡、SSL/TLS支持等。这种设计带来了以下优点:

  • 可扩展性:可以根据需要添加或移除功能模块,满足不同的应用需求。
  • 易于维护:模块化设计使得代码更加清晰和可维护,方便开发和调试。

4. 高效的静态文件处理

Nginx在处理静态文件时表现出色,这得益于其优化的文件I/O操作和高效的缓存机制。具体来说:

  • 异步非阻塞I/O:利用操作系统提供的异步I/O接口,减少了文件I/O操作的阻塞时间。
  • 文件缓存:Nginx可以将静态文件缓存到内存中,加速后续的文件请求响应。

5. 强大的反向代理和负载均衡能力

Nginx内置了强大的反向代理和负载均衡功能,这主要是通过以下机制实现的:

  • 多种负载均衡算法:支持轮询、最小连接数、IP哈希等多种负载均衡算法,根据实际需求选择合适的策略。
  • 健康检查:定期检查后端服务器的健康状态,自动将故障服务器从负载均衡池中移除,提高系统的可用性。
  • 请求缓存:可以缓存后端服务器的响应,减少后端服务器的负载和请求延迟。

6. 灵活的配置和高效的重载机制

Nginx的配置文件语法简洁且灵活,支持复杂的请求路由和重写规则。同时,Nginx支持平滑重载配置文件,这使得配置变更无需停止服务,从而减少了服务中断时间。

7. SSL/TLS支持

Nginx内置了对SSL/TLS的支持,并进行了高度优化,可以提供安全的HTTPS连接。其优化措施包括:

  • 会话缓存:缓存SSL会话,减少握手的开销。
  • 硬件加速:支持利用硬件加速(如Intel AES-NI)来加速加密和解密操作。

8. 强大的社区和开发支持

Nginx拥有一个活跃的开发社区和强大的商业支持(Nginx Plus),这意味着它能够持续改进和更新,保持领先的技术优势。

综上所述,Nginx通过其高效的架构设计、灵活的模块化设计和优化的性能表现,实现了高并发处理能力、稳定性、低资源消耗等特点,成为Web服务器和反向代理服务器领域的重要选择。

Nginx为什么具有上述缺点

Nginx的缺点主要与其设计决策和特定功能的实现有关。以下是Nginx存在上述缺点的原因:

1. 学习曲线陡峭

原因

  • 配置复杂:尽管Nginx的配置文件语法简洁,但要充分利用其高级功能,用户需要掌握很多配置细节和高级用法。这对于新手来说,可能需要一定的学习时间。
  • 广泛的应用场景:Nginx可以用于多种应用场景(如Web服务器、反向代理、负载均衡等),每种应用场景都有其特定的配置和优化方式。

2. 动态内容处理

原因

  • 设计理念:Nginx最初设计的目标是高性能的静态内容服务和反向代理,而不是直接处理动态内容。处理动态内容的任务通常交给专门的应用服务器(如PHP-FPM、Unicorn等)。
  • 外部依赖:处理动态内容时,Nginx需要依赖外部的应用服务器,这增加了系统的复杂性和配置工作。

3. 第三方模块支持较少

原因

  • 开发社区和历史:虽然Nginx有很多第三方模块,但与Apache相比,其历史相对较短,模块生态系统不如Apache丰富。
  • 模块加载方式:Nginx不支持动态加载模块,所有模块必须在编译时编译进Nginx,这使得模块的安装和更新变得复杂。

4. 配置变更需要重载

原因

  • 进程模型:Nginx采用多进程模型,配置文件的变更需要通知主进程重新加载配置,并以无缝重启的方式应用新的配置。虽然Nginx的平滑重载机制已经尽量减少了服务中断时间,但仍然可能造成短暂的中断。
  • 设计权衡:为了保证配置变更的一致性和稳定性,Nginx选择了重载配置的方式,而不是在运行时动态应用配置变更。

总结

Nginx的缺点主要源自其设计决策和实现方式。这些缺点在一定程度上是高性能、稳定性和低资源消耗等优点的代价。用户在使用Nginx时,需要权衡这些优缺点,根据具体需求选择合适的工具和配置策略。例如,对于高性能和高并发需求的场景,Nginx是一个理想的选择,而对于需要直接处理动态内容的场景,可能需要配合其他应用服务器来使用。

Nginx工作流程

绘制Nginx工作流程的Mermaid图有助于理解其内部工作机制。以下是一个示例Mermaid图,展示了Nginx从接收请求到返回响应的工作流程:

静态文件
动态请求
客户端请求
监听端口
请求处理
是否缓存
从缓存读取响应
请求类型
读取静态文件
反向代理到后端服务器
后端服务器处理请求
后端服务器返回响应
存储响应到缓存
发送响应给客户端

这个图示详细说明了Nginx在接收到客户端请求后的处理流程:

  1. 客户端请求:客户端发出请求。
  2. 监听端口:Nginx监听特定端口(如80或443)接收请求。
  3. 请求处理:Nginx处理收到的请求。
  4. 是否缓存:检查请求的响应是否已缓存。
    • 如果是,直接从缓存读取响应。
    • 如果否,根据请求类型进行处理。
  5. 请求类型:检查请求是静态文件请求还是动态请求。
    • 静态文件请求:读取静态文件。
    • 动态请求:将请求反向代理到后端服务器。
  6. 后端服务器处理请求:后端服务器处理动态请求。
  7. 后端服务器返回响应:后端服务器返回处理结果。
  8. 存储响应到缓存:将响应存储到缓存中(如果配置了缓存)。
  9. 发送响应给客户端:将最终的响应发送回客户端。

你可以将这个Mermaid图粘贴到任何支持Mermaid图表的工具或Markdown编辑器中,生成可视化的Nginx工作流程图。

Nginx最佳实践

在生产环境中使用Nginx时,可以采用一些最佳实践配置来提高性能、安全性和稳定性。以下是一些常见的最佳实践配置示例:

1. 基础配置

配置文件结构

将配置文件分解为多个独立文件,便于管理和维护。例如,使用nginx.conf作为主配置文件,并将各个站点和模块的配置放在独立的文件中:

# /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

2. 反向代理和负载均衡

反向代理基本配置

使用反向代理将请求转发到后端服务器:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
负载均衡配置

定义多个后端服务器进行负载均衡:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
    }
}

3. SSL/TLS配置

基本HTTPS配置

启用HTTPS并使用强加密:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'HIGH:!aNULL:!MD5';

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}
强化SSL安全性

添加HTTP/2支持和更强的安全配置:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

4. 缓存配置

启用代理缓存

设置缓存路径和缓存规则:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 1h;
        proxy_cache_valid 404 1m;
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

5. Gzip压缩

启用Gzip压缩

减少传输内容大小,提高传输效率:

http {
    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

6. 安全配置

基础安全头

添加安全相关的HTTP头部:

server {
    listen 80;
    server_name example.com;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

7. 日志配置

自定义日志格式

定义并使用自定义的访问日志格式:

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

这些配置示例展示了一些Nginx在生产环境中的最佳实践,包括基本配置、反向代理、负载均衡、SSL/TLS、缓存、Gzip压缩、安全配置和日志配置。

还有一些其他的最佳实践配置,可以进一步优化Nginx在生产环境中的性能和安全性。

8. 限制请求速率

限制请求速率可以防止恶意用户发起大量请求,保护服务器资源:

http {
    # 定义请求速率限制区域
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

    server {
        listen 80;
        server_name example.com;

        location / {
            # 应用请求速率限制
            limit_req zone=one burst=20 nodelay;
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

9. 连接限制

限制每个IP地址的并发连接数,防止单个IP地址占用过多资源:

http {
    # 定义连接限制区域
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        listen 80;
        server_name example.com;

        location / {
            # 应用连接限制
            limit_conn addr 10;
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

10. 客户端超时设置

合理设置客户端请求和响应超时,避免长时间占用连接资源:

http {
    server {
        listen 80;
        server_name example.com;

        client_body_timeout 12;
        client_header_timeout 12;
        send_timeout 10;

        location / {
            proxy_pass http://backend;
            proxy_read_timeout 30;
            proxy_connect_timeout 30;
            proxy_send_timeout 30;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

11. 使用HTTP/2

启用HTTP/2可以提高性能,特别是在处理大量小文件时:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

12. 动态压缩和缓存

使用动态内容压缩和缓存来提高性能:

http {
    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_cache my_cache;
            proxy_cache_valid 200 1h;
            proxy_cache_valid 404 1m;
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

13. 防止热链接

防止其他网站直接链接你的静态资源,消耗带宽:

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }

    location ~ \.(jpg|jpeg|png|gif)$ {
        valid_referers none blocked example.com *.example.com;
        if ($invalid_referer) {
            return 403;
        }
    }
}

14. 日志分割

将错误日志和访问日志分开,便于问题排查和分析:

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

15. 监控和统计

使用第三方工具或模块,如Nginx Amplify、Datadog或VTS模块,进行性能监控和统计:

# Example using VTS module
http {
    vhost_traffic_status_zone;

    server {
        listen 80;
        server_name example.com;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }

        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

当然,还有一些更多的最佳实践配置可以进一步优化Nginx在生产环境中的性能、安全性和稳定性。以下是一些额外的最佳实践:

16. 防止DDoS攻击

限制每个IP的请求速率和连接数,以减缓或阻止DDoS攻击:

http {
    # 定义请求速率限制区域
    limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

    # 定义连接数限制区域
    limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;

    server {
        listen 80;
        server_name example.com;

        # 限制请求速率
        location / {
            limit_req zone=req_limit_per_ip burst=10 nodelay;
            limit_conn conn_limit_per_ip 10;
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

17. 使用资源限制

限制每个工作进程的资源使用,防止单个请求占用过多资源:

worker_rlimit_nofile 100000;  # 设置每个工作进程可以打开的最大文件数

http {
    # 其它配置...
    server {
        listen 80;
        server_name example.com;

        location / {
            # 可能的资源限制设置
            limit_conn addr 10;
            limit_req zone=req_limit_per_ip burst=10;
            proxy_pass http://backend;
        }
    }
}

18. 优化反向代理缓存

进一步优化反向代理缓存配置,提高缓存效率:

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
    proxy_cache_key "$scheme$request_method$host$request_uri";

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_cache my_cache;
            proxy_cache_valid 200 1h;
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout updating;
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

19. 管理静态资源

优化静态资源的缓存策略,减少服务器负担:

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        root /var/www/html;
        expires 30d;
        access_log off;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }
}

20. 启用页面压缩和优化

启用页面压缩以减少传输数据量,并优化页面加载速度:

http {
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # 启用压缩响应体
    gzip_static on;
    gzip_min_length 256;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

21. 使用IP黑名单

阻止特定IP地址或IP段访问服务器,增加安全性:

server {
    listen 80;
    server_name example.com;

    location / {
        deny 192.168.1.0/24;
        allow all;
        root /var/www/html;
        index index.html index.htm;
    }
}

22. 定期轮换和清理日志

配置日志轮换以防止日志文件过大,占用过多磁盘空间:

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /run/nginx.pid ]; then
            kill -USR1 `cat /run/nginx.pid`
        fi
    endscript
}

23. 资源负载均衡

使用upstream定义更复杂的负载均衡策略:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com weight=5;
    server backend3.example.com weight=1;
    keepalive 16;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

24. 设置默认页面

配置自定义的404错误页面,提升用户体验:

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }

    error_page 404 /404.html;
    location = /404.html {
        root /var/www/html;
        internal;
    }
}

25. 配置合理的文件上传限制

限制上传文件的大小,避免服务器资源被恶意占用:

server {
    listen 80;
    server_name example.com;

    client_max_body_size 10M;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

26. 配置 HTTP Strict Transport Security (HSTS)

HSTS 可以强制客户端使用 HTTPS 连接,增加安全性:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

27. 使用 Rate Limiting

对 API 或敏感资源使用速率限制,防止滥用:

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;

    server {
        listen 80;
        server_name example.com;

        location /api/ {
            limit_req zone=api_limit burst=10;
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

28. 配置 Fail2ban

将 Nginx 与 Fail2ban 集成,自动阻止恶意 IP:

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }

    # 记录拒绝访问的 IP 地址
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}

Fail2ban 配置示例

# /etc/fail2ban/jail.local
[nginx-http-auth]
enabled = true
port    = http,https
filter  = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3

[nginx-botsearch]
enabled = true
port    = http,https
filter  = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 5

29. 配置 Content Security Policy (CSP)

使用 CSP 防止 XSS 攻击:

server {
    listen 80;
    server_name example.com;

    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' https://trusted.cdn.com";

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

30. 启用 Connection Pooling

对后端服务器启用连接池,减少连接建立开销:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        keepalive 32;  # 启用连接池,保持32个长连接
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

31. 监控健康检查

设置自定义的健康检查,以确保后端服务器的可用性:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;

        keepalive 32;

        # 健康检查(需要第三方模块)
        health_check;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

32. 配置 WebSocket 支持

如果使用 WebSocket,确保配置支持 WebSocket 的代理:

server {
    listen 80;
    server_name example.com;

    location /ws/ {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

33. 启用 tcp_nodelaytcp_nopush

优化 TCP 传输设置,提高性能:

http {
    tcp_nopush on;
    tcp_nodelay on;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
}

34. 设置 worker_processesworker_connections

合理设置 worker_processesworker_connections,以匹配系统资源:

worker_processes auto;
worker_connections 1024;  # 根据服务器的负载和硬件资源调整

35. 配置 proxy_set_header 以确保正确的客户端 IP

确保正确传递客户端 IP 和原始请求头信息:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

36. 使用 try_files 指令处理文件请求

优化静态文件的处理,避免不必要的内部重定向:

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        try_files $uri $uri/ =404;
    }
}

37. 启用 rewrite_log 进行调试

启用重写日志帮助调试 URL 重写问题(仅在调试时启用):

http {
    rewrite_log on;
    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/html;
            try_files $uri $uri/ =404;
        }
    }
}

38. 配置 Nginx 与 CDN 集成

将请求转发到 CDN,提高静态资源的分发效率:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://cdn.example.com;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

39. 启用 Logging 轮转

使用 logrotate 配置定期轮转日志文件,保持日志文件的大小可控:

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        if [ -f /run/nginx.pid ]; then
            kill -USR1 `cat /run/nginx.pid`
        fi
    endscript
}

40. 配置 include 指令管理复杂配置

使用 include 指令将不同的配置分到不同的文件,保持主配置文件简洁:

# /etc/nginx/nginx.conf
http {
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

41. 配置 DNS 解析

确保 Nginx 能够快速和可靠地解析 DNS 名称,避免连接延迟:

http {
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 10s;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

42. 限制最大请求体大小

防止大请求体导致服务器资源被耗尽:

server {
    listen 80;
    server_name example.com;

    client_max_body_size 10M;  # 限制请求体最大为10MB

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

43. 实现 URL 重写

根据需要重写 URL,以适应应用程序的要求:

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/old_path/(.*)$ /new_path/$1 permanent;
        root /var/www/html;
        index index.html index.htm;
    }
}

44. 优化 fastcgi 配置

对于使用 FastCGI 的应用程序,优化 FastCGI 配置以提高性能:

server {
    listen 80;
    server_name example.com;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
    }
}

45. 使用 try_files 避免不必要的内部重定向

处理静态资源时使用 try_files 以避免不必要的内部重定向:

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        try_files $uri $uri/ =404;
    }
}

46. 配置 denyallow 访问控制

基于 IP 地址进行访问控制,限制对敏感资源的访问:

server {
    listen 80;
    server_name example.com;

    location /admin {
        deny all;
        allow 192.168.1.0/24;  # 允许特定 IP 范围访问
        root /var/www/html;
        index index.html index.htm;
    }
}

47. 使用 rewrite 优化 SEO

对 SEO 友好的 URL 进行重写,优化搜索引擎的爬取:

server {
    listen 80;
    server_name example.com;

    location / {
        rewrite ^/products/([0-9]+)$ /product.php?id=$1 last;
        root /var/www/html;
        index index.html index.htm;
    }
}

48. 启用 proxy_buffering

在使用反向代理时启用 proxy_buffering 来优化缓存和性能:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_buffering on;
        proxy_buffers 8 16k;
        proxy_buffer_size 32k;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

49. 配置 proxy_hide_header

隐藏或转发特定的 HTTP 响应头:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_hide_header X-Powered-By;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

50. 启用 ssl_prefer_server_ciphers

强制使用服务器端的加密套件,提高 SSL/TLS 安全性:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256';

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

51. 配置 http2alpn

启用 HTTP/2 和 ALPN(应用层协议协商)以提高 HTTPS 性能:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

52. 配置 access_log 的日志级别

根据需要调整访问日志的详细程度:

server {
    listen 80;
    server_name example.com;

    access_log /var/log/nginx/access.log main;  # 使用 main 日志格式
    error_log /var/log/nginx/error.log warn;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

53. 配置 proxy_max_temp_file_size

控制代理缓存的临时文件大小:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_max_temp_file_size 10m;  # 限制临时文件最大为10MB
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

54. 配置 http { 的默认值

http 配置块中设置一些默认值,以便适用于所有服务器块:

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log warn;

    # 其它 http 相关配置...
}

这些额外的最佳实践配置进一步增强了 Nginx 的性能、安全性和可维护性。通过根据具体的应用需求和环境特点,合理配置这些参数,可以显著提高 Nginx 服务器的稳定性、性能和安全性。

Nginx历史演进

最后,讲一下Nginx历史。Nginx的历史演进涵盖了其从最初版本到成为全球流行的高性能Web服务器和反向代理服务器的整个过程。以下是Nginx的主要历史演变阶段:

1. 初期开发(2002-2004)

  • 2002年: Igor Sysoev 开始开发 Nginx,最初目的是为了替代当时俄罗斯最大的新闻网站的现有Web服务器。Nginx的设计理念是为了高性能和高并发。

  • 2004年: Nginx的第一个正式版本发布。Nginx 0.1.0 版本发布,主要功能包括反向代理、负载均衡、支持FastCGI、AJP 以及HTTP、HTTPS协议。

2. 成熟阶段(2005-2008)

  • 2005年: Nginx 0.5.0 版本发布,引入了支持HTTP和HTTPS的反向代理功能,并开始支持更多的配置选项和模块。

  • 2007年: Nginx 0.6.0 版本发布,引入了对多个代理缓存的支持,以及对WebSocket的初步支持。

  • 2008年: Nginx 0.7.0 版本发布,增加了对IPv6的支持,并加入了负载均衡和流量控制等更多的功能。

3. 广泛应用阶段(2009-2013)

  • 2009年: Nginx 0.8.0 版本发布,增加了对SNI(Server Name Indication)的支持,使得多个SSL证书可以在同一IP上使用。

  • 2010年: Nginx 0.8.50 版本发布,Nginx开始支持HTTP/1.1,并进一步提升了性能和稳定性。

  • 2011年: Nginx 1.0.0 版本发布,标志着Nginx的正式稳定版的发布。这个版本引入了改进的性能特性和更多的模块,进一步推动了Nginx在生产环境中的使用。

  • 2012年: Nginx 1.2.0 版本发布,增加了对HTTP缓存的改进、改进了对SSL/TLS的支持,并引入了更多的负载均衡策略。

4. 快速发展阶段(2014-2018)

  • 2014年: Nginx 1.6.0 版本发布,增加了更多的模块,如动态模块的支持,以及增强了对HTTP/2的支持。

  • 2015年: Nginx 1.8.0 版本发布,包含了对更多HTTP/2特性的支持,如流量控制和头压缩。

  • 2016年: Nginx 1.10.0 版本发布,加入了更多的安全特性,包括改进的TLS支持。

  • 2017年: Nginx 1.12.0 版本发布,增强了对HTTP/2的支持,进一步改进了性能和安全性。

  • 2018年: Nginx 1.14.0 版本发布,增加了对更多缓存和压缩特性的支持,并改进了对动态模块的支持。

5. Nginx Plus 和商业化(2015-至今)

  • 2015年: Nginx Inc. 推出了 Nginx Plus,这是一个商业版本,提供了更多企业级的功能,如高级监控、负载均衡、以及技术支持等。

  • 2016年: Nginx Plus 1.11 版本发布,增加了对更多云环境的支持,包括AWS和Azure等。

  • 2019年: Nginx 1.16.0 版本发布,引入了更多的安全和性能优化,包括更好的HTTP/2支持和增强的负载均衡功能。

  • 2020年: Nginx 1.18.0 版本发布,进一步增强了对TLS 1.3的支持,并改进了对更多协议的兼容性。

  • 2021年: Nginx 1.20.0 版本发布,继续增强了性能、安全性,并引入了更多的功能,如改进的TLS协议支持和更多的动态模块支持。

6. 最新发展(2022-至今)

  • 2022年: Nginx 1.22.0 版本发布,进一步改进了性能,增加了更多对现代Web应用的支持,如更好的HTTP/3支持。

  • 2023年: Nginx 1.24.0 版本发布,继续增强对最新Web标准的支持,同时改进了容器化和微服务环境下的性能。

  • Nginx 3.0+: 未来版本将继续加强对云环境、微服务、以及现代Web应用的支持,提升性能和安全性。

主要里程碑总结

  1. 2004年: 首个正式版本发布。
  2. 2007年: 开始支持IPv6和更复杂的配置。
  3. 2011年: Nginx 1.0.0 发布,标志稳定版本的发布。
  4. 2015年: 推出 Nginx Plus,开始商业化。
  5. 2020年: 引入对最新TLS协议的支持。
  6. 2023年: 继续推进对最新Web标准的支持。

Nginx的历史演进展示了其从一个简单的高性能Web服务器逐步发展成一个功能强大、支持现代Web应用的综合解决方案的过程。随着技术的发展和用户需求的变化,Nginx继续在性能、安全性和功能性上不断改进和创新。

完。

一个秘密

希望对您有用!关注锅总,及时获得更多花里胡哨的运维实用操作!

图片

锅总个人博客

https://gentlewok.blog.csdn.net/

锅总微信公众号

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1877857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[OtterCTF 2018]Play Time

还是这个程序 。。要找到游戏名字查看 进程 psscan pstree pslist 0x000000007d686b30 Rick And Morty 3820 2728 0x000000000b59a000 2018-08-04 19:32:55 UTC0000 0x000000007d7cb740 LunarMS.exe 708 2728 0x00000000731cb000 2018-08-04 19:27:39 UTC0000…

安全架构概述_1.信息安全面临的威胁

在当今以计算机、网络和软件为载体的数字化服务几乎成为人类赖以生存的手段。与之而来的计算机犯罪呈现指数上升趋势,因此,信息的可用性、完整性、机密性、可控性和不可抵赖性等安全保障显得尤为重要,而满足这些诉求,离不开好的安…

【mysql的行记录格式】

记录头信息 除了变长字段长度列表、NULL值列表之外,还有一个用于描述记录的记录头信息,它是由固定的5个字节组成。5个字节也就是40个二进制位,不同的位代表不同的意思,如图: 记录的真实数据 对于record_format_demo表来…

操作系统期末复习考题二

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、前言🚀🚀🚀二、正文☀️☀️☀️三、总结🍓🍓🍓 一、前言🚀🚀&am…

算法-位运算基础

文章目录 前置知识1. 交换两个数2. 比较两个数的大小3. leetcode268 寻找缺失的数字4. leetcode136 只出现一次的数字5. leetcode260 只出现一次的数字|||6. leetcode137 只出现一次的数字||7. 2/3的幂8. 大于等于该数字的最小2的幂9. leetcode201 数字范围按位与10. 位运算中分…

JAVA笔试题目

1.标识符的使用 2.类名和java文件名的关系 3.java数据类型关系 4.循环体的考验 答案选择C,D的话需要在do前面加上loop:表示跳出当前循环体。 5.三元运算符的类型运算 6.局部变量的使用 这里需要注意的是c表示当前行代码还是使用原来的数值,下一行代码才…

fiddler抓包工具

概念 概念: Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。 http:不加密,端口为80 https:加密,端口为443 原理: 其实就在访问服务器时&#xff0…

005-GeoGebra基础篇-GeoGebra的矩形

上一篇关于点的介绍已经触及到了诸多GeoGebra的基础操作,这一篇我们根据画矩形,继续探索GeoGebra。 目录 一、最粗暴的方式绘制矩形1. 使用“Polygon”工具直接绘制2. 注意看代数列表3. 关于矩形和线段 二、用点和线段绘制矩形(1)…

CJSON库

目录 一、介绍 1、JSON是什么 2、为什么使用CJSON 3、JSON格式 二、使用CJSON构造JSON 1、创建对象 2、添加字段 3、转换格式 4、释放对象 三、使用CJSON解析JSON 1、解析数据 2、 获取字段 3、释放对象 一、介绍 1、JSON是什么 JSON是什么呢?JSON全称…

【Python3的内置函数和使用方法】

目录 Python 特点 Python 中文编码 Python 变量类型 Python列表 Python 元组 元组是另一个数据类型,类似于 List(列表) Python 字典 Python数据类型转换 Python 运算符 Python算术运算符 Python比较运算符 Python赋值运算符 Pyt…

clion ctrl+左键只能跳转到虚函数的声明处

右击函数 -> GOTO -> Definition 这样不够便捷,但是我没有找到更好的办法 可能是因为该函数是虚函数的重写,clion 无法识别出该函数是虚函数的哪个重写版,只能跳转到唯一的虚函数位置

FlowUs息流打造AI赋能下的知识库,信息深度挖掘与智能创作!FlowUs让你的数据资产更有价值

在AI时代的大潮中,FlowUs息流笔记类数据库凭借其强大的数据资产管理能力,正以前所未有的方式重塑着知识工作者的学习、研究与协作模式。当深厚的数据资产遇上AI的智能助力,无论是学术论文的撰写,还是高效提炼多人会议的核心观点&a…

Summaries

摘要是网格项,它利用聚合函数来显示有关所显示数据的摘要信息:总记录计数、最小值等。 GridControl-Grid View Summary Types 汇总 汇总总数(GridSummaryItem)是根据所有数据网格记录计算的,并显示在视图页脚中。启…

一文讲透大模型 Qwen2 的训练与推理

通义千问最近问鼎开源模型Top 1 ,今天我来分享一下Qwen2系列模型,Qwen2系列模型是Qwen1.5系列模型的重大升级。包括了: 5个尺⼨的预训练和指令微调模型, 包括Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B以及Qwen2-72B; 在…

如何解决java程序CPU负载过高问题

1、介绍 在生产环境中,有时会遇到cpu占用过高且一直下不去的场景。这种情况可能会导致服务器宕机,进而中断对外服务,也会影响硬件寿命。 2、原因 1、Java代码存在因递归不当等原因导致的死循环的问题,推荐有条件的循环&#xf…

一个项目学习IOS开发---创建一个IOS开发项目

前提: 由于IOS开发只能在MacOS上开发,所以黑苹果或者购买一台MacBook Pro是每个IOS开发者必备的技能或者工具之一 Swift开发工具一般使用MacOS提供的Xcode开发工具 首先Mac Store下载Xcode工具 安装之后打开会提醒你安装IOS的SDK,安装好之…

统计信号处理基础 习题解答11-12

题目 证明 的MAP估计量为 其中是一个的矢量, 是一个可逆的p*p的矩阵。也就是说,MAP估计量对可逆的线性变换是可以变换的。 解答 已知的联合概率密度 且: 现在知道: 那么为了获得变换后的MAP,首先需要根据求出 根据概率密度变换…

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn

【图解大数据技术】Hadoop、HDFS、MapReduce、Yarn HadoopHDFSHDFS架构写文件流程读文件流程 MapReduceMapReduce简介MapReduce整体流程 Yarn Hadoop Hadoop是Apache开源的分布式大数据存储与计算框架,由HDFS、MapReduce、Yarn三部分组成。广义上的Hadoop其实是指H…

Linux中彩色打印

看之前关注下公众号呗 第1部分:引言 1.1 Python在文本处理中的重要性 Python作为一种广泛使用的高级编程语言,以其简洁的语法和强大的功能在文本处理领域占有一席之地。无论是数据清洗、自动化脚本编写,还是复杂的文本分析,Py…

不可编辑的加密word文件破解

文章目录 1 将word文件另存为xml格式2 使用记事本打开xml格式的word文件3 ctrlF查找w:enforcement4 将w:enforcement"1"改成w:enforcement"0"并保存5 用word打开xml格式的文件并另存为docx格式6 成功可以编辑 1 将word文件另存为xml格式 2 使用记事本打开x…