Nginx

文章目录

  • 一、目录结构
  • 二、多进程模型和请求基本流程
  • 三、基础配置
    • 3.1 最小配置文件
    • 3.2 servername的多种匹配方式
      • 3.2.1完整匹配
      • 3.2.2通配符匹配
      • 3.2.3通配符结束匹配
      • 3.2.4正则匹配
  • 四、反向代理
    • 4.1 反向代理到外网与内网主机的配置
    • 4.2 负载均衡配置
  • 五、动静分离
  • 六、URLRewrite 伪静态配置
  • 七、防盗链
  • 八、高可用

一、目录结构

Nginx_第1张图片
conf:核心配置文件
nginx.conf:会引用其他配置文件;
sbin:nginx运行程序;
html:默认网页和静态资源;

二、多进程模型和请求基本流程

Nginx_第2张图片
master主进程不处理业务,会协调Worker进程,Worker获取nginx.conf配置文件,并解析用户的请求找资源。

三、基础配置

3.1 最小配置文件

Nginx_第3张图片

#全局块
#user  nobody;
# 工作的进程个数,对应物理服务器的内核数
worker_processes  1;

#event块
# 配置事件驱动模块
events {
# 每个worker允许连接的客户端最大连接数
    worker_connections  1024;
}

#http块
http {
    #http全局块
    # 引入其他配置文件
    include       mime.types;
    # 请求资源默认类型,如果不包含在mime.types,就以application/octet-stream这种格式的流传输给客户端
    default_type  application/octet-stream;
    # 数据 0 拷贝
    sendfile        on;
    # 保持连接超时时间
    keepalive_timeout  65;
    
    #server块 虚拟主机
    server {
        #server全局块
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        #location块
        # 域名后面跟的子目录或路径,指的是uri,完全匹配或者按规则匹配。
        location / {
        	# html(/user/local/nginx/html):相对路径
            root   html;
            # 默认页
            index  index.html index.htm;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }
    #这边可以有多个server块
    server {
      ...
    }
}

3.2 servername的多种匹配方式

匹配上就不会往下找了

3.2.1完整匹配

【可以配置多个,空格隔开】
server_name www.test.com www.test1.com www.test.2com;

3.2.2通配符匹配

server_name *.test.com;

访问 xxx.test.com都会匹配上。

3.2.3通配符结束匹配

server_name www.test.*;

访问www.test.net || www.test.org都会匹配上。

3.2.4正则匹配

server_name ~^ [0-9]+.test.com$;

0-9数字开头的,666.test.com会匹配上。

四、反向代理

Nginx_第4张图片

4.1 反向代理到外网与内网主机的配置

#全局块
#user  nobody;
# 工作的进程个数,对应物理服务器的内核数
worker_processes  1;

#event块
# 配置事件驱动模块
events {
# 每个worker允许连接的客户端最大连接数
    worker_connections  1024;
}

#http块
http {
    #http全局块
    # 引入其他配置文件
    include       mime.types;
    # 请求资源默认类型,如果不包含在mime.types,就以application/octet-stream这种格式的流传输给客户端
    default_type  application/octet-stream;
    # 数据 0 拷贝
    sendfile        on;
    # 保持连接超时时间
    keepalive_timeout  65;
    
    #server块 虚拟主机
    server {
        #server全局块
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        #location块
        # 域名后面跟的子目录或路径,指的是uri,完全匹配或者按规则匹配。
        location / {
        	# 可以设置为网址,也可以配置为一组服务器
        	proxy_pass http://www.test.com;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }
    #这边可以有多个server块
    server {
      ...
    }
}

proxy_pass 与 root 二先一。

4.2 负载均衡配置

轮询策略

# weight配置负载均衡 权重的配置
# down 不参数负载均衡
# backup 备用服务器,没有机器可用了,备用机上
upstream httpds{
	server 192.168.44.102:80 weight = 8 down;
	server 192.168.44.103:80 weight = 2;
	server 192.168.44.104:80 weight = 1 backup;
}
#server块 虚拟主机
    server {
        #server全局块
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        #location块
        # 域名后面跟的子目录或路径,指的是uri,完全匹配或者按规则匹配。
        location / {
        	# 可以设置为网址,也可以配置为一组服务器【httpds:别名】
        	proxy_pass http://httpds;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }

五、动静分离

把静态资源放到nginx上,不放在tomcat中,让静态资源的请求不打到服务器。

#server块 虚拟主机
    server {
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        location / {
        	proxy_pass http://192.168.44.104:8080;
        }
        #正则匹配css、img、js请求路径
        location ~*/(css|img|js) {
        	root html;
        	index index.html;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }

Nginx_第5张图片

六、URLRewrite 伪静态配置

隐藏后端真实地址,比如真实地址:http://192.168.44.101/index.jsp?pageNum=2,可以请求访问:http://192.168.44.101/2.html。

#server块 虚拟主机
    server {
        # 监听服务器的端口号
        listen       8000;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        location / {
        	#匹配正则第一个括号$1
        	rewrite ^([0-9]+).html$         /index.jsp?pageNum=$1  break;
        	proxy_pass http://192.168.44.104:8080;
        }
        #正则匹配css、img、js请求路径
        location ~*/(css|img|js) {
        	root html;
        	index index.html;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
    }

Nginx_第6张图片

七、防盗链

upstream httpds{
	server 192.168.44.102:80 weight = 8 down;
	server 192.168.44.103:80 weight = 2;
	server 192.168.44.104:80 weight = 1 backup;
}
#server块 虚拟主机
    server {
        # 监听服务器的端口号
        listen       80;
        # 当前主机的主机名,也可配置域名。【可以配置多个,空格隔开】
        server_name  localhost;
        location / {
        	#匹配正则第一个括号$1
        	rewrite ^([0-9]+).html$         /index.jsp?pageNum=$1  break;
        	proxy_pass http://httpds;
        }
        #正则匹配css、img、js请求路径
        location ~*/(css|img|js) {
        	valid_referers none 192.168.44.101;
        	#检测无效跳转403状态码,只允许192.168.44.101
        	if ($invalid_referer){
        		#返回状态码
        		#return 401;
        		#break 隐藏地址
        		rewrite^/ /img/x.png break;
        	}
        	root html;
        	index index.html;
        }
        # 服务器发生错误返回的页面
        error_page   500 502 503 504  /50x.html;
        # 一旦用户访问 /50x.html,在它指向html文件夹,在里面找50x.html
        location = /50x.html {
            root   html;
        }
        
        error_page   401  /401.html;
        location = /401.html {
            root  html;
        }
    }

valid_referers:配置说明
Nginx_第7张图片

八、高可用

Keepalived本质就是为ipvs服务的。Keepalived的主要目的就是它自身启动为一个服务,它工作在多个LVS主机节点上,当前活动的节点叫做Master备用节点叫做Backup,Master会不停的向Backup节点通告自己的心跳,这种通告是基于VRRP协议的。Backup节点一旦接收不到Master的通告信息,它就会把LVS的VIP拿过来,并且把ipvs的规则也拿过来,在自己身上生效,从而替代Master节点。
Nginx_第8张图片

#第一台keepalived服务器
global_defs {  
    router_id server111
}
#vrrp keepalived内网通讯协议
vrrp_instance VI_1 {      #虚拟路由器名称,在一个keepalived可以启多个虚拟路由器,每个虚拟路由器的名字都不一样
    state MASTER          #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP,一般都是配置backup,该值无法决定身份,最终还是通过比较priority
    interface eth0        #绑定为当前虚拟路由器使用的网卡名
    virtual_router_id 51  #每个虚拟路由器惟一标识,范围:0-255,同一组虚拟路由器的vrid必须一致
    priority 100          #当前物理节点在此虚拟路由器的优先级,范围:1-254,每个keepalived主机节点此值不同
    advert_int 1          #vrrp通告的时间间隔,默认1s
 
    authentication {      #认证机制 同一组保持一致
        auth_type PASS    #AH(不推荐)或PASS
        auth_pass 1111    #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
    }
 
    virtual_ipaddress {                      #虚拟IP
        10.0.0.100                           #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认为/32
        10.0.0.101/24 dev eth1               #指定VIP的网卡
        10.0.0.102/24 dev eth2 label eth2:1  #指定VIP的网卡label
        192.168.44.200
    }
}

vrrp_instance router2 {
    state BACKUP
    interface eth0
    virtual_router_id 60
    priority 80
    advert_int 1
 
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
 
    virtual_ipaddress {
        10.0.0.102/24 dev eth0 label eth0:2
        10.0.0.103/24 dev eth0 label eth0:3
    }
}
#第二台keepalived服务器
global_defs {  
    router_id server110
}
#vrrp keepalived内网通讯协议
vrrp_instance VI_1 {      #虚拟路由器名称,在一个keepalived可以启多个虚拟路由器,每个虚拟路由器的名字都不一样
    state BACKUP          #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP,一般都是配置backup,该值无法决定身份,最终还是通过比较priority
    interface eth0        #绑定为当前虚拟路由器使用的网卡名
    virtual_router_id 51  #每个虚拟路由器惟一标识,范围:0-255,同一组虚拟路由器的vrid必须一致
    priority 50          #当前物理节点在此虚拟路由器的优先级,范围:1-254,每个keepalived主机节点此值不同
    advert_int 1          #vrrp通告的时间间隔,默认1s
 
    authentication {      #认证机制 同一组保持一致
        auth_type PASS    #AH(不推荐)或PASS
        auth_pass 1111    #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
    }
 
    virtual_ipaddress {                      #虚拟IP
        10.0.0.100                           #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认为/32
        10.0.0.101/24 dev eth1               #指定VIP的网卡
        10.0.0.102/24 dev eth2 label eth2:1  #指定VIP的网卡label
        192.168.44.200
    }
}

vrrp_instance router2 {
    state BACKUP
    interface eth0
    virtual_router_id 60
    priority 80
    advert_int 1
 
    authentication {
        auth_type PASS
        auth_pass 12345678
    }
 
    virtual_ipaddress {
        10.0.0.102/24 dev eth0 label eth0:2
        10.0.0.103/24 dev eth0 label eth0:3
    }
}

连接测试ip漂移
Nginx_第9张图片

你可能感兴趣的:(网络,nginx,服务器,运维)