Linux中ngixn配置②

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中ngixn配置②相关的知识,希望对你有一定的参考价值。

6.15 if
语法:if (condition) {…}
应用场景:
server段
location段
常见的condition
变量名(变量值为空串,或者以“0”开始,则为false,其他的均为true)
以变量为操作数构成的比较表达式(可使用=,!=类似的比较操作符进行测试)

正则表达式的模式匹配操作
~:区分大小写的模式匹配检查
~:不区分大小写的模式匹配检查
!~和!~
:对上面两种测试取反
测试指定路径为文件的可能性(-f,!-f)
测试指定路径为目录的可能性(-d,!-d)
测试文件的存在性(-e,!-e)
检查文件是否有执行权限(-x,!-x)

6.15.1基于浏览器实现分离案例:

//实现火狐浏览器访问
if ($http_user_agent ~ Firefox) {
rewrite ^(.*)$ /firefox/$1 break;
}

//实现IE浏览器访问
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}

//实现谷歌浏览器访问
if ($http_user_agent ~ Chrome) {
rewrite ^(.*)$ /chrome/$1 break;
}
技术分享图片

注意:以下本人实现用谷歌浏览器访问的,在html里要创建Chrome目录,把imgs移动到Chrome目录下。
技术分享图片


6.15.2 防盗链案例

location ~* .(jpg|gif|jpeg|png)$ {
valid_referer none clocked www.idfsoft.com;
     if ($invalid_referer) {
     rewrite ^/ http://www.idfsoft.com/403.html;
       }
 }

集群:就是多台服务器做同样一件事

6.16 反向代理与负载均衡
nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离以及负载均衡,从而大大提高服务器的处理能力。
nginx实现动静分离,其实就是在反向代理的时候,如果是静态资源,就直接从nginx发布的路径去读取,而不需要从后台服务器获取了。
但是要注意,这种情况下需要保证后端跟前端的程序保持一致,可以使用Rsync做服务自动同步或者使用NFS,MFS分布式共享存储。
Http Proxy 模块,功能很多,最常用的是 proxy_pass 和proxy_cache
如果要使用proxy_cache,需要集成第三方的ngx_cache_purge模块,用来清除指定的URL缓存。这个集成需要在安装nginx的时候去做,如: ./configure --add-module=../ngx_cache_purge-1.0 ......
nginx通过upstream模块来实现简单的负载均衡,upstream需要定义在http段内在
在upstream段内,定义一个服务器列表,默认的方式是轮询,如果是确定同一个访问者发出的请求总是由同一个后端服务器来处理,可以设置ip_hash,如:

upstream web {
#ip_hash; #ip_hash 是只能固定一个访问,不能刷新访问
server 192.168.209.13 weight=5;
server 192.168.209.14 weight=5;
}

技术分享图片
注意:这个方法本质还是轮询,而且由于客户端的ip可能是不断变化的,比如动态ip,代理,×××等,因此ip_hash并不能完全保证同一个客户端总是由同一个服务器来处理。
定义好upstream后,需要在server段内添加如下内容:

server {
     location / {
         proxy_pass http://web;
   }
}

访问效果:
技术分享图片
技术分享图片

以上是关于Linux中ngixn配置②的主要内容,如果未能解决你的问题,请参考以下文章

linux学习:Nginx--常见功能配置片段与优化-06

Ngixn 编译安装 (版本:1.12.1)

青蛙学Linux—Zabbix Web使用之模板②监控项

Linux系统(RHEL)配置IP地址

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

ngx-translate实现国际化:this.translate.use()this.translate.get()this.translate.instant()onLangChange(代码片段