nginx 配置

1、location
location [ = | ~ | ~* | ^~ ] {…}
1.1 重点概念 location modifier 即 []中的 ~ ~* ^等关键符号, 这会定义 Nginx 如何去匹配其后的 pattern ,以及该 pattern 的最基本的属性(简单字符串或正则表达式)
1.2规则
= : 表示精确的URI匹配,pattern只能是字符串
~: 表示区分大小写的正则匹配,只能是正则,不能字符串
~*:表示不区分大小写的正则匹配
!~ && !~:表示区分大小写不匹配的正则和不区分大小写的不匹配的正则
/:通用匹配,任何请求都会匹配到
: location modifier为空,URI 只能是普通字符串,非正则
@ 指定一个命名的location,一般只用于内部重定向请求。例如 error_page, try_files
^~ 即表示只匹配普通字符(空格)。使用前缀匹配,^表示“非”,即不查询正则表达式。如果匹配成功,则不再匹配其他location。
1.3匹配顺序
1.3.1.首先匹配=
1.3.2.其次匹配^~
1.3.3.再其次按照配置文件的顺序进行正则匹配、如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
1.3.4.常规字符串匹配类型。按前缀匹配。
1.4 pattern例子
#规则A
location = / {
}
#规则B
location = /login {
}
#规则C
location ^~ /static/ {
}
#规则D
location ~ .(gif|jpg|png|js|css)$ {
}
#规则E
location ~
.png$ {
}
#规则F
location !~ .xhtml$ {
}
#规则G
location !~* .xhtml$ {
}
#规则H
location / {
}
1.4实践
第一个必选规则:
location = / {
proxy_pass http://tomcat:8080/index
}
第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
root /webroot/static/;
}

location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
第三个规则就是通用规则,用来转发动态请求到后端应用服务器
非静态文件请求就默认是动态请求,自己根据实际把握
毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
proxy_pass http://tomcat:8080/
}

参考:https://www.cnblogs.com/kevingrace/p/6804429.html
2、proxy_pass
location /login {
#proxy_pass http://www.sohu.com/
proxy_pass http://www.sohu.com
}
如上http://www.sohu.com之后带/,当前跳转地址传递的路径是/login后面的地址路径,此处/login后面没有地址所以实际访问的地址是http://www.sohu.com。如果我们访问nginx地址是:http://192.168.0.101:8080/login/demo,那么如果匹配这个location后,实际访问的地址就会是:http://www.sohu.com/demo
3.rewrite 重新路由,rewrite有5中命令模式
3.1、break; 如下:
location /login {
rewrite ^/ /demo.html break;
root home/;
}
如果location /login匹配成功,则直接在home路径中查找demo.html文件,然后跳转到demo.html。注意这是内部跳转,浏览器上的地址url不会变,还是以/login结尾
3.2、redirect
location /login {
rewrite ^/ /demo.html redirect;
root home/;
}
和break差不多,不过这个表示外部跳转,也会跳转到demo.html页面,不过浏览器地址会自动变成demo.html
3.3permanent ; 和redirect作用类似
3.4、last; 如下

  location  /login {
       rewrite  ^/  /demo.html  last;
       root  home/;
}
 
location  /demo.html {
       rewrite  ^/  /demo.html  break;
       root  home/;
}

如果是last修饰的话,nginx会将/demo.html地址和其他location的地址进行匹配,然后找到匹配的地址,继续执行下去。这里他会执行到 /demo.html 的location中,然后内部跳转到/demo.html页面
3.5、没有修饰,就是无任何修饰。如下

location  /login {
       rewrite  ^/  /demo.html ;
       root  home/;
}

可以看到这个rewrite后面没有任何修饰。当没有任何修饰的情况下,匹配中location后,不会停止,会继续想下面的location继续匹配下去。知道匹配到最后一个,使用最后一个匹配到的。
参考:https://blog.youkuaiyun.com/zhanglei082319/article/details/88830606
4、upstream负载均衡
upstream 用以配置负载的策略,nginx自带的有:轮询/权重/ip_hash。特殊需求可用第三方策略(使用较少)。

upstream test{
    server 192.168.0.101:8081;
    server 192.168.0.102:8081;
}
 
upstream test1 {
    server 192.168.0.101:8081 weight=2;
    server 192.168.0.102:8081 weight=1;
}
 
upstream test2 {
    ip_hash
    server 192.168.0.101:8081;
    server 192.168.0.102:8081;
}
 
server{
   listen   80;
   server_name  localhost;
 
   location /login {
       proxy_pass   http://test/
   } 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值