首页 > 系统相关 >【反向代理】超全Nginx原理+实战篇

【反向代理】超全Nginx原理+实战篇

时间:2023-01-19 11:33:52浏览次数:35  
标签:实战篇 http 超全 nginx server Nginx location 服务器


文章目录

  • ​​1.Nginx简介和安装部署​​
  • ​​1.1.什么是Nginx​​
  • ​​1.2.Nginx的用途​​
  • ​​1.3.正向代理服务器​​
  • ​​1.4.反向代理服务器​​
  • ​​1.5.nginx安装部署​​
  • ​​1.6.线上访问服务器应用流程解析​​
  • ​​1.7.本地虚拟机配置宿主机域名映射​​
  • ​​2.Nginx核心基础知识​​
  • ​​2.1.Nginx目录结构​​
  • ​​2.2.Nginx核心配置文件​​
  • ​​2.3.Nginx搭建前端静态服务器​​
  • ​​2.4.Nginx搭建图片服务器​​
  • ​​3.Nginx挖掘accessLog日志​​
  • ​​3.1.Nginx访问日志简介​​
  • ​​3.2.Nginx统计站点访问量​​
  • ​​4.Nginx负载均衡策略​​
  • ​​4.1.负载均衡简介​​
  • ​​4.2.负载均衡的种类​​
  • ​​4.3.upstream负载均衡配置​​
  • ​​4.4.Nginx负载均衡策略​​
  • ​​4.5.Nginx后端节点可用性探测配置​​
  • ​​5.Nginx经典应用​​
  • ​​5.1.Nginx全局异常兜底数据返回​​
  • ​​5.2.Nginx封禁恶意IP​​
  • ​​5.3Nginx配置浏览器跨域​​
  • ​​5.4.Nginx的location路径匹配规则​​
  • ​​5.5.Nginx的rewrite重定向规则​​
  • ​​5.6.Nginx配置Websocket反向代理​​
  • ​​5.7.Nginx静态资源压缩​​
  • ​​5.8.Nginx业务接口性能优化​​
  • ​​7.Nginx配置HTTPS协议​​
  • ​​7.1.新一代传输协议https​​
  • ​​7.2.HTTPS传输流程​​
  • ​​7.3.阿里云HTTPS证书申请​​
  • ​​7.4.Nginx配置HTTPS证书​​
  • ​​8.Nginx整合OpenResty+Lua脚本​​
  • ​​8.1.OpenResty+Lua简介​​
  • ​​8.2.Nginx+OpenResty简单案例​​
  • ​​8.3.Nginx内置变量​​
  • ​​8.4.开发内网访问限制​​
  • ​​8.5.开发资源下载限速​​
  • ​​8.6.漏桶算法和令牌桶算法​​
  • ​​9.Nginx高可用LVS+Keepalived​​
  • ​​9.1.LVS+Keepalived架构​​
  • ​​9.2.什么是LVS​​
  • ​​9.3.什么是keepalived​​
  • ​​9.4.keepalived安装​​
  • ​​9.5.keepalived.conf核心配置​​
  • ​​9.6.启动keeplived验证​​
  • ​​10.Nginx基础架构模型剖析​​

1.Nginx简介和安装部署

1.1.什么是Nginx

  • 高性能的[HTTP]和反向代理的web服务器,用c语言编写,高性能支持单机千万级连接,强大的第三方库支持,负载均衡、静态文件服务器等。

1.2.Nginx的用途

  • 搭建前端静态资源服务器、文件服务器
  • 负载均衡Upstream配置实战、后端节点高可用性探测、全局异常兜底数据配置
  • Nginx封禁恶意IP、配置跨域、location和rewrite实战
  • Websocket配置、后端业务数据缓存前置、静态资源压缩
  • 阿里云ESC部署配置HTTPS证书
  • Nginx整合Openresty开发内网访问限制、文件资源下载限速实现原理
  • LVS+KeepAlived高可用配置

1.3.正向代理服务器

  • 客户端和目标服务器之间的服务器,客户端想代理发送一个请求指定目标服务器,然后代理向目标服务器请求并获得内容,并返回给客户端,平时说的代理服务器一般是正向代理服务器。
  • 核心:用户知道自己要访问的目标服务器
  • 场景:跳板机,访问原来无妨访问的网站

【反向代理】超全Nginx原理+实战篇_Nginx

1.4.反向代理服务器

  • 客户端和目标服务器之间的服务器,客户端向代理发送一个请求,然后代理向目标服务器请求并获得内容,并返回给客户端。反向代理隐藏了真是的服务器。
  • 核心:客户端不知道要访问的目标服务器是哪台服务器,代理会根据一定的策略选择一个真是的服务器进行请求。
  • 场景:域名映射

【反向代理】超全Nginx原理+实战篇_Nginx_02

1.5.nginx安装部署

  • 安装依赖
  • yum -y install gcc zlib zlib-devel pcre-devel opensslopenssl-devel
  • 解压nginx.tar.gz压缩包
  • tar -xvf nginx-1.18.0.tar.gz
  • 执行命令
  • ./configure --prefix=/usr/local/nginx && make && make install
  • 阿里云开放网络安全组或者虚拟机开发80端口firewall-cmd --permanent --add-port=80/tcp
  • 启动nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

【反向代理】超全Nginx原理+实战篇_nginx_03

1.6.线上访问服务器应用流程解析

  • 一个http请求基本流程
  • 客户端通过发起域名资源请求->DNS解析获取IP->寻找服务器获取资源
  • 域名和IP的关系,DNS作用
  • DNS:Domain Name Server域名服务器,域名虽然便于人们记忆,但网络中的计算机只能通过IP相互通信,他们之间的转换共做成为域名解析,域名解析需要由专门的与专门解析服务器完成,DNS就是进行域名解析的服务器。
  • 什么是a记录和cname
  • a记录
  • 用户可以在此设置域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器(lixiang.com->192.168.10.103)
  • cname
  • 别名指向,可以为一个主机设置别名。比如设置lixiang123.com,用来指向lixiang.com那么以后就可以用lixiang123.com代替lixiang.com来访问,相当于多了一条通道。

