我是靠谱客的博主 辛勤鼠标,最近开发中收集的这篇文章主要介绍Nginx通用配置--日志,https访问,强制跳转https,gzip压缩,前后端分离等一、JSON格式access日志配置二、强制跳转https三、https监听四、gzip压缩五、前后端分离location,proxy_pass配置六、上传文件大小限制配置client_max_body_size七、修改响应内容八、隐藏Nginx版本号九、使用if判断,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、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

最后

以上就是辛勤鼠标为你收集整理的Nginx通用配置--日志,https访问,强制跳转https,gzip压缩,前后端分离等一、JSON格式access日志配置二、强制跳转https三、https监听四、gzip压缩五、前后端分离location,proxy_pass配置六、上传文件大小限制配置client_max_body_size七、修改响应内容八、隐藏Nginx版本号九、使用if判断的全部内容,希望文章能够帮你解决Nginx通用配置--日志,https访问,强制跳转https,gzip压缩,前后端分离等一、JSON格式access日志配置二、强制跳转https三、https监听四、gzip压缩五、前后端分离location,proxy_pass配置六、上传文件大小限制配置client_max_body_size七、修改响应内容八、隐藏Nginx版本号九、使用if判断所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部