nginx是高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表面能支持高达50,000个并发连续数
如果把局域网中的客户端访问Internet,则需要通过代理服务器来访问,这种代理服务就叫正向代理
例如从国内访问谷歌一般都需要科学上网,配置一个代理服务器,通过代理服务器来访问,这个过程就叫做正向代理
客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的地址
与正向代理不同的是,正向代理隐藏真实客户端,反向代理隐藏真实服务端。
增加服务器数量,将请求分发到各个服务器上,从原先请求集中到单个服务器改为分发到多个服务器,即为负载均衡
为了加快网站的解析速度,把动态页面和静态页面由不同的服务器来解析,降低原来单个服务器的压力,即为动静分离
有两种实现方法,
- 把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流的方案
- 静态和动态文件混合在一起发布,通过nginx分开
sudo apt-get install nginx
安装位置在/etc/nginx
nginx -v
查看版本号nginx
启动nginx -s stop
关闭nginx -s reload
重新加载
位置:/etc/nginx/nginx.conf
从配置文件开始到events块的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户组,允许生成worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等
主要影响nginx服务器与用户网络的连接,常用的设置包括是否开启对多work pricess下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work pricess可以同时支持的最大连接数等
这部分对nginx性能影响最大,实际开发中应该灵活配置
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等
配置虚拟主机的相关参数,一个http中可以有多个server
配置请求的路由,以及各种页面的处理情况
通过server中配置的server_name
和listen
请求,会转发到location域中的proxy_pass
只需要配置多个location域即可,在location后面加上以下字符表示使用正则表达式匹配路径
=
用于不含正则表达式的uri前,要求请求字符串与uri严格匹配~
用于表示uri包含正则表达式,区分大小写~*
用于表示uri包含正则表达式,不区分大小写^~
用于不含正则表达式的uri前,要求nginx服务器找到表示uri和请求字符串匹配度最高的location后处理此location请求
-
在http域中加上upstream配置
upstream Name { Server x.x.x.x:1000; Server x.x.x.x:1001; }
-
在location域中的proxy_pass中添加配置
proxy_pass http://Name;
Name为自定义,要和upstream的一致
- 轮询(默认)
- weight 通过权重分配,权重越高分配的用户越多,可以在upstream.server的url后面加上
weight=xx
- ip_hash(一致性哈希) 每个请求按访问ip的hash结果分配,这样可以保证每个访客固定访问一个后端服务器,解决session问题,在upstream域中加上
ip_hash;
即可 - fair(第三方) 根据响应时间分配,响应时间短的优先分配,在upstream域中加上
fair;