Nginx 相关知识点和配置

全局变量

  • $http_x_forwarded_for

    用来记录 ip 地址, 区别代理服务器

  • $remote_user

    用来记录远程客户端用户名称

  • $time_local

    用来记录访问时间和时区

  • $request

    用来记录请求的URL 与 HTTP 协议

  • $status

    用于记录请求的状态, 例如成功时状态为 200, 页面找不到时 404

  • $body_bytes_send

    用于记录发送给客户端的文件主体内容大小

  • $http_referer

    用来记录是从那个页面链接访问过来的

  • $http_user_agent

    用于记录客户端浏览器的相关信息

  • query_string

    此变量与请求行中的参数相等

  • $content_length

    请求行中的 - Content-Type

  • $remote_addr

    客户端 ip

  • $remote_port

    客户端 port

  • $request_filename

    当前请求的文件的路径名,由root或alias和URI request组合而成

  • $limit_rate

    允许限制的连接速率

  • $request_uri

    含有参数的完整的初始URI

  • $uri

    等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index

Nginx 设置反向代理

  location ^~ /api/ {
      proxy_pass        http://127.0.0.1:7071;
      proxy_redirect off;
      # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
      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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  }

前端使用 nginx 部署 React Spa (Browser History) 的特殊配置

  location / {
    root: path;
    index: index.html;
    try_files try_files $uri /index.html;
  }

nginx 配置 https 和 开启 h2

  server {
    listen     443 ssl http2;
    server_name  106.53.94.167;
    root   /home/ubuntu/workspace/mpa-dance-admin/dist;

    charset utf-8;

    ssl_certificate             hxedu.top.crt;
    ssl_certificate_key         hxedu.top.key;
    ssl_session_cache           shared:SSL:1m;
    ssl_session_timeout         5m;
    ssl_protocols               SSLv2 SSLv3 TLSv1.2;
    ssl_ciphers                 ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers   on;
    location / {
      
    }
  }

nginx 开启 gzip

  ##
  # Gzip Settings
  ##
  gzip on;
  gzip_vary on;
  gzip_min_length 1k;
  # gzip_proxied any;
  gzip_comp_level 2;
  # gzip_buffers 16 8k;
  # gzip_http_version 1.1;
  gzip_types text/csv text/xml text/css text/plain text/javascript application/javascript application/x-javascript application/json application/xml;

nginx 日志配置

可以给每一个 HTTP, Server, Location 定义一个日志

  • open_log_file_cache

    对于每一条日志记录, 日志文件都将先打开文件, 再写入日志记录, 然后马上关闭, 为了提高包含的日志变量的日志文件存放路径的性能, 可以使用 - open_log_file_cache 指令来设置; 格式如下

    open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off

    • off
    • max: 设置缓存中的最大文件描述符数量
    • inactive: 设置一个时间, 如果在设置的时间内没有使用此文件描述符, 则自动删除此描述符
    • min_uses: 在参数 inactive 指定的时间范围内, 如果日志文件超过被使用的次数, 则该日志文件的描述符计入缓存, 默认为 10s
    • valid: 设置多长时间检查一次, 看日志文件路径与文件名是否任然存在, 默认是 60s

    eg: open_log_file_cache max=1000 inactive=20s min_users=2 valid=1m

  • log_format

      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 访问日志

Nginx 的浏览器本地缓存设置

http {......} 中间配置, 启动压缩

  location ~ .*\.(gif|jpg|png)$ {
    expires 30d
  }

Nginx 设置限速 limit_rate

  • 限制IP的连接和并发 http {} 作用域配置

    • limit_req_zone 用来限制单位时间内的请求数
    • limit_req_conn 用来限制同一时间连接数
  location /download {
    limit_rate 256k;
    proxy_pass http://1.2.3.4
  }

  location /movie {
    limit_rate_after 10m;
    limit_rate 100k;
    if ($http_user_agent ~ Google|baidu) {
      limit_rate 20k;
    }
  }

你可能感兴趣的:(Nginx 相关知识点和配置)