学习目标和内容
基于ngx_http_access_module模块,默认可使用
语法:
deny ip 禁止ip访问
allow ip 允许访问
默认是允许所有访问的
①配置
②测试使用
加一个测试:
起另外一台虚拟机操作,虚拟机没有浏览器,学习使用curl进行请求发送
curl -I 访问的url地址 可以返回header头信息
基于ngx_http_auth_basic_module模块,默认可用
语法:
加密文本: 由htpasswd命令实现
htpasswd httpd里的一个工具 如果没有 可以通过yum install httpd-tool
创建密码文件:htpasswd -c 生成到的路径 用户名
-c 创建新文件,如果再次添加用户去掉-c参数,否则会被删除覆盖原来的
auth_basic “提示信息”
auth_basic_user_file /etc/nginx/htpasswd;
实现:
①配置实现
②测试查看
在实际业务场景中,需要使用软件新版本的功能、特性。
①停止掉服务,删除编译的安装的软件包和源码包
②重新解压编译安装即可
注意:如果有需要,请备份配置文件和网站目录里的资源文件
升级软件版本之后,需要启动新的版本,启动不了,端口已经被占用
如果直接把旧版本的服务停止掉,会影响线上业务的使用
最佳解决办法:
①旧的不先停掉
②新的又可以起来
③旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程
-USR2 平滑启动一个进程(平滑升级)
-WINCH 优雅的关闭子进程
-QUIT 优雅关闭主进程
①编译安装新版本
shell > tar xvf nginx-1.14.0.tar.gz
shell > cd nginx-1.14.0
shell > ./configure --prefix=/usr/local/nginx --with-http_ssl_module
shell > make && make install
以上操作完成之后,会把原来的旧版本备份为nginx.old
②新旧版本同时运行
shell > kill -USR2 主进程号
③停止掉旧进程
查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程
shell > kill -WINCH 旧的主进程号
shell > kill -QUIT 旧的主进程号
nginx本身官方没有的功能,一些开源开发者定制开发了,把代码公布出来,可以通过加载第三方模块的方式,使用新的功能
需求:显示目录文件列表,实现下载功能
配置实现
使用第三方模块插件,美化显示效果
https://www.nginx.com/resources/wiki/modules/fancy_index/
https://github.com/aperezdc/ngx-fancyindex
第三方模块列表显示效果
实现操作步骤:
①重新编译安装加载第三方模块
记得先解压第三方软件模块
shell > tar zxvf ngx-fancyindex-v0.4.2.tar.gz
shell > cd /root/soft/nginx-1.14.0
shell > ./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/root/soft/ngx-fancyindex-0.4.2/
shell > make && make install
安装完成之后
②配置实现
③测试查看效果
测试配置文件,进行重载配置。如果模块安装完成,配置成功,就可以看到之前图片的效果了
openresty 在nginx的基础上,结合lua脚本实现高并发等web平台。
安装步骤:
shell > tar xvf openresty-1.13.6.2.tar.gz
shell > cd openresty-1.13.6.2
shell > ./configure --prefix=/usr/local/openresty
shell > make && make install
openresty实际还是nginx,做了一个软连接
查看版本号和默认编译参数
测试使用一下模块功能
使用lua模块输出一个页面文字信息
tengine是alibaba公司,在nginx的基础上,开发定制,更加服务自己业务的服务器软件。
后来进行开源。
shell > tar xvf tengine-2.2.2.tar.gz
shell > cd tengine-2.2.2
shell > ./configure --prefix=/usr/local/tengine
shell > make && make install
查看软件参数和加载的模块
(1) ⼀些动态URL地址需要伪装成静态HTML,便于搜索引擎抓取(seo优化),需要Rewrite来处理
例如:是a.html 真是其实访问的是a.php 把动态的伪装成为静态
360buy.com jd.com
xiaomi mi
Location 配置语法
①location [ = | ~ | ~* | \^~ ] uri { ... }
前缀+uri(字符串/正则表达式)
②location \@name { ... }
\@+name
前缀的含义:
= :精确匹配(必须全部相等)
~ :大小写敏感
~* :忽略大小写
\^~ :只需匹配uri部分
\@ :内部服务跳转
案列:
location = / {
#规则
}
# 则匹配到 `http://www.example.com/` 这种请求
location ~ /Example/ {
#规则
}
#请求示例
#http://www.example.com/Example/ [成功]
#http://www.example.com/example/ [失败]
location ~* /Example/ {
#规则
}
# 则会忽略 uri 部分的大小写
#http://www.example.com/Example/ [成功]
#http://www.example.com/example/ [成功]
4> \^~,只匹配以 uri 开头
location \^~ /img/ {
#规则
}
#以 /img/ 开头的请求,都会匹配上
#http://www.example.com/img/a.jpg [成功]
#http://www.example.com/img/b.mp4 [成功]
#http://www.example.com/bimg/b.mp4 [失败]
#http://www.example.com/Img/b.mp4 [失败]
5> \@,nginx内部跳转
location /img/ {
error_page 404 \@img_err;
}
location \@img_err {
# 规则
}
#以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 \@img_err 这条规则上
location匹配优先级
(location =) > (location 完整路径) > (location \^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
return 语法
返回服务器的状态码
语法:
return 服务器状态值
该指令⽤于结束规则的执⾏并返回状态码给客户端.
403 Forbidden.服务器已经理解请求,但是拒绝执⾏它
404 Not Found.请求失败,请求所希望得到的资源未在服务器上发现.404这个状态码被⼴泛应⽤于当服务器不想揭示为何请求被拒绝,或者没有其他适合的响应可⽤的情况下.
500 Internal Server Error.服务器遇到⼀个未曾预料的状况,导致它⽆法完成对请求的处理.⼀般来说,这个问题都会在服务器的程序码出错时出现.
502 Bad Gateway.作为⽹关或代理⼯作的服务器尝试执⾏请求时,从上游服务器接收到⽆效的响应.
503 Service Unavailable.由于临时的服务器维护或过载,服务器当前⽆法处理请求.这个状况是临时的,并且将在⼀段时间以后恢复.503状态码的存在并不意味着服务器在过载的时候必须使⽤它.某些服务器只不过是希望拒绝客户端的连接.
504 Gateway Timeout作为⽹关或代理⼯作的服务器尝试执⾏请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP,FTP,LDAP)或辅助服务器(例如DNS)
收到响应。
请求状态码:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
rewrire需要pcre才能开启此模块
rewrite语法
匹配到,替换为其他内容
语法 rewrite 匹配内容 替代内容 标记
官方文档地址:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
flag标记说明:
last #本条规则匹配完成后,继续向下匹配新的location URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则
redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
需求:
访问web1下的test.php 实际test.php 不存在 所以重写定向到test.html里
①创建测试页面文件
②重写配置
shell > vim /usr/local/nginx/conf/nginx.conf
③重载配置测试访问
总结:实际不存在的文件,通过重写URI规则,定向到一个存在的文件。
这个在实际工作中,常常用来seo优化的伪静态的使用。当然实际是要把真实的后端的页面,伪装为静态html页面。
需求:
公司的域名升级了,需要启用新的用户使用。
但是用户却不知道,还可能使用旧的域名访问网站。
故把旧域名的来源,重定向到新的域名。
需求:
web1服务器上资源文件
web2服务器经常链接显示web1服务器图片
用户经常访问web2服务器的图片,以为是web2自己的,结果web2每次耗费很多流量。
实际web2没有从中获得效益
解决方案:
①图片加水印
②通过判断referer来源,确定是否返回对应的资源文件
referer 本次请求的上次连接是什么 上次的来源
语法:
valid_referers none blocked servername
none blocked 没有referfer的情况,直接访问资源的情况
if ($invalid_referer) {}
①创建两个server虚拟机
②编写通过页面访问图片
上传此页面分别到web1和web2目录中
③配置web1的防盗链,防止web2来获取加载图片资源
④显示一个其他图片
跳转到的图片不能在web1下了,如果还在web1下,还会一直处于防盗链状态
配置图片跳转
实现效果
实现隐藏真实服务的操作,起到一定安全作用
①在http段加入server_tokens off
②重载配置测试访问