1.基本概念
1.1.Nginx简介
Nginx是一个高性能的HTTP和反向代理服务器。
特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现好。
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。
1.2.正向代理
需要客户自己在浏览器配置代理服务器地址。
例如:在大陆访问www.google.com,我们需要一个代理服务器,我们通过代理服务器去访问谷歌,这个过程就是正向代理。
1.3.反向代理
反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
1.4.负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们说的负载均衡。
1.5.动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
2.常用命令
./nginx -v :查看Nginx版本
./nginx :启动Nginx
./nginx -s stop 关闭Nginx
./nginx -s reload 重新加载
./nginx -s reopen 重启
./nginx -s quit 优雅停止
./nginx -t 测试配置文件是否正确
3.配置文件
3.1 配置文件组成
由全局块+events块+http块组成。
全局块:
从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令。主要包括:
1.配置运行Nginx服务器的用户(组);
2.允许生成的worker process数;
3.进程pid存放路径;
4.日志存放路径和类型;
5.配置文件的引入等。
worker_processes 1:这个是Nginx服务器并发处理服务的关键配置,worker_processes值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。
events块:
events块设计的指令主要影响Nginx服务器与用户的网络连接。常用的设置包括:
1.是否开启对多work process下的网络连接进行序列化;
2.是否允许同时接收多个网络连接;
3.选取哪种事件驱动模型来处理连接请求;
4.每个work process可以同时支持的最大连接数等。
下面的例子表示每个work process支持的最大连接数为1024。这部分配置对Nginx的性能影响较大,在实际中应该灵活配置。
events {
worker_connections 1024;
}
http块:
Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
http块又包括http全局块和server块。
1.http全局块:http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
2.server块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
每个server块也可以分为全局server块,以及可以同时包含多个location块。
1.全局server块:最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。
2.location块:一个server块可以配置多个location块。这块的主要作用是基于Nginx服务器接收到的请求字符串(例如server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
3.2.配置实例
目标1:根据访问的路径跳转到不同的服务器中去。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#实例一的配置
server {
listen 80;
#server_name localhost;
server_name 192.168.71.167;
location / {
root html;
#添加下面的一句话
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#实例二的配置
server {
listen 9001;
server_name 192.168.71.167;
location ~/edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~/vod/ {
proxy_pass http://127.0.0.1:9090;
}
}
}
目标2:负载均衡
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream myserver{
#ip_hash;
server 192.168.71.167:8080 weight=1;
server 192.168.71.167:8081 weight=1;
}
server {
listen 80;
#server_name localhost;
server_name 192.168.71.167;
location / {
root html;
proxy_pass http://myserver;
proxy_connect_timeout 10;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4.原理介绍
一个Nginx是由一个master进程和多个worker进程组成的。
客户端发送请求到Master,然后给worker,再由这些work争抢处理这个请求。
一个master多个worker的好处:
1.可以使用nginx -s reload进行热部署方式;
2.每个worker是独立的进程,如果有其中的一个worker出现了问题,其他worker独立的继续进行争抢,实现请求的过程,不会造成服务的中断;
每个worker进程都可以把CPU发挥到极致,一般来说worker数和服务器的CPU数相等是最为适宜的。
发送请求:访问静态资源占用2个连接,反向代理占用4个连接。
5.Nginx的动态服务发现
5.1.手工配置
1.手工配置Nginx后端应用的Upstream文件;
2.然后进行nginx -s reload
5.2 k8s Ingress
1.k8s 监控service,pod 新增删除,改写Nginx配置;
2.自动执行 nginx -s reload
具体参考:http://t.csdn.cn/gctuU