1.7.本地虚拟机配置宿主机域名映射

  • C:\Windows\System32\drivers\etc
  • 修改hosts文件

2.Nginx核心基础知识

2.1.Nginx目录结构

(1)源码安装指定安装路径

  • /usr/local/nginx

(2)目录核心介绍

【反向代理】超全Nginx原理+实战篇_Nginx_04

conf #所有配置文件的目录
nginx.conf #默认的主要配置文件
nginx.conf.default #默认模板

html #这是编译安装时Nginx的默认站点目录
50x.html #错误页面
index.html #默认首页

logs #nginx默认的日志路径,包括错误日志以及访问日志
error.log #错误日志
nginx.pid #nginx启动后的进程id
access.log #nginx访问日志

sbin #nginx命令目录
nginx #启动命令

(3)常见命令

./nginx #默认配置文件启动

./nginx -s reload #重启,加载默认的配置文件,conf/nginx.conf

./nginx -s stop #停止nginx

./nginx -c /usr/local/nginx/conf/nginx.conf #指定配置文件启动

#nginx进程有master process和worker process,关闭master进程即可,其他都被关掉

2.2.Nginx核心配置文件

  • 全局配置
  • server主机配置
  • location(URL匹配特定位置的设置)
#每个配置项有配置指令和指令参数够成 nginx配置文件全部用的相对路径
#user nobody; #指定nginx用户组

worker_processes 1; #指定worker process进程的数量

#error_log logs/error.log; #错误日志存放的路径
#error_log logs/error.log notice; #告警日志
#error_log logs/rttor/log info; #平常日志

#pid logs/nginx.pid #nginx进程的启动PID

#事件模块指令,用来指定Nginx的IO模型,Nginx支持的所有select、poll、kqueue、epoll等
#不同的是epoll用在linux平台上,而kqueue用在BSD系统上
events{
use epoll;
#指定每个worker进程的最大连接数,作为服务器来说,最大连接数为worker_connections * worker_processes
#作为反向代理来说,最大连接数为worker_connections * worker_processes / 2
worker_connections 1024;
}
#HTTP模块
http{
#资源的媒体类型
include mime.types;

#默认为下载,浏览器访问到未定义的扩展名的时候,就默认为下载该文件
default_type application/octet-stream;

#自定义服务日志
#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日志,main 日志定义的格式
#access_log logs/access/log main;

#是否开启高效传输模式 on开启,off关闭
sendfile on;

#减少网络报文段的数量
#tcp_nopush on;

#客户端连接保持活动的超时时间,超过这个时间服务器会自动关闭
keepalive_timeout 65;

#是否开启压缩
#gzip on;

#虚拟主机配置
server {
#虚拟主机的服务端口
listen 80;

#用来指定IP地址和域名,可以有多个用空格分开
server_name localhost;

#charset koi8-r;

#access_log日志,main 日志定义的格式
#access_log logs/host.access.log main;

#URL地址配置
location /{
#服务默认启动目录
root html;

#默认访问文件,按照顺序找
index index.html;
}

#URL地址配置
location ~ \.php${
#反向代理的地址
proxy_pass http://127.0.0.1;
}
}

server {
....
}
}

2.3.Nginx搭建前端静态服务器

(1)什么是虚拟主机

  • 指在一台物理主机上划分出多个磁盘空间,每个磁盘空间都是有一个虚拟主机,每台虚拟主机都可以对外提供Web服务,并且互不干扰,类似虚拟机
  • 利用虚拟主机把多个不同域名的网站部署在同一台服务器上,节省了服务器硬件成本和相关的维护费用

【反向代理】超全Nginx原理+实战篇_https_05

(2)Nginx虚拟主机配置

#use nobody;
worker_processes 1;

events{
use epoll;
worker_connections 1024;
}
http{
server{
listen 80; #监听的端口
server_name www.nginx.com #请求的域名
location /{
root /usr/local/software/nginx/html #目录
index index.html #跳转的页面
}
}

server{
listen 80;
server_name www.lixiang.com #请求的域名
location /{
root /usr/local/software/nginx/html #目录
index lixiang.html
}
}
}

重启nginx : ./nginx -s reload

【反向代理】超全Nginx原理+实战篇_服务器_06

2.4.Nginx搭建图片服务器

(1)图片服务器

  • 学javaweb、node、或者其他基础web项目,基本都是图片上传到项目本身,这个是很少用的
  • 公司一般都会使用图片服务器或者云厂商提供CDN

(2)访问流程:前端提交图片->后端处理->存储到数据库->拼接好访问路径保存到数据库,存储到文件服务器

【反向代理】超全Nginx原理+实战篇_Nginx_07

(3)配置虚拟主机

server { 
listen 80;
server_name www.lixiang.com;
location /app/img/ {
alias /usr/local/software/nginx/img/;
}
}

【反向代理】超全Nginx原理+实战篇_服务器_08

注意:

  • 在location / 中配置root目录
  • 在location /path中配置alias虚拟目录,目录后面“/”符号一定要带上

3.Nginx挖掘accessLog日志

3.1.Nginx访问日志简介

(1)access.log日志用处

  • 统计站点访问IP来源、某个时间段的访问频率
  • 查看访问最频的页面、Http响应状态码、接口性能
  • 接口秒级访问量、分钟访问量、小时和天访问量

(2)默认配置解析

#log_format  main  '$remote_addr $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

(3)案例

122.70.148.18 - [04/Aug/2020:14:46:48 +0800] "GET /user/api/v1/product/order/query_state?product_id=1&token=xdclasseyJhbGciOJE HTTP/1.1" 200 48 "https://xdclass.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"

(4)日志解析

