Nginx一直跟我们息息相关,它既可以作为Web
服务器,也可以作为负载均衡服务器,具备高性能、高并发连接等。
当一个应用单位时间内访问量激增,服务器的带宽及性能受到影响,
影响大到自身承受能力时,服务器就会宕机奔溃,为了防止这种现象发生,
以及实现更好的用户体验,我们可以通过配置Nginx负载均衡的方式来分担服务器压力
当有一台服务器宕机时,负载均衡器就分配其他的服务器给用户,极大的增加的网站的稳定性 当用户访问web时候,首先访问到的是负载均衡器
,再通过负载均衡器将请求转发给后台服务器
// nginx.config upstream backserver { server 192.168.0.1; server 192.168.0.2; }
指定不同ip的权重,权重与访问比成正相关,权重越高,访问越大,适用于不同性能的机器
// nginx.config upstream backserver { server 192.168.0.1 weight=2; server 192.168.0.2 weight=8; }
公平竞争,谁相应快,谁处理,不过这种方式需要依赖到第三方插件nginx-upstream-fair,需要先安装
// nginx.config upstream backserver { server 192.168.0.1; server 192.168.0.2; fair; } server { listen 80; server_name localhost; location / { proxy_pass http://backserver; } }
Nginx 自带 ngx_http_upstream_module(健康检测模块)本质上服务器心跳的检查,
通过定期轮询向集群里的服务器发送健康检查请求,来检查集群中是否有服务器处于异常状态
如果检测出其中某台服务器异常,那么在通过客户端请求nginx
反向代理进来的都不会被发送到该服务器上(直至下次轮训健康检查正常)
基本例子如下??
upstream backserver{ server 192.168.0.1 max_fails=1 fail_timeout=40s; server 192.168.0.2 max_fails=1 fail_timeout=40s; } server { listen 80; server_name localhost; location / { proxy_pass http://backend; } }
涉及两个配置:
fail_timeout
: 设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段,默认为10s
max_fails
: 设定Nginx与服务器通信的尝试失败的次数,默认为:1
次
反向代理指的是,当一个客户端发送的请求,想要访问服务器上的内容,
但将被该请求先发送到一个代理服务器proxy,这个代理服务器(Nginx)将把请求代理到和自己属于同一个局域网下的内部服务器上,
而用户通过客户端真正想获得的内容就存储在这些内部服务器上,此时Nginx代理服务器承担的角色就是一个中间人,起到分配和沟通的作用
反向代理的优势主要有以下两点:
当你的应用不想直接暴露给客户端(也就是客户端无法直接通过请求访问真正的服务器,只能通过Nginx
),通过nginx
过滤掉没有权限或者非法的请求,来保障内部服务器的安全
也就上一章提到负载均衡,本质上负载均衡就是反向代理的一种应用场景,可以通过nginx
将接收到的客户端请求"均匀地
"分配到这个集群中所有的服务器上(具体看负载均衡方式),从而实现服务器压力的负载均衡
我们通过模拟内部服务器的端口启动的nodejs
项目设置反向代理到80端口访问
// nginx.config server { listen 80; server_name localhost; location / { proxy_pass http://127.0.0.1:8000;(upstream) } }
在 Nginx
反向代理是,会通过 location
功能匹配指定的 URI
,然后把接收到的符合匹配 URI的请求通过 proxy_pass
转移给之前定义好的 upstream
节点池
Nginx 常用来配置Https认证,主要有两个步骤:签署第三方可信任的SSL证书 和 配置 HTTPS
配置 HTTPS 要用到私钥 example.key 文件和example.crt 证书文件,而申请证书文件的时候要用到 example.csr 文件。对于想了解更多关于SSL证书的点这里SSL证书介绍
要开启 HTTPS 服务,在配置文件信息块(server),必须使用监听命令 listen 的 ssl 参数和定义服务器证书文件和私钥文件,如下所示:
server { #ssl参数 listen 443 ssl; //监听443端口,因为443端口是https的默认端口。80为http的默认端口 server_name example.com; #证书文件 ssl_certificate example.com.crt; #私钥文件 ssl_certificate_key example.com.key; }
ssl_certificate
:证书的绝对路径ssl_certificate_key
: 密钥的绝对路径;
除了上述的这些,前端还可以用Nginx做些什么,多着呢~下面依依给你讲
可以配置nginx的白名单,规定有哪些ip可以访问你的服务器,防爬虫必备
server { location / { deny 192.168.0.1; // 禁止该ip访问 deny all; // 禁止所有 } }
建立白名单
vim /etc/nginx/white_ip.conf ... 192.168.0.1 1; ...
修改nginx配置(nginx.conf)
geo $remote_addr $ip_whitelist{ default 0; include ip.conf; } // geo 指令主要是可以根据指定变量的值映射出一个新变量。如果不指定变量,默认为`$remote_addr`
为匹配项做白名单设置
server { location / { if ( $ip_whitelist = 0 ){ return 403; //不在白名单返回 403 } index index.html; root /tmp; } }
(未完待续)
原文:https://www.cnblogs.com/magicg/p/13096200.html