最通俗易懂的nginx

nginx

什么是nginx?

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

nginx的作用:
1.作为web服务器,支持更多的并发连接,体现更高的效率,能够支持高达 50,000 个并发连接数的响应.
2.反向代理,负载均衡服务器,当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
3.HTTP服务器,动静分离,即动态资源与静态资源的分离
4.解决跨域问题
5.限制用户请求次数,设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟个请求)。

nginx配置文件

Nginx的核心配置文件默认是放在**/usr/local/nginx/conf/nginx.conf**。

#指令名	指令值;  #全局块,主要设置Nginx服务器整体运行的配置指令
worker_processes  1;

#events块,主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
events {
    worker_connections  1024;
}

#http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...  
http {

		#指令名	指令值;
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

		#server块,是Nginx配置和虚拟主机相关的内容
    server {
        listen       80;
        server_name  localhost;
        
        #location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理
        location / {
        		
        		#指令名	指令值;
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

nginx中有三大块:全局块、events块、http块

全局块:主要设置Nginx服务器整体运行的配置指令
主要设置
user [user group]:用于配置运行Nginx服务器的worker进程的用户和用户组,默认为nobody。
worker_processes [数字]:生成工作进程的数量,默认为1.
daemon [off|on]:设置nginx是否以守护进程启动,默认值未on
pid [路径]:用来配置Nginx当前master进程的进程号ID存储的文件路径,默认为:/usr/local/nginx/logs/nginx.pid
error_log [路径+日志级别]:用来配置Nginx的错误日志存放路径,error_log logs/error.log error;
include [file]:用来引入其他配置文件,使Nginx的配置更加灵活

events块:主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
主要设置
accept_mutex [on|off]:用来设置Nginx网络连接序列化,解决惊群现象,默认为on
multi_accept [on|off]:用来设置是否允许同时接收多个网络连接,默认为off
worker_connections [数量]:用来配置单个worker进程最大的连接数,默认为512
use [method]:用来设置Nginx服务器选择哪种事件驱动来处理网络消息,默认根据操作系统定

http块:是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置,里面又包含server块location块
default_type [mine type]:用来配置Nginx响应前端请求默认的MIME类型。默认值default_type text/plain;
access_log:用来设置用户访问日志的相关属性,记录用户访问的所有请求
log_format:用来指定日志的输出格式。
sendfile [on|off]:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能,默认为off
keepalive_timeout [time]:用来设置长连接的超时时间,默认为75s
keepalive_requests [数量]:用来设置一个keep-alive连接使用的次数,默认为100

server块
listen:用来配置监听端口,默认监听80端口
server_name:用来设置虚拟主机服务名称,就是ip地址或者域名,默认值为“”

location块:
location [ = | ~ | ~ | ^~ |@ ] uri{…}*:用来设置请求的URI,可以不包含正则表达式,也可以包含正则表达式
root [path]:设置请求的根目录,默认为html
alias [path]:用来更改替换location的URI
index [file]:设置网站的默认首页
error_page [code … [=[response]] uri;]:设置网站的错误页面

正向代理

什么是正向代理?
是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端(目的是为了保护客户端用户),比如客户端使用的是内网,正常情况下,是无法访问外网的网址的,此时需要一个代理服务器,客户端请求代理服务器,然后转发到目标服务器,获取的结果再返回到客户端。
在这里插入图片描述

反向代理

什么是反向代理?
在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端。也就是说客户端访问的是反向代理服务器的ip地址,然后通过特定的匹配去转发到目标服务器上,客户端是不知道目标服务器的地址。

在这里插入图片描述

nginx反向代理配置文件的修改(主要修改server_name和proxy_pass)
server_name:主机名,这里填写反向代理服务器的地址
proxy_pass:nginx 代理到的地址

负载均衡

什么是负载均衡?
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。nginx默认使用轮询算法来实现负载均衡。

nginx负载均衡的配置文件的主要设置:
1.轮询
http块中设置:

upstream myserver { 
	server ip地址; 
	server ip地址; 
}

在location块中设置:

proxy_pass  http://myserver

默认就实现轮询算法来实现负载均衡。
2.指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
http块中设置:

upstream myserver { 
	server 192.168.0.14 weight=8; 
	server 192.168.0.15 weight=10; 
} 

3.IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。也就是说通过ip地址和后端的机器数量来计算hash值,客户端发来的请求就固定在hash值一样的服务器上。
http块中设置:

upstream myserver { 
	ip_hash; 
	server 192.168.0.14:88; 
	server 192.168.0.15:80; 
} 

4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
http块中设置:

upstream myserver { 
 	server server1; 
	server server2; 
 	fair; 
} 

动静分离

什么是动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,将静态资源部署在Nginx上(也可以是一个单独的服务器上),当一个请求来的时候,如果是静态资源的请求,就直接到nginx配置的静态资源目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给后台应用去处理,从而实现动静分离。
在这里插入图片描述
动静分离的主要配置文件修改
多加几个location块去映射到静态资源中,这样反向代理服务会直接拿到/data/image下的静态资源
在server块中:

location /image{
	root  /data;
	index index.html;
}

高可用

什么是高可用
高可用是指同一时间提供服务的只有一台设备,提供服务的设备挂掉之后,备份服务器便开始提供服务.
什么是Keepalived
它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现web服务端的高可用。我们使用keepalived来管理两台设备的Nginx,并虚拟出一个IP,我们现在两台装有Nginx的设备分别是192.168..和192.168..,那么我们可以虚拟出一个192.168.xx.xx的IP,外界请求直接访问虚拟IP而不是真正的Nginx,让虚拟IP去访问提供服务的Nginx,然后再由Nginx去访问tomcat。

安装Keepalived
https://blog.csdn.net/xyang81/article/details/52554398

修改主和备nginx服务器上的keepalived 配置文件 /etc/keepalived/keepalived.conf 文件
主nginx

vrrp_script chk_http_port {
        script "/usr/local/nginx/nginx_check.sh"
        interval 2                              # 检测脚本执行的间隔
        weight 2
}
vrrp_instance VI_1 { 
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99  
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.101.100       #可以多个虚拟IP,换行即可
    }
}

备nginx

vrrp_script chk_http_port {
        script "/usr/local/nginx/nginx_check.sh"
        interval 2                              # 检测脚本执行的间隔
        weight 2
}
vrrp_instance VI_1 { 
    state BACKUP           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 99            #MASTER权重要高于BACKUP 比如BACKUP为99  
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.101.100       #可以多个虚拟IP,换行即可
    }
}

执行的脚本文件(用来判断nginx服务进程是否可用):

#!/bin/bash
A=`ps -C nginx ¨Cno-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致。
设置实例绑定的网卡:通过ifconfig查看本地主机的网卡名称

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值