$remote_addr #访问的客户端IP地址,对应的是122.70.148.18
$remote_user #远程访问的用户,没有就用“-”表示
$time_local #访问的时间,对应04/Aug/2020:14:46:48 +0800
$request #URL请求的地址参数类型等,对应"GET /user/api/v1/product/order/query_state product_id=1&token=xdclasseyJhbGciOJE HTTP/1.1"
$status #访问的状态码,200表示正常
$body_bytes_sent #对应的是多少字节,48字节,响应的body大小
$http_referer #访问源,对应是"https://xdclass.net/",如是直接在浏览器刷新时,referer就会为“-”
$http_user_agent #对应是客户端浏览器访问的类型
$http_x_forwarded_for #获取用户的真实ip

3.2.Nginx统计站点访问量

(1)查看访问最频繁的前100个IP

awk '{print$1}' access_temp.log | sort | uniq -c | sort -rn | head -100

(2)统计访问最多的url前20名

awk '{print$7}' access_temp.log | sort | uniq -c | sort -rn | head -20
awk是文本处理工具,默认按照空格切分,$N是切割第几个元素,$1就是切割第一个
sort命令用于将文本内容进行排序,-n按照数值排,-r倒序来排,默认从小到大
uniq去除重复出现的列,-c 显示重复的次数

(3)自定义日志格式,统计接⼝响应耗时

  • 日志格式增加$request_time
$request_time:从接受用户请求的第一个字节到发送完响应数据的时间,既包括接受数据的时间、程序响应时间、输出相应时间
$upstream_response_time:指从Nginx像向后端建立连接开始到接受完数据然后关闭连接为止的时间。
#定义日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time"';


#引用日志模板
access_log logs/access.log main;

(4)统计耗时接口, 列出传输时间超过 2 秒的接口,显示前5条

awk '$NF>2{print$7}' access.log | sort| uniq -c | sort -rn | head -5

4.Nginx负载均衡策略

4.1.负载均衡简介

  • 分布式系统中一个非常重要的概念,当访问的服务具有多个实例,需要根据某种”均衡“的策略决定请求发往哪个节点,这就是所谓的负载均衡。
  • 原理是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,从而提高了数据的吞吐量。

4.2.负载均衡的种类

  • 通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但比较昂贵。
  • 通过软件来进行解决,常见的软件有LVS、Nginx等,他们是基于Linux系统并且开源的负载均衡策略。
  • 目前来说公司用的较多的就是Nginx

4.3.upstream负载均衡配置

upstream lbs{
server 192.168.10.111:8080;
server 192.168.10.111:8081;
}
server{
listen 80;
server_name www.lixiang.com;
location /api/{
proxy_pass http://lbs;
proxy_redirect default;
}
}

4.4.Nginx负载均衡策略

  • 节点轮询(默认)
  • 简介:每个请求按照顺序分配到不同的后端服务器
  • 场景:会造成可靠性低和负载分配不均衡,适合静态文件服务器
upstream lbs{
server 192.168.10.111:8080;
server 192.168.10.111:8081;
}
  • weight权重配置
  • 简介:weight和访问比率成正比,数字越大,分配得到的流量越高
  • 场景:服务器性能差异较大的情况使用
upstream lbs{
server 192.168.10.111:8080 weight=5;
server 192.168.10.111:8081 weight=10;
}
  • ip_hash(固定分发)
  • 简介:根据请求按照访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器。
  • 场景:服务器业务分区、业务缓存、Session需要单点的情况。
upstream lbs{
ip_hash;
server 192.168.10.111:8080;
server 192.168.10.111:8081;
}
  • upstream还可以为每个节点设置状态值
  • down表示当前的server暂时不能参与负载
server 192.168.10.111:8080 down;
  • backup其他所有的非backup机器down的时候,会请求backup机器,这台机器压力会最轻,配置也相对低
server 192.168.10.111:8081 backup;

4.5.Nginx后端节点可用性探测配置

  • 如果某个应用挂了,请求不应该继续分发过去
  • max_fails:允许请求失败的次数,默认为1,当超过最大次数时就不会请求
  • fail_timeout:max_fails次失败后,暂停的时间。默认fail_timeout=10s
max_fails=N设定Nginx与后端节点通信的尝试失败的次数,在fail_timeout参数定义的时间内,如果失败的次数到达此值,Nginx就认为这个节点不可用,在下一个fail_timeout时间段到来之前,服务器不会在去尝试。失败尝试次数默认是1,如果设定为0就会停止统计尝试次数,认为服务器一直可用
  • 可以通过proxy_next_upstream来配置什么是失败的尝试。
  • 注意:默认情况下,http_404状态是不被认为是失败的尝试
  • 配置实操
upstream lbs{
server 192.168.10.111:8080 max_fails=2 fail_timeout=60s;
server 192.168.10.111:8081 max_fails=2 fail_timeout=60s;
}
server {
listen 80;
server_name www.nginx.com;
location /api/{
proxy_pass http://lbs;
proxy_redirect default;
proxy_next_upstream error timeout http_404 http_503 http_500;
}
}

5.Nginx经典应用

5.1.Nginx全局异常兜底数据返回

  • 任何接口都有可能出错,4xx,5xx等。
  • 如果业务没有做好统一的错误管理,直接暴漏给用户,无疑是降低用户体验。
  • 所以假如后端某个业务出错,nginx层也需要进行转换,让前端知道响应是200,其实将错误的状态吗定向到200,返回了全局兜底数据。
upstream lbs{
server 192.168.10.111:8080;
server 192.168.10.111:8081;
}
location /api/{
proxy_pass http://lbs;
proxy_redirect default;

#存放用户真实的IP
proxy_set_header Host $host;
proxy_set_heater X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#开启错误拦截配置,一定要开启
proxy_intercept_errors on;
}
error_page 404 500 503 502 503 =200 /default_api/;
location /default_api/{
default_type application/json;
return 200 '{"code":"-1","msg":"invoke fail, not found "}';
}

