Nginx学习总结
Nginx
基本概念
Nginx是一个高性能的http和反向代理的服务器,占用内存少,并发能力强,主要应用有反向代理,负载均衡,动静分离等等
正向代理:局域网中的用户想要访问外部Internet,可以走代理服务器,这就是正向代理。正向代理客户端需要配置,即我们在浏览器中设置使用代理服务器
反向代理:客户端不需要配置,对代理无感知,在客户端眼里代理服务器和目标服务器是一个服务器(但暴露的是代理服务器的地址),客户端将请求发送给代理服务器,由代理服务器实现转发
负载均衡:将请求分发到不同的服务器中,以减少每个服务器并发的压力
动静分离:动态页面和静态页面由不同服务器解析
配置文件
第一部分 :全局块。从配置文件开始到events块之间的内容,会设置一些影响nginx服务器整体运行的指令,主要包括配置运行Nginx服务器的用户(组)、允许生成的Worker process数,进程PID存放路径,日志存放路径和类型,以及配置文件的引入等

第二部分:events块。主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接受多个网络连接,选取哪种事件驱动模型来处理连接请求,每个word process可以同时支持的最大连接数等

比如上图就表明每个work process支持的最大连接数是1024
第三部分:http块。
http全局块:包括文件引入,MIME-TYPE定义,日志自定义,连接超时时间,单链请求上限

server块:指定了我们请求转发的规则

反向代理
server {
listen 80;
server_name localhost; #即nginx对外暴露的地址
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8080; #proxy_pass指定了访问/这个location时 会转发到这个地址
}
location ~/edu/ {
proxy_pass http://127.0.0.1:8081; #访问路径中含有edu时,会转发到这个地址
}
location中字符:
=:要求严格匹配
~:匹配正则表达式,不区分大小写
~*:匹配正则表达式,区分大小写
^~:匹配与给定url最像的location
负载均衡
http{
#通过upstream将多个server分组了
upstream myserver{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
server{
}
}
server {
listen 80;
server_name localhost; #即nginx对外暴露的地址
location / {
proxy_pass http://myserver; #proxy_pass指定了访问/这个location时 会转发到myserver这个分组中
}
nginx中常用的分配方式:
1.轮询(默认):每个请求按时间顺序分配到不同的服务器中,如果服务器挂掉则剔除
2.weight:weight代表权重,默认为1,权重越高则分配的客户越多
3.ip_hash:每个用户按ip的哈希值分配,每个用户总是能访问同一个服务器
upstream myserver{
ip_hash;
server 127.0.0.1:8080 ;
server 127.0.0.1:8081 ;
}
4.fair:按后端服务器响应时间分配,优先分配相应时间短的服务器
upstream myserver{
server 127.0.0.1:8080 ;
server 127.0.0.1:8081 ;
fair;
}
动静分离
location /image/ {
root /data/;
}
root表明了转发的路径为 root+path
比如我们访问 http://localhost:80/image/1.jpg 则转发给http://localhost:80/data/image/1.jpg
nginx原理
Nginx的进程有Master进程和Worker进程。
Master负责分配请求任务,Worker负责执行具体的任务。
一个Master对应多个Worker,当一个任务出现的时候,Master下的多个空闲的Worker参与争抢任务。
真是因为一个Master下有多个Worker,才能保证Nginx可以不重启直接重新加载配置文件,当执行nginx -s reload的时候,空闲的Worker会重启,工作的Worker还是按照原来的配置运行,当它处理完之后,它也会按照新的配置进行重启,所以Nginx才能不停机更新。
Worker的数量应该与CPU数量相等,这样才能把Nginx的服务发挥到极致。
一个请求会占用2个(如果资源由nginx存储)或者4个Worker的连接数(还需要访问tomcat服务器)。
2个:客户端→Worker和Worker→客户端
4个:如果有动态资源,Worker和Tomcat之间还有一对连接数
静态资源的最大并发数:worker_connection * worker_process / 2。
如果是作为反向代理,最大并发数:worker_connection * worker_process / 4。

浙公网安备 33010602011771号