nginx Wbe服务解析 和 负载均衡服务

http2万并发  nginx 并发5万  动态网战并发量几百到几千(单机(C10K百度一下))新浪1.12版本最新1.15版本

安装时要创建一个nginx用户  --user=nginx  --group=nginx -----------(安全)

 升级时 只需要maike编译后,将nginx的二进制程序替换老版本即可,killall nginx 然后再启动nginx

配置用户认证才能打开网页,在配置文件里加auth_basic....auth_basic_user_file.....

  创建密码文件httpd-tools.rpm

work_process

支持https,openssl.rpm可生成证书

动态网页部署

  php-fpm配置参数允许的最大最小进程数量,实际当中要几百个(网页并发量)

  fastcgi_pass   ----》php    ;include fastcgi.conf;加载php变量
地址重写:[if 判断] rewrite 旧地址(支持正则)  新地址  [选项]
    可时先对不同浏览器发送不同的网页(if判断nginx的内置变量)
调度: 
  proxy_pass
调优:
 后端web 的 权重,连接失败次数,失败超时时间
 通过ip_hash设置调度规则为:相同客户端访问相同服务器 
  自定义报错页面
  查看服务器状态信息(非常重要的功能),--with-http_stub_status_module开启状态页面模块。查看并发量
  nginx启动的进程数=cpu核心,每个进程允许的最大连接数65535
  更改linux的同时最大打开文件数
  加大Nginx数据包头缓存
  定义对静态页面的缓存时间
  日志切割
  对页面进行压缩处理,小文件不压缩1000字节,多媒体文件不压缩
  服务器内存缓存文件数量,如果需要处理大量静态文件,可以将文件缓存在内存,下次访问会更快

nginx调优
 
nginx配置中:
 
http段中,加入配置
 
server_token off;
 
或者修改源码中,字符串定义。编辑src/core/nginx.h,  
 
#define NGINX_VER "nginx/" NGINX_VERSION
 
修改后需要重新编译。
 
 
2.优化nginx进程数,一般将nginx进程数设置为cpu核数,有突来的并发时可设置为核数2倍,
 
work_processes 4; //main段
 
此外还可以利用 worker_cpu_affinity 绑定进程到指定cpu,充分利用cpu。
 
 
3.开发web应用时经常会遇到文件传输的场景,nginx有开启高效文件传输模式。
 
sendfile on|off;
 
配合 tcp_nopush|tcp_nodelay 防止网络I/O阻塞,提升效率
 
tcp_nopush on;
 
tcp_nodelay on; //激活延时,提高I/O功能
 
 
 
4.连接超时设置
 
keeplive_timeout 90; //客户端连接 保持会话
 
client_header_timeout //设置读取客户端请求头数据的超时时间
 
send_timeout 40; //指定相应客户端的超时时间
 
 
 
5.nginx gzip压缩配置
 
gzip            on;
gzip_min_length 1000; //允许压缩的页面最小字节数
gzip_proxied    expired no-cache no-store private auth;
gzip_types      text/plain application/xml;  //压缩的类型,
http://nginx.org/en/docs/http/ngx_http_gzip_module.html
 
6.nginx expires设置
 
设置一个缓存过期时间。
 
expires 1y;
 
 本案例要求对Nginx服务器进行适当优化,解决如下问题,以提升服务器的处理性能:
如何自定义返回给客户端的404错误页面
如何查看服务器状态信息
如果客户端访问服务器提示“Too many open files”如何解决
如何解决客户端访问头部信息过长的问题
如何让客户端浏览器缓存数据
日志切割
开启gzip压缩功能,提高数据传输效率
开启文件缓存功能
然后客户机访问此Web服务器验证效果:
使用ab压力测试软件测试并发量
编写测试脚本生成长头部信息的访问请求
客户端访问不存在的页面,测试404错误页面是否重定向
支持4层TCP/UDP代理的Nginx服务器
  

4)LNMP常见问题

Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log

Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log

PHP默认错误日志文件为/var/log/php-fpm/www-error.log


Nginx能做些什么?

1、正向代理

2、反向代理

3、负载均衡

4、Http server(包含动静分离)[这个还没理解]

 

正向代理和反向代理

 

正向代理:举个栗子,我是生活在天朝的一名大学生,有一天我想要上油管上面找些视频材料剪辑好穿到b站上去,但是由于天朝强大无比的“墙”技术,我没法直接通过域名找到网站。于是我找了一个天朝可以访问的一个外国服务器,而这个服务器是可以上油管的。于是我向这个服务器发送请求说我要上油管,这个服务器人很好,就帮我登上了油管,并把浏览器下载下来的资源传给了我(当然了这个过程我和这个服务器一直是保持着连接的,不然的话我看视频有可能就会一卡一卡的)。在这个过程中,我的身份是客户端,油管的身份是目标服务器,我找到的服务器就被称为代理服务器。