5.2.Nginx封禁恶意IP

  • 网络攻击,TCP洪水攻击、注入攻击、DOS、DDOS等
  • 数据安全,防止对手爬虫而已爬取,封禁IP

(1)封禁IP的方式

  • linux server的层面封IP:iptables
  • nginx层面封禁IP

(2)Nginx作为网关封禁IP

在nginx/conf 下编写blacklist.conf文件
deny 192.168.10.1;

在nginx.conf配置
全局配置:在http{}下配置
单独虚拟主机配置:在server下配置
include blacklist.conf;
  • ./nginx -s reload 重新加载nginx配置
  • 配置shell脚本自动化编写恶意IP封禁

【反向代理】超全Nginx原理+实战篇_Nginx_09

5.3Nginx配置浏览器跨域

  • 跨域:浏览器同源策略1995年,同源政策由Netscape公司引入浏览器。目前,所有浏览器都实行这个政策。最初,他的含义是指A网页设置的Cookie,B网页不能打开,除非这两个网页同源。
  • 同源
  • 协议相同 http https
  • 域名相同 www.baidu.com
  • 端口相同 80 81
  • 解决办法
  • JSONP
  • Http响应头配置允许跨域
  • nginx层配置
  • 程序代码中处理通过拦截器配置
  • Nginx开启跨域配置
  • location下配置
location /{
add_header 'Access-Control-Allow-Origin' $http_origin;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'DNT,web-token,apptoken,Authorization,Accept,Origin,KeepAlive,User-Agent,X-Mx-ReqToken,X-DataType,X-Auth-Token,X-Requested-With,IfModified-Since,Cache-Control,ContentType,Range';
add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';

#如果预见请求则返回成功,不需要转发到后端
if($request_method == 'OPTIONS'){
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 200;
}
}

5.4.Nginx的location路径匹配规则

正则

^:以什么开始
$:以什么结束

^/api/user$

location路径匹配

  • 语法 location [ = | ~ | ~* | ^~] uri{……}
  • location =/uri
  • = 表示精准匹配,只有完全匹配上才能生效
  • location /uri
  • 不带任何修饰符,表示前缀匹配
  • location ^~/uri/
  • 匹配任何以/uri/开头的任何查询并停止搜索
  • location /
  • 通用匹配,任何未匹配到其他location的请求都会匹配到
  • 正则匹配
  • 区分大小写匹配(~)
  • 不区分大小写匹配(*)
  • 优先级
  • 精准匹配>字符串匹配>正则匹配
  • 案例
server {   
server_name xdclass.net;
location ~^/api/pub$ {
...
}
}
http://xdclass.net/api/v1 #不匹配,没有以pub结尾
http://xdclass.net/API/PUB #不匹配,大写不匹配
http://xdclass.net/api/pub?key1=value1 #匹配
http://xdclass.net/api/pub/ #不匹配/说明接口不是以pub结尾
http://xdclass.net/api/public #不匹配 ,没有pub结尾
  • 测试
location =/img/test.png{
return 1;
}
location /img/test.png{
return 2;
}
location ^~/img/{
return 3;
}
location =/{
return 4;
}
location /{
return 5;
}

5.5.Nginx的rewrite重定向规则

  • 重写-重定向
  • rewrite地址重定向,实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转。
  • 语法:rewrite regex replacement[flag]
rewrite ^/(.*) https://xdclass.net/$1 permanent

#这是一个正则表达式,匹配完整的域名和后面的路径地址
#replacement部分事https://xdclass.net/$1,$1是取自regex部分()里的内容
  • 常用正则表达式:

字符

描述

^

表示以什么开头

$

表示以什么结尾

*

表示前面的字符0次或者多次

+

表示匹配前面一次或者多次


匹配前面0次或者1次

.

表示单个字符

(pattern)

匹配括号的内pattern

  • rewrite最后一项flag参数

标记符号

说明

last

本条规则匹配完成后继续向下匹配新的location URI规则

break

本条规则匹配完成后终止,不在匹配任何规则

redirect

返回302临时重定向

permanent

返回301永久重定向

  • 应用场景
  • 非法访问跳转,防盗链
  • 网站更换新域名
  • http跳转https
  • 不同地址访问同一个虚拟主机的资源
location /{
#重定向以/划分把/前的所有替换成https://xdclass.net,$1为(.*)表示参数,permanent表示永久重定向
rewrite ^/(.*) https://xdclass.net/$1 permanent;
}

5.6.Nginx配置Websocket反向代理

配置

