Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,目前中国使用nginx公司有:百度、京东、新浪、网易、腾讯、淘宝等。
1、反向代理方式,是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
2、正向代理,是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
关于反向和正向 proxy推荐LINK:
LINK: https://baijiahao.baidu.com/s?id=1566988836622068&wfr=spider&for=pc
将静态资源(html,js,jquery,img等)资料和后端代码分开放置在反向代理服务器上(或者cdn服务器),后端应用提供API,根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。
数据流量分摊到多个服务器上执行,减轻每台服务器的压力,多台服务器共同完成工作任务,从而提高了数据的吞吐量。
例如:一台反向代理服务器和两台应用服务器
一台反向代理服务器通过ip_hash来限制每个请求的ip发放给指定的应用服务器,这样可以避免session共享问题;
1.轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的server
缺点是:可靠性低和负载分配不均衡。
upstream suyi {
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
2.最少连接
把请求分配到连接数最少的server
upstream suyi {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
3.权重
使用weight来指定server访问比率,weight默认是1。用于后端服务器性能不均的情况。
upstream suyi {
server 127.0.0.1:8080 weight=6;//60%
server 127.0.0.1:8090 weight=4;//40%
}
4.ip_hash
每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。
upstream suyi {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
ip_hash可以和weight结合使用。
5.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
upstream suyi{
server 127.0.0.1:9001; server 127.0.0.1:9002; fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
进入nginx\conf目录,编辑nginx.conf,在#gzip on;这一行下开始配置
关于Nginx.conf的配置推荐LINK: https://www.cnblogs.com/youzhibing/p/7327342.html
upstream suyi {
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
proxy_pass http://suyi;
index index.html index.htm;
}
}
配置两个地方,第一个是upstream,另一个是proxy_pass http:// xxx
注意upstream 后面的名字需要和server中的location下的proxy_paxx http:// 后的内容相同
由于请求先通过Nginx代理服务器,再有nginx服务器分配请求到具体的应用服务器中间就会遇到Session共享问题:
1.ip_hash 根据ip分配请求的应用服务器
2.不使用session,换cookie就不会存在此问题,但是网站安全度降低
3.使用cookie和redis缓存(建议此方案,方便扩展,缓存中速度高效)
例如:生成一个uuid作为用户信息的key存放在redis缓存中,再将uuid作为cookie的值写会客户端,cookie的key可以用固定值(常量)
4.放到MySQL数据库中,不推荐(增加数据库的io)
多个Nginx如何实现集群初步研究LINK: https://www.cnblogs.com/EasonJim/p/7807794.html