Nginx
Nginx——Ngine X,是一款自由,开源,高性能Http服务器和反向代理服务器;也是IMAP,POP3,SMTP代理服务器;
Nginx基础(不依赖第三方模块的情况)
反向代理
百度百科:(反向代理Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上的请求连接客户端,此时代理服务器对外就表现为一个反向代理服务器。简单说就是真实服务器不能被外部网络直接访问,所以就需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实的服务器在同一个网络环境下
server{
listen 80;
server_name localhost;
client_max_body_size 1024M;
location /{
proxy_pass http://localhost:8080;
proxy_set_header $host:$server_port;
}
}
负载均衡
负载均衡:就是分摊到多个操作单元上进行执行(web服务器,FTP服务器,企业关键应用服务器,其他关键任务服务器),从而共同完成工作任务
简而言之:就是当有两台或以上服务武器是,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。
有两种常用的第三方负载均衡策略
RR(默认)
每个请求按时间逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upsteam test{
server localhost:8080;
server localhost:8081;
...
}
server{
listen 81;
server_name localhost;
client_max_body_size 1024M;
location /{
proxy_name localhost;
proxy_set_header Host $Host:$server_port;
}
}
此时如果一台服务器挂掉,8081不存在了,但是访问http://localhost不会有问题,会默认跳转到http://localhost:8080 因为Nginx会判断服务器状态,不能访问就跳转到正常的服务器,不会影响正常产品的使用
权重
制定轮询几率,weight和访问比率成正比,用于后端服务器性能不均情况。
upstream test{
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
10次会有一次访问到8081,而有9次会访问到8080
ip_hash
(有一个问题:以上两个方法,在当下一个请求来的时候可能分发到另外一个服务器,当程序不是无状态的时候保存数据,有一种情况比如把登陆信息保存到
session,那么跳转到另外一个服务器的时候就需要重新登陆,所以很多时候我们需要一个客户只访问一个服务器,那么我们就需要用到iphash了)
iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream test{
ip_hash;
server localhost:8080;
server localhost:8081;
}
fair (第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream backend{
fair;
server localhost:8080;
server localhost:8081;
}
url_hash(第三方)
按url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句不能写入weight等其他参数。
hash_method是使用的hash算法
upstream backend{
hash $request_url;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
nginx第三方模块很强大,但是我不懂
Http服务器(包含动静分离)
Ngixn本身也是一种静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器(比如动静分离)
Nginx做静态资源服务器
server{
listen 80;
server_name localhost;
client_max_body_size 1024m;
location /{
root e:\wwwroot;
index index.html;
}
}
如果访问http://localhost就会默认访问到E盘wwwroot目录下的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。
动静分离
动静分离:让动态网站里的动态页面根据一定规则包不变的资源和经常变的资源分离开来。动静资源做好拆分后,我们就可以根据静态资源的特点将其做缓存操作,这就是静态话处理的核心思路
upstream test{
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name localhost;
location /{
root e:\wwwroot;
index index.html
}
# 所有静态请求都是由nginx处理,存放目录为html
location - \.(gif|jpg|jpeg|png|bmp|css|js)${
root e:\wwwroot;
}
# 所有动态请求都转发给tomcat处理
location -\.(jsp|do)$ {
proxy_pass http://test
}
error_page 500 502 503 504 /50x.html;
location = /50x.html{
root e:\wwwroot;
}
}
看配置基本就懂了是干什么的了。
正向代理
正向代理:一个位于客户端和原始服务器(orgin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用,
当需要将服务器作为代理服务器时候,可以用Nginx来实现正向代理
resolver 114.114.114.114.114 8.8.8.8
server{
resover_timeout Ss;
listen 81;
access_log e:\wwwroot\proxy.access.log;
error_log e:\wwwroot\proxy.error.log;
location /{
proxy_pass http://$host$request_url;
}
}
nginx支持https正向代理
参见:
https://blog.csdn.net/u011244446/article/details/51898418
目前没有用过。 不是很清楚
Nginx热启动
nginx -s reload
即修改配置文件后,不用关闭Nginx,就可以实现配置生效
windows下:
nginx.exe -s reload
这边文章作者叫RayeWang——开发者头条app
因为前几天,老板要统计产品的所有微服务ip,提到过Nginx,我不太清楚,后来了解了一下。然后发现了这个文章。很不错