server {
listen 80;
server_name xdclass.net;
location /{
proxy_pass http://lbs;
proxy_read_timeout 300s; #websocket空闲保持时长
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_http_version 1.1;

#
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
  • 核心是下面的配置其他和普通反向代理没区别,表示请求服务器升级协议为WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
  • 服务器处理完请求,响应如下报文 #状态码为101
HTTP /1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade

5.7.Nginx静态资源压缩

压缩配置

  • 对文本、js和css文件等进行压缩,一般是压缩后的大小是原始大小的25%
  • gzip
  • 语法: gzip on|off
    默认值: gzip off
    作用域: http, server, location, if (x) location
    开启或者关闭gzip模块
  • gzip_buffers
  • 语法: gzip_buffers number size
    默认值: gzip_buffers 4 4k/8k
    作用域: http, server, location
    设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
  • 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
  • gzip_comp_level
  • 语法: gzip_comp_level 1…9
    默认值: gzip_comp_level 1
    作用域: http, server, location
    gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)。
  • gzip_min_length
  • 语法: gzip_min_length length
    默认值: gzip_min_length 0
    作用域: http, server, location
    设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
    默认值是0,不管页面多大都压缩。
    建议设置成大于1k的字节数,小于1k可能会越压越大。 即: gzip_min_length 1024
  • gzip_http_version
  • 语法: gzip_http_version 1.0|1.1
    默认值: gzip_http_version 1.1
    作用域: http, server, location
    识别http的协议版本。由于早期的一些浏览器或者http客户端,可能不支持gzip自解压,用户就会看到乱码,所以做一些判断还是有必要的。 注:21世纪都来了,现在除了类似于百度的蜘蛛之类的东西不支持自解压,99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。
  • gzip_types
  • 语法: gzip_types mime-type [mime-type …]
    默认值: gzip_types text/html
    作用域: http, server, location
    匹配MIME类型进行压缩,(无论是否指定)”text/html”类型总是会被压缩的。
    注意:如果作为http server来使用,主配置文件中要包含文件类型配置文件
#开启gzip,减少我们发送的数据量
gzip on;

#设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。
gzip_min_length 1k;

#4个单位为16k的内存作为压缩结果流缓存
gzip_buffers 4 16k;

#gzip压缩比,可在1-9中设置,1压缩比例最小,速度最快,9压缩比例最大,速度最慢,消耗cpu
gzip comp level 4;

#压缩类型
gzip_types application/javascript text/plain text/css application/json application/xml text/javascript;

#给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费支持也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_vary on;

#禁用IE6一下的gzip压缩,IE某些版本对gzip的压缩支持很不好
gzip_disable "MSIE [1-6].";
  • 压缩前后区别(上传js文件进行验证)
location /static/ {
alias /usr/local/software/static;
}
  • 压缩是时间换空间,还是空间换时间?
  • web层主要涉及浏览器和服务器的网络交互,而网络交互显然是耗费时间的
  • 要尽量减少交互次数
  • 降低每次请求或响应数据量
  • 开启压缩
  • 在服务端是时间换空间的策略,服务端需要牺牲时间进行压缩以减小响应数据大小
  • 压缩后面的内容可以获得更快的网络传输速度,时间时得到了优化,双向的

【反向代理】超全Nginx原理+实战篇_nginx_10

【反向代理】超全Nginx原理+实战篇_服务器_11

5.8.Nginx业务接口性能优化

(1)高并发Nginx服务器缓存

  • 常见的缓存分类
  • 数据库缓存
  • 应用程序缓存
  • Nginx网关缓存
  • 前端缓存
  • Nginx作为缓存让后端结果的缓存离用户更进一些,性能提高,减少服务请求网络带宽。

【反向代理】超全Nginx原理+实战篇_https_12

(2)常用配置

  • /root/cache
  • 本地路径,用来设置Nginx缓存资源的存放地址
  • levels=1:2
  • 默认所有缓存文件都放在上面指定的根路径中,可能影响缓存的性能,推荐指定为2级目录来存储缓存文件,1和2表示用1位和2位16进制来命名目录名称。第一级目录用1位16进制名,如a,第二级目录用2位的16进制命名,如3a。所以此例中一级目录有16个,二级目录有16*16=256个,总目录数为16*256=4096个
  • 当levels=1:1:1时,表示三级目录,每级目录16个,16*16*16
  • keys_zone
  • 在共享内存中定义一块存储区域来存放缓存中的key和metadata
  • max_size
  • 最大缓存空间,如果不指定会使用掉所有的磁盘孔吉纳,当disk达到上限后,会删除最少使用的cache
  • inactive
  • 某个缓存在inactive指定的时间不被访问,将会从缓存中删除
  • proxy_cache_valid
  • 配置nginx cache中缓存文件的缓存时间,proxy_cache_valid 200 304 2m 对于状态为200和304的缓存文件的缓存时间为2分钟
  • use_temp_path
  • 临时缓存,建议为off,则nginx会将缓存的文件写入指定的cache文件中。
  • proxy_cache
  • 启用proxy_cache,并指定keys_zone,如果proxy_cache off表示关闭缓存
  • add_header Nging-Cache “$upstream_cache_status”
  • 用于前端判断是否缓存,miss、hit、expired(缓存过期)、updating(更新,使用旧的应答)
http{
proxy_cache_path /root/cache/ levels=1:2 keys_zone=lx_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
proxy_pass http://lbs;
proxy_redirect default;

proxy_cache lx_cache;
proxy_cache_valid 200 304 10m;
proxy_cache_valid 404 1m
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
}
}
  • 配置重启:./nginx -s reload
  • 验证:

【反向代理】超全Nginx原理+实战篇_https_13

  • 注意:
  • nginx缓存过期影响的优先级进行排序为:inactive > 源服务器端Expires/max-age > proxy_cache_valid
  • 如果出现Permission denied修改nginx.conf,将第一行修改为use root
  • 默认情况下GET请求及HEAD请求会被缓存,而POST请求不会被缓存,可以过滤部分路径不用缓存
  • 缓存清空
  • 直接rm删除
  • ngx_cache_purge
  • 缓存命中率统计
  • 前端打点日志上报
  • nginx日志模板增加信息:$upstream_cache_status

7.Nginx配置HTTPS协议

7.1.新一代传输协议https

  • HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,是身披SSL外壳的HTTP
  • HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包
  • HTTPS协议由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。要比HTTP协议安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。

7.2.HTTPS传输流程

【反向代理】超全Nginx原理+实战篇_nginx_14

  • 客户端发送https请求到服务端
  • 服务端会将crt public(配置公钥)发送到客户端
  • 客户端根据公钥验证是否正确,不正确则提醒警告,正确则根据公钥生成一个随机的密钥保存在客户端
  • 将客户端生成的随机密钥发送到服务端
  • 服务端解密随机的密钥,得到key
  • 最后客户端通过key来交换数据
  • 密钥交换使用非对称加密,内容传输使用对称加密的方式

7.3.阿里云HTTPS证书申请

【反向代理】超全Nginx原理+实战篇_https_15

地址:https://common-buy.aliyun.com/?commodityCode=cas

7.4.Nginx配置HTTPS证书

  • 删除原先的nginx,新增ssl模块
./configure prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make

make install