在上面这个例子中,客户端不能访问目标服务器,但是可以访问代理服务器,而代理服务器是可以访问目标服务器的,于是客户端通过向代理服务器发送请求来让代理服务器替自己获取目标服务器的内容。这个过程就叫做正向代理。
反向代理:再举个栗子,假设我是米忽悠公司的边缘技术人员,我知道公司的数据保存在很多台服务器中,这些服务器中有A、B、C、D。我现在只知道其中一台服务器A的地址,B、C、D三台服务器的地址被放在了老板的保险箱里,而我却想要拿到C服务器中的制作蟹黄堡的秘方,这可愁死我了,怎么办呢?幸好,公司内部的内奸章鱼哥告诉我,A服务器的权限很大,可以从其他服务器拿数据。我很开心,于是就连上了A服务器,通过它去获取C服务器中的秘方。一番折腾以后,章鱼哥告诉我,其实A服务器里面也有秘方。

在上面这个栗子中,客户端(我)想要去获取不知道域名、或者说被防火墙(保险箱)保护着的目标服务器中的数据,由于我无法直接访问,所以我需要通过一台有权限获取目标服务器中数据的代理服务器去获取我想要的数据。这个过程叫做反向代理。

 

那海绵宝宝就要问了,为什么都是通过代理服务器去获取数据,上面的栗子就是正向代理,下面的栗子就是反向代理呢?

我的想法是,虽然我们所需要的数据都是在我们无法直接访问的目标服务器上,但是正向代理是知道该服务器的地址的,而反向代理是不知道目标数据所在的地址的。可能还是没有说清楚,再举个栗子,正向代理就像是处于防火墙中的你访问外界你知道地址却无法访问的服务器,而反向代理是你在防火墙外,而防火墙内部的服务器处于安全考量不会把所有的服务器地址都暴露给你,只会把其中一台的地址告诉你,让你通过这台服务器来访问其他防火墙内部的服务器。话已至此,懂不懂就看天意了。

 

负载均衡

负载均衡,顾名思义,就是将服务器上的负载进行均衡处理,不至于让所有请求都跑到一台服务器上,导致一台服务器cpu占用率居高不下而其他服务器一直空闲的状况。在收到请求时,nginx会根据规则随机的将请求发送到指定的服务器上去处理(看了很多资料这里都说是随机,其实是不严谨的,应该说是按照均衡策略来发送指定服务器。但如果真的是随机分配,那就值得商榷了,看看是不是能够对其进行改进),其实看到这里就会发现这和我们上面提到的利用反向代理来访问目标服务器的过程连接上了。的确,在nginx进行负载均衡配置时,一般需要同时进行反向代理配置,通过反向代理来跳转到负载均衡。

上面提到了均衡策略,目前Nginx自带了3种负载均衡策略,还有2种第三方策略,我们来讨论讨论:

1、轮询(RR)(默认)

每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。比如说我们有四台服务器ABCD,然后收到了四个请求,这四个请求会按请求时间的先后分别分配给ABCD,第五个请求到来,又分配给A,如此继续。这种策略优点是简单且方便,但是缺点也很明显,可靠性不高,易造成负载分配不均衡。比如第一个请求需要消耗50%的cpu,二三四个请求每个只消耗10%的cpu,当第五个请求到来时,你再分配给A,这显然不合适。

2、指定权重
该策略可以指定轮询的几率,权重weight和访问比率成正比。这种情况适合于服务器之间性能不均的情况,比如服务器A有30个核,服务器BCD分别只有10个核,显然我们应该增大A的权重,以此来增大分配给A请求的几率,达到充分利用资源的目的。

3、ip_hash

首先说一下这种策略的原理,然后再来说一下这么做的原因。在Nginx收到请求后,利用请求的ip地址进行哈希结果分配,然后该ip地址的请求都使用该哈希值地址的服务器。那我们为什么要这么做呢?或者说什么情况下我们才需要这么做呢?当我们的程序不是无状态的时候,比如,我们在一个网站进行操作的时候,网站需要我们的登陆信息,登陆信息全都保存在session中,保存在我们此时所在的服务器上。如果我们发送另一个请求时,该请求自动分配给了别的服务器,这时候别的服务器又没有我们的登录信息,于是就会出现问题。因此我们需要设置一个访客固定访问某台服务器的策略。

4、fair(第三方)

按后台服务器的响应时间来分配请求,响应时间短的优先分配。简单来说就是服务器谁响应的快,就分配给谁,先到先得。虽然不满足均衡性,但是这种自适应性确保了在复杂的环境下能够物尽其用,需要在具体的环境中做好工作。

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url对应到一台服务器上。后端服务器为缓存时比较有效(这句话啥意思?)

 

Http Server

Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
---------------------  

原文:https://blog.csdn.net/kirito_lewis/article/details/83041172 

posted @ 2019-10-08 09:10  清哥哥  阅读(254)  评论(0编辑  收藏  举报