文章目录
- 一、目录结构
- 二、多进程模型和请求基本流程
- 三、基础配置
- 3.1 最小配置文件
- 3.2 servername的多种匹配方式
- 3.2.1完整匹配
- 3.2.2通配符匹配
- 3.2.3通配符结束匹配
- 3.2.4正则匹配
- 四、反向代理
- 4.1 反向代理到外网与内网主机的配置
- 4.2 负载均衡配置
- 五、动静分离
- 六、URLRewrite 伪静态配置
- 七、防盗链
- 八、高可用
一、目录结构
conf:核心配置文件
nginx.conf:会引用其他配置文件;
sbin:nginx运行程序;
html:默认网页和静态资源;
二、多进程模型和请求基本流程
master主进程不处理业务,会协调Worker进程,Worker获取nginx.conf配置文件,并解析用户的请求找资源。
三、基础配置
3.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 / {
# 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会匹配上。
四、反向代理
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;
}
}
六、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;
}
}
七、防盗链
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:配置说明
八、高可用
Keepalived本质就是为ipvs服务的。Keepalived的主要目的就是它自身启动为一个服务,它工作在多个LVS主机节点上,当前活动的节点叫做Master备用节点叫做Backup,Master会不停的向Backup节点通告自己的心跳,这种通告是基于VRRP协议的。Backup节点一旦接收不到Master的通告信息,它就会把LVS的VIP拿过来,并且把ipvs的规则也拿过来,在自己身上生效,从而替代Master节点。
#第一台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漂移