博客
关于我
Nginx 知识点一网打尽:动静分离、压缩、缓存、跨域、高可用、性能优化...
阅读量:791 次
发布时间:2023-02-15

本文共 4314 字,大约阅读时间需要 14 分钟。

Nginx 深入配置与性能优化指南

作为现代应用服务器中的领先选择,Nginx 在高性能、轻量级代理、负载均衡等方面具有卓越的优势。本文将深入探讨 Nginx 的核心配置与优化方法,帮助开发者充分发挥其潜力。


一、性能怪兽:Nginx 的核心概念

Nginx 不仅是一个 HTTP 反向代理服务器,更是一个通用协议代理解决方案,支持 TCP、UDP、SMTP、HTTPS 等多种协议。它基于多路复用模型(epoll),在理论上可支持数万级并发连接,实战中经过调优也能达到这一水平。

Nginx 的核心优势在于其高效的请求处理流程:

  • 客户端请求:直接发送到 Nginx。
  • Nginx 分发:根据配置将请求转发至目标服务器。
  • 响应处理:Nginx 接收目标服务器的响应,并将最终结果返回客户端。
  • 通过引入 Nginx,团队可以实现高可用、负载均衡、动静分离等功能,有效应对业务增长带来的性能挑战。


    二、Nginx 环境搭建

    1. 安装准备

  • 创建安装目录

    mkdir /soft/nginxcd /soft/nginx
  • 下载安装包

    wget https://nginx.org/download/nginx-1.21.6.tar.gz
  • 安装依赖库

    yum install gcc zlib openssl pcre pcre-devel
  • 编译安装

    cd nginx-1.21.6./configure --prefix=/soft/nginxmake install
  • 配置文件

    vi conf/nginx.conf

    示例配置:

    listen 80;server_name 192.168.0.1;root /soft/nginx/html;index index.html index.ftl;
  • 启动服务

    sbin/nginx -c conf/nginx.conf

  • 三、Nginx 负载均衡配置

    1. 权重分发

    upstream nginx_boot {    server 192.168.0.1:8080 weight=100 max_fails=2 fail_timeout=30s;    server 192.168.0.2:8090 weight=200 max_fails=2 fail_timeout=30s;}server {    listen 80;    location / {        proxy_pass http://nginx_boot;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}

    2. 负载均衡效果

    通过权重配置,请求会按 2:1 分配到 8080 和 8090。这意味着每个请求都会轮流打破重量平衡。


    四、动静分离

    1. 背景问题

    静态资源占用了后端服务器的大量请求,导致性能瓶颈。例如,淘宝首页可能有数百个静态资源请求。

    2. 实现方法

  • 创建静态资源目录

    mkdir /soft/nginx/static_resources
  • 配置 Nginx

    location ~ .(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css) {    root /soft/nginx/static_resources;    expires 7d;}
  • 效果展示

  • 静态资源通过 Nginx 直接服务,减少了后端负载,提升了性能表现。


    五、资源压缩

    1. 模块配置

    Nginx 提供 ngx_http_gzip_module 等模块,支持动态资源压缩。

    2. 配置示例

    http {    gzip on;    gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;    gzip_comp_level 5;    gzip_vary on;    gzip_buffers 16 8k;    gzip_disable "MSIE [1-6].";}

    3. 压缩效果

    压缩后,静态资源文件大小大幅减少,带宽消耗降低。


    六、缓冲区配置

    1. 参数说明

    • proxy_buffering:默认启用。
    • proxy_buffers:默认 4 4k/8k。
    • proxy_temp_path:临时缓冲目录,防止内存不足。

    2. 示例配置

    http {    proxy_connect_timeout 10;    proxy_read_timeout 120;    proxy_send_timeout 10;    proxy_buffering on;    client_body_buffer_size 512k;    proxy_buffers 4 64k;    proxy_buffer_size 16k;    proxy_busy_buffers_size 128k;    proxy_temp_path /soft/nginx/temp_buffer;}

    七、缓存机制

    1. 配置项说明

    • proxy_cache_path:指定缓存目录和层次结构。
    • proxy_cache:开启或关闭缓存。
    • proxy_cache_valid:设置有效状态码和过期时间。

    2. 示例配置

    proxy_cache_path /soft/nginx/cache levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g;server {    location / {        proxy_cache hot_cache;        proxy_cache_valid 200 302 1d;        proxy_cache_valid any 30m;        proxy_cache_key $host$uri$is_args$args;        proxy_cache_min_uses 3;        proxy_cache_lock on;        proxy_cache_lock_timeout 3s;        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;        add_header Cache-status $upstream_cache_status;    }}

    八、IP 黑白名单

    1. 配置方法

    allow 127.0.0.1;deny all;include /soft/nginx/IP/BlocksIP.conf;

    2. 实现效果

    通过 allowdeny 指令,灵活控制访问权限。


    九、跨域配置

    1. 解决方案

    location / {    add_header Access-Control-Allow-Origin *;    add_header Access-Control-Allow-Methods GET,POST,OPTIONS,PUT;    add_header Access-Control-Allow-Headers *;    add_header Access-Control-Expose-Headers Content-Length,Content-Range;    if ($request_method == OPTIONS) {        add_header Access-Control-Max-Age 1728000;        return 204;    }}

    2. 注意事项

    跨域问题需结合后端逻辑,通常通过 WebMvcConfigurer 实现接口间的跨域配置。


    十、防盗链设计

    1. 配置示例

    valid_referers blocked server_names string;location ~ .(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css) {    valid_referers blocked 192.168.12.129;    if ($invalid_referer) {        rewrite ^/ https://example.com/NO.jpg;        return 403;    }    root /soft/nginx/static_resources;    expires 7d;}

    2. 防盗链逻辑

    通过 Referer 头部字段判断请求来源,防止外部网站盗用资源。


    十一、大文件传输

    1. 配置示例

    client_max_body_size 10m;client_header_timeout 10;proxy_read_timeout 120;proxy_send_timeout 10;

    2. 注意事项

    建议结合第三方模块 nginx-upload-module 实现大文件上传。


    十二、SSL 证书配置

    1. 证书准备

    下载 CA 提交的证书文件:.crt, .key, .pem

    2. Nginx 配置

    server {    listen 443;    server_name www.example.com;    ssl on;    ssl_certificate /soft/nginx/certificate/xxx.pem;    ssl_certificate_key /soft/nginx/certificate/xxx.key;    ssl_session_timeout 5m;    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    ssl_pre

    转载地址:http://zmcfk.baihongyu.com/

    你可能感兴趣的文章