#查询是否安装成功
/usr/local/nginx/sbin/nginx -V
  • 配置https证书
https{
server {
listen 443 ssl;
server_name 16web.net;

ssl_certificate /usr/local/software/biz/key/4383407_16web.net.pem;
ssl_certficate_key /usr/local/software/biz/key/4383407_16web.net.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location /{
root html;
index index.html;
}
}
}
  • 阿里云开发网络安全组
  • 443端口

8.Nginx整合OpenResty+Lua脚本

8.1.OpenResty+Lua简介

(1)OpenResty介绍

基于Nginx和Lua的高性能web平台,内部集成精良的Lua库、第三方模块、依赖,开发者可以方便搭建能够处理高并发、扩展性极高的动态web应用、web服务、动态网关。

OpenResty将Nginx核心、LuaJIT、许多有用的Lua库和Nginx第三方模块打包在一起

Nginx是c语言开发,如果要二次扩展很麻烦,而基于OpenResty,开发人员可以使用Lua编程语言对Nginx核心模块进行二次扩展

性能强大,OpenResty可以快速构造出1万以上并发连接响应的超高性能web应用系统

(2)扩展

让web服务直接泡在Nginx内部服务器,充分利用Nginx的非阻塞I/O模型,不仅仅对HTTP客户端请求,甚至对于远程后端如MYSQL、Redis等都进行一直的高性能响应。所以对于一些高性能的服务来说,可以直接使用OpenResty访问MYSQL、Redis,而不需要通过第三方语言来访问,大大提高性能

(3)Lua脚本介绍

Lua由标准的c语言编写而成,没有提供强大的库,但可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数。
在应用程序中可以被广泛应用,不过Lua是一种脚本,不适合做复杂的业务场景。
LuaJIT是采用C和汇编语言写的Lua解释器与即使编译器

(4)什么是ngx_lua

ngx_lua是Nginx的一个模块,将Lua嵌入到Nginx中,从而可以使用Lua来编写脚本,部署到Nginx中运行,即Nginx变成了一个Web容器;开发人员就可以使用Lua语言开发高新跟那个Web应用了。

(5)OpenResty提供了常用的ngx_lua开发模块

  • lua-resty-memcached
  • lua-resty-mysql
  • lua-resty-redis
  • lua-resty-dns
  • lua-resty-limit-traffic
通过上述的模块,可以⽤来操作 mysql数据库、redis、memcached等,也可以⾃定义模块满⾜其他业务需求,很多经典的应⽤,⽐如开发缓存前置、数据过滤、API请求聚合、AB测试、灰度发布、降级、监控、限流、防⽕墙、⿊白名单等

(6)OpenResty安装

cd /etc/yum.repos.d/
wget https://openresty.org/package/centos/openresty.repo
yum check-update
yum clean all
yum makecache
yum install -y openresty
yum -y install openresty-resty

列出所有 openresty 仓库⾥的软件包

yum --disablerepo="*" --enablerepo="openresty" list available

查看版本

resty -V

8.2.Nginx+OpenResty简单案例

(1)Nginx+OpenResty开发

编辑:/usr/local/openresty/nginx/conf/nginx.conf

http{
location /{
content_by_lua_block{
ngx.say("hello lixiang;李祥");
}
}
}
  • 启动nginx:./nginx
  • curl 127.0.0.1
  • 注意:如果需要指定配置⽂件 nginx -c 配置⽂件路径⽐如 ./nginx -c /usr/local/nginx/conf/nginx.conf

【反向代理】超全Nginx原理+实战篇_服务器_16

8.3.Nginx内置变量

Nginx内置变量

名称

说明

$arg_name

请求中的name参数

$args

请求中的参数

$content_length

HTTP请求信息里的“Content-Length”

$content_type

请求信息里的“Content-Type”

$host

请求信息中的Host,如果请求中没有Host行,则等于设置的服务器名

$hostname

机器名使用gethostname系统调用的值

$host_cookie

cookie信息

$http_referer

引用地址

$http_user_agent

客户端代理信息

$http_via

最后一个访问服务器的IP地址

$http_x_forwarded_for

相当于网络访问路径

$is_args

如果请求行带有参数,则返回”?“,则返回空字符串

$limit_rate

对连接速率的限制

$nginx_version

当前运行的nginx版本号

$pid

worker进程的pid

$query_string

与$args相同

$remote_port

客户端端口号

$remote_addr

客户端IP地址

$request_method

请求的⽅法,⽐如"GET"、"POST"等

$request_uri

请求的URI,带参数

$scheme

所⽤的协议,⽐如http或者是https

$server_name

请求到达的服务器名

$server_port

请求到达的服务器端⼝号

$server_protocol

请求的协议版本,“HTTP/1.0"或"HTTP/1.1”

$uri

请求的URI,可能和最初的值有不同,⽐如经过重定向之类的

Nginx对于请求的处理分为多个阶段,从而让第三方模块通过挂在行为在不同的阶段来控制,大致如下

  • 初始化阶段(Initialization Phase)
  • init_by_lua_file
  • init_worker_by_lua_file
  • 重写与访问阶段(Rewrite/Access Phase)
  • rewrite_by_lua_file
  • access_by_lua_file
  • 内容生成阶段(Content Phase)
  • content_by_lua_file
  • 日志记录阶段(Log Phase)

8.4.开发内网访问限制

  • Nginx+OpenResty+Lua开发内网访问限制
  • 生产环境-管理后台一般需要指定的网络才可以访问,网段/ip等
http{
#这里设置为off,为了避免每次修改之后都要重新reload的麻烦,缓存lua脚本,生产环境上设为on
lua_code_cache off;

#lua_package_path可以配置openrestry的文件寻址路径,$PERFIX为openrestry安装路径
#文件名使用"?"作为通配符,多个路径使用";"分割。默认的查找路径用";;"

#设置纯Lua扩展库的搜寻地址
lua_package_path "$prefix/lualib/?.lua;;";

#设置c编写的Lua加班呢的搜寻地址
lua_package_cpath "$prefix/lualib/?.so;;";

server {
location /{
access_by_lua_file lua/while_ip_list.lua;
proxy_pass http://lbs;
}
}
}
  • 编写lua脚本
