IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Nginx通用配置--日志,https访问,强制跳转https,gzip压缩,前后端分离等 -> 正文阅读

[网络协议]Nginx通用配置--日志,https访问,强制跳转https,gzip压缩,前后端分离等

目录

一、JSON格式access日志配置

二、强制跳转https

三、https监听

四、gzip压缩

五、前后端分离location,proxy_pass配置

1.重写url,去除api使其直接访问后端。(前后端分离)

2.更改访问后端的api接口版本


一、JSON格式access日志配置

  # 全局配置先配置日志格式
  log_format  json_log escape=json '{
    "timestamp":"$time_local",
    "client_ip":"$remote_addr",
    "request":"$request",
    "status":"$status",
    "body_bytes_sent":"$body_bytes_sent",
    "http_referer":"$http_referer",
    "user_agent":"$http_user_agent",
    "http_x_forwarded_for":"$http_x_forwarded_for",
    "domain":"$host"
}';

# 不通虚拟主机上配置acces日志记录
access_log logs/xxx_com_access.log json_log;

配置项目说明:

json格式在后续处理分析日志比较友好,用的都是Nginx内置的变量做一些记录。

二、强制跳转https

# 根据访问的协议强制跳转
if ($scheme = 'http'){
rewrite ^/(.*)$	https://$host/$1 redirect;
}
# 根据访问的端口进行强制跳转
if ($server_port = 80) {
    rewrite ^(.*)$ https://$host$1 permanent;
}

三、https监听

# https默认监听是443端口,需增加443端口监听
listen 443 ssl;
# TLSv1.2 TLSv1.3比较安全
ssl_protocols        TLSv1.2 TLSv1.3;
ssl_certificate      ssl/xxx.pem; #公钥证书路径,
ssl_certificate_key  ssl/xxx.key; #私钥证书路径
ssl_session_cache    shared:SSL:10m;
ssl_session_timeout  10m;
# 下面这个选项配置是火狐ssl配置生成器生成的主流加密套件适配
ssl_ciphers            ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers  on;

部分配置项说明:

ssl_session_cache :官方的翻译大意如下

Syntax:ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
默认:
ssl_session_cache none;
Context:http, server
设置存储session参数的缓存的类型和大小。缓存可以是以下任何一种类型:
off
严禁使用session缓存:nginx明确告诉客户端session可能不会被重用。
none
session缓存的使用被禁止:nginx告诉客户端session可能会被重用,但实际上并不会将session参数存储在缓存中。
builtin
在OpenSSL中构建的缓存;仅由一个工作进程使用。缓存大小在session中指定。如果没有给出大小,则等于20480个会话。使用内置高速缓存可能导致内存碎片。
shared
所有工作进程之间共享缓存。缓存大小以字节为单位指定;一兆字节可以存储大约4000个session。每个共享缓存都应该有一个任意名称。具有相同名称的缓存可以用于多个虚拟服务器。
两种类型的缓存可以同时使用:配置案例:
ssl_session_cache builtin:1000 shared:SSL:10m;
但是只使用shared缓存,而不使用built-in缓存性能应该会更高。


ssl_session_timeout :官方翻译大意如下

指定客户端可以重用会话参数的时间,这个值设置还是需要根据实际来进行判断。按照官方1m缓存可以存储4000会话,如果设置的会话超时时间太长可能导致太多https连接后缓存越来越大,影响系统性能。

因为https连接在3次tcp握手的前提下还会增加加密套件的协商握手,所以这个两个的配置设置不同的参数值通过重用Session可以优化Nginx在https连接下的性能。

四、gzip压缩

gzip  on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_types       text/plain application/javascript text/css;
gzip_vary on;
#gzip_buffer 4 16k;
#gzip_disable regex
#gzip_http_version 1.1;
#gzip_proxied

配置项说明:

前端使用MD5校验的可能会导致网页无法正常显示

gzip_on:

是否开启gzip压缩,默认为off。

gzip_min_length:

gzip对于小文件压缩,有时会出现越压越大的情况。gzip使用的LZ77算法对于较多重复冗余内容的文件有着较好的压缩效果。该配置表示弃用gzip压缩的最小文件大小。该指令设置页面的字节数,当响应页面的大小大于该值时,才启用Gzip功能。响应页面的大小通过HTTP响应头部中的Content-Length指令获取,但是如果使用了Chunk编码动态压缩, Content-Length或不存在或被忽略,该指令不起作用。

gzip_buffer:

nginx进行gzip压缩时向系统申请的缓存空间,值为number size 默认为number*size==128k

gzip_comp_level:

该指令用于设定Gzip压缩等级,包括级别1到级别9。级别1表示压缩程度最低,压缩效率最高;级别9表示压缩程度最高,压缩效率最低,最费时间。

gzip_disable:

对于匹配到正则的客户端设备不使用gzip,一般匹配客户端UA,类似于Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0,可以使用正则进行匹配。

gzip_http_version:

设置gzip使用时候的最低http协议版本,gzip_http_version 1.1表示只有http协议在1.1及以上时才会进行gzip压缩

gzip_types:

Nginx服务器可以根据响应页的MIME类型选择性地开启Gzip压缩功能。该指令用来设置MIME类型,被设置的类型将被压缩。

gzip_vary:

该指令用于设置在使用Gzip功能时是否发送带有“Vary: Accept-Encoding”头域的响应头部。该头域的主要功能是告诉接收方发送的数据经过了压缩处理。开启后的效果是在响应头部添加了Accept-Encoding: gzip,这对于本身不支持Gzip压缩的客户端浏览器是有用的。

gzip_proxied:

对反向代理的后端服务器返回的响应是否进行gzip,默认为off

五、前后端分离location,proxy_pass配置

两个重要的点:

??????? pass_proxy中的斜杠/只需要看做是一个字符,连接起来就行

????????在pass_proxy中出现斜杠/,pass_proxy的配置值均会覆盖location匹配到的部分,不会保留匹配部分

1.重写url,去除api使其直接访问后端。(前后端分离)

xxx.com/api/web/hello => xxx.com/web/hello

location ^~ /api/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 重写url,去除api使访问后端的url
        # xxx.com/api/web/hello => xxx.com/web/hello
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://backendapi;
}

2.更改访问后端的api接口版本

xxx.com/v2/web/post/article1 => xxx.com/v1/web/post/article1

location ^~ /v2/ {
        ...
        rewrite ^/v2/(.*)$ /v1/$1 break;
        proxy_pass http://127.0.0.1:8080;
}

六、上传文件大小限制配置client_max_body_size

#large_client_header_buffers 4 16k;
#client_body_buffer_size 128k;
client_max_body_size 20m;  # 默认是只有1m,通过nginx上传大于1m的文件就会失败

文件太大的话会有413报错,后端也要相应的进行body大小的限制解除,springboot的会有一个servlet的块下有个这个设置

  servlet:
    multipart:
      enabled: true #是否启用http上传处理
      max-file-size: 512MB
      max-request-size: 512MB 

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:35:32  更:2021-12-06 15:36:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 8:04:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码