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

目录

一、JSON格式access日志配置

二、强制跳转https

三、https监听

四、gzip压缩

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

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

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

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

七、修改响应内容

八、隐藏Nginx版本号

九、使用if判断

1.利用cdn添加自定义请求头进行回源控制

2.关闭swagger等接口文档访问


一、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内置的变量做一些记录。

普通格式,会一行一行插入,对于使用grep等操作比较友好

二、强制跳转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 

七、修改响应内容

Nginx的过滤模块ngx_http_sub_module可以解决这个问题。它是Nginx的内置模块,可以用来修改响应内容的数据。该模块默认未被激活,如果要激活的话,只需在编译Nginx时添加--with-http_sub_module即可。openresty默认编译此模块。

前端访后端接口配置错误时候,可以用此方法暂时修改

#替换字符
sub_filter lizhejie replacement;
#替换字符的文件类型
sub_filter_types *;
location / {
    root /usr/share/nginx/html/init;
    sub_filter_types *;
    sub_filter "http://aaa.com/api" "https://bbb.com/api";
}

 此时响应的js文件内有"http://aaa.com/api" 的会全部被改成"https://bbb.com/api"

八、隐藏Nginx版本号

# http配置块中增加如下配置文件

server_tokens off;

九、使用if判断

1.利用cdn添加自定义请求头进行回源控制

if ($http_iscdn != 'yes') {
    return 404;
}

如果回源请求中无iscdn或者无该请求头的头则返回404

2.关闭swagger等接口文档访问

if ($request_uri ~ doc.html ){
    return 404;
}

"~"代表匹配正则表达式过程中区分大小写

"~*"代表匹配正则表达式过程中不区分大小写

"!~"和"!~*"刚好和上面取相反值,如果匹配上返回false,匹配不上返回true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值