local black_ips={["127.0.0.1"]=true}

local ip=ngx.var.remote_addr

if true == black_ips[ip] then
ngx.exit(ngx.HTTP_FORBIDDEN)
return;
end

【反向代理】超全Nginx原理+实战篇_服务器_17

  • ip封禁的架构

【反向代理】超全Nginx原理+实战篇_https_18

8.5.开发资源下载限速

  • Nginx+OpenResty开发资源下载限速
  • 限速限流应用场景
  • 下载限速:保护宽带及服务器的IO资源
  • 请求限流:防止恶意攻击,保护服务器及资源安全
  • 限制某个用户在一个给定时间段内能够产生的HTTP请求数
  • 限流用在保护上游应用服务器不被在同一时刻的大用户量访问
  • openResty下载限速案例实操
  • Nginx有一个$limit_rate,这个反应的是但前请求每秒能响应的字节数,该字节数默认位配置文件中limit_rate指令的设置。
location /download/{
access_by_lua_block{
ngx.var.limit_rate = "300K"
}
alias /usr/local/software/;
}

【反向代理】超全Nginx原理+实战篇_服务器_19

8.6.漏桶算法和令牌桶算法

(1)什么是漏桶算法

如果是请求限流,请求先进入到漏桶里,漏桶以固定的速度出水,也就是处理请求,当水加的过快也就是请求过多,桶会直接溢出,也就是请求被丢弃拒绝,所以漏桶算法能清醒限制数据的传输速率或请求数

(2)什么是令牌桶算法

备注:只要突发并发量不⾼于桶⾥⾯存储的令牌数据,就可以充分利⽤好机器⽹络资源。如果桶内令牌数量⼩于被消耗的量,则产⽣的令牌的速度就是均匀处理请求的速度

9.Nginx高可用LVS+Keepalived

9.1.LVS+Keepalived架构

【反向代理】超全Nginx原理+实战篇_nginx_20

9.2.什么是LVS

LVS是Linux Virtual Server,Linux虚拟服务器,是一个虚拟的服务器集群系统

Linux2.4内核以后,LVS已经是Linux标准内核的一部分
  • LVS提供了10多种调度算法:轮询、加权轮询、最小连接、目标地址散列、源地址散列等
  • 三种负载均衡转发技术
  • NAT:数据进出都通过LVS,前端的Master即要对客户端发出的请求做处理,又要对后台RealServer的响应信息做处理,将RealServer响应的信息再转发给客户端,容易成为整个集群系统性能那个的瓶颈 (⽀持任意系统且可以实现端⼝映射)
  • DR:移花接木,最高效的负载均衡规则,前端的Master只处理客户端的请求,将请求转发给RealServer,由后台的RealServer直接响应客户端,不在经过Master,性能要优于NAT,需要LVS和RS绑定同一个VIP(⽀持多数系统,不可以实现端⼝映射)
  • TUNL:隧道技术,前端的Master只处理客户端的请求,将请求转发给RealServer,然后由后台的RealServer直接响应客户端,不再经过Master;(⽀持少数系统,不可以实现端⼝映射))

9.3.什么是keepalived

监控并管理LVS集群系统中各个服务节点的状态

keepalived是一个类似于交换机制的软件,核心是检测服务器的状态,如果有一台web服务器工作出现故障,keepalived将检测到并将有故障的服务器从系统中剔除,使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器集群中。

后来加入了vrrp(虚拟路由器冗余协议),除了为LVS提供高可用还可以为其他服务器如mysql等提供高可用方案

9.4.keepalived安装

#yum安装
yum -y install keepalived

#配置路径
/etc/keepalived/keepalived.conf

#启动命令
service keepalived start

#停止命令
service keepalived stop

#重启命令
service keepalived restart

#查看状态
service keepalived status
  • 注意:如果缺少依赖可以执行下面命令
yum install -y gcc
yum install -y openssl-devel
yum install -y libnl libnl-devel
yum install -y libnfnetlink-devel
yum install -y net-tools
yum install -y vim wget

9.5.keepalived.conf核心配置

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
enable_script_security #允许执行外部脚本
}


#配置vrrp_script,主要用于健康检查及检查失败后执行的动作。
vrrp_script chk_real_server {
#健康检查脚本,当脚本返回值不为0时认为失败
script "/usr/local/software/conf/chk_server.sh"
#检查频率,以下配置每2秒检查1次
interval 2
#当检查失败后,将vrrp_instance的priority减小5
weight -5
#连续监测失败3次,才认为真的健康检查失败。并调整优先级
fall 3
#连续监测2次成功,就认为成功。但不调整优先级
rise 2

user root
}



#配置对外提供服务的VIP vrrp_instance配置

vrrp_instance VI_1 {

#指定vrrp_instance的状态,是MASTER还是BACKUP主要还是看优先级。
state MASTER

#指定vrrp_instance绑定的网卡,最终通过指定的网卡绑定VIP
interface ens33

#相当于VRID,用于在一个网内区分组播,需要组播域内内唯一。
virtual_router_id 51

#本机的优先级,VRID相同的机器中,优先级最高的会被选举为MASTER
priority 100

#心跳间隔检查,默认为1s,MASTER会每隔1秒发送一个报文告知组内其他机器自己还活着。
advert_int 1

authentication {
auth_type PASS
auth_pass 1111
}

#定义虚拟IP(VIP)为192.168.159.100,可多设,每行一个
virtual_ipaddress {
192.168.159.100
}

#本vrrp_instance所引用的脚本配置,名称就是vrrp_script 定义的容器名
track_script {
chk_real_server
}
}

# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.159.100 80 {
# 设置健康检查时间,单位是秒
delay_loop 6

# 设置负载调度的算法为rr
lb_algo rr

# 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
lb_kind NAT

# 会话保持时间
persistence_timeout 50

#指定转发协议类型(TCP、UDP)
protocol TCP

# 指定real server1的IP地址

real_server 192.168.159.146 80 {
# 配置节点权值,数字越大权重越高
weight 1

# 健康检查方式
TCP_CHECK { # 健康检查方式
connect_timeout 10 # 连接超时
retry 3 # 重试次数
delay_before_retry 3 # 重试间隔
connect_port 80 # 检查时连接的端口
}

}

}
  • 配置注意
router_id后面跟的自定义的ID在同一个网络下是一致的

state后跟的MASTER和BACKUP必须大写

interface 虚拟网卡ID,只要是没有在用的IP即可

在BACKUP节点上,其keepalived.conf与Master上基本⼀致,修改state为BACKUP,priority值改⼩即可

authentication主备之间的认证⽅式,⼀般使⽤PASS即可;主备的配置必须⼀致,不能超过8位

9.6.启动keeplived验证

  • 启动keeplived验证

【反向代理】超全Nginx原理+实战篇_https_21

【反向代理】超全Nginx原理+实战篇_Nginx_22

【反向代理】超全Nginx原理+实战篇_服务器_23

  • 当master宕机后虚拟IP就会飘逸到backup上

【反向代理】超全Nginx原理+实战篇_服务器_24

【反向代理】超全Nginx原理+实战篇_Nginx_25

  • 当nginx服务宕机后,但是对应的keepalived节点存活依旧可以转发过去,但是响应失败,需要配合shell脚本检测nginx服务,如果nginx服务宕机,就结束keepalived进程
  • 脚本监听
#配置vrrp_script,主要用于健康检查及检查失败后执行的动作。
vrrp_script chk_real_server {
#健康检查脚本,当脚本返回值不为0时认为失败
script "/usr/local/software/conf/chk_server.sh"
#检查频率,以下配置每2秒检查1次
interval 2
#当检查失败后,将vrrp_instance的priority减小5
weight -5
#连续监测失败3次,才认为真的健康检查失败。并调整优先级
fall 3
#连续监测2次成功,就认为成功。但不调整优先级
rise 2

user root
}
  • chk_server.sh脚本内容(需要 chmod +x chk_server.sh)
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" -eq "0" ]; then
service keepalived stop
echo 'nginx server is died.......'
fi
  • 常见问题
vip能ping通,vip监听的端口不通: 第一个原因:nginx1和nginx2两台服务器的服务没有正常启动

vip ping不通: 核对是否出现裂脑,常见原因为防火墙配置所致导致多播心跳失败,核对keepalived的配置是否正确
  • 特别注意: 需要关闭selinux,不然sh脚本可能不生效
  • getenforce 查看
  • setenforce 0 关闭

10.Nginx基础架构模型剖析

【反向代理】超全Nginx原理+实战篇_https_26

  • 高性能原理
  • nginx通过多进程+io多路复用(epoll)实现了高并发
  • 采用多个worker进程实现对cpu的利用,通过eopll对多文件描述符事件回调机制
  • 拓展:linux I/O多路复⽤有select,poll,epoll


标签:实战篇,http,超全,nginx,server,Nginx,location,服务器
From: https://blog.51cto.com/u_15646271/6019974

相关文章

  • Linux环境下nginx给wordpress站点配置http更换成https访问
    一、nginx添加ssl模块首先确认下自己的nginx是否有ssl模块,如没有,需要补安全,可以参考这篇文章《Nginx安装SSL模块教程及注意事项》。二、nginx配置#这个server是为了ht......
  • Nginx安装SSL模块教程及注意事项
    一、引言有的时候我们的Linux服务器上之前安装的nginx已经发布了web项目,但之前并没有用到https访问,之后又有需求了,要配置一个SSL证书,那一开始我们编译的Nginx并没有SSL模......
  • Nginx linux 安装
    (一)、在线安装nginx依赖包yum-yinstallgcczlibzlib-develpcre-developensslopenssl-devel 以下为离线安装依赖包:1.离线安装gcca.从CentOS7的系统安装......
  • Nginx安装配置规范手册(完整版)
    1. 目的本流程旨在保证项目测试环境、生产环境web服务器所使用的nginx版本一致性、配置规范性、管理统一性。2. 适用范围Nginx服务器适用在公有云网络拓扑中的互联网区,......
  • 使用vector采集nginx日志,并输出为prometheus_exporter
    日志示例{"remote_addr":"10.43.144.171","@timestamp":"2023-01-17T17:27:14+08:00","request":"GET/v1/stat_des/?id=20230117170221HTTP/1.1","status":"200","size......
  • docker 安装 nginx 并配置反向代理
    1.安装nginxdocker镜像获取nginx官方镜像1.dockerpullnginx 查看镜像库2. dockerimages   使用nginx镜像来创建nginx容器实例 dockerrun......
  • nginx
    反向代理由服务提供方提供的访问模式、代理方式正向代理由服务调用方主动采取的访问模式、代理方式我们家里的路由器就相当于正向代理服务器(网关)隧道式代理-nginx......
  • Spring Cloud Alibaba Nacos+Nginx+Keepalived高可用集群注册中心搭建
    简介Nacos简介Nacos官网:https://nacos.ioNacos源码:https://github.com/alibaba/nacos下载Nacos服务端压缩包:https://github.com/alibaba/nacos/releasesNacos三种部署......
  • Nginx配置转发代理接口
    cd/etc/nginx/conf.d/vimtest.confupstreammy_server{server192.168.100.100:11105;keepalive2000;......
  • docker下部署nginx
    1.首先对nginx的目录简单的解释一下/usr/share/nginx/htmlnginx容器配置的静态页目录。/var/log/nginxnginx容器的日志目录。/etc/nginx/nginx.confnginx容器的配置......