用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问
用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断
if (条件匹配) {
action
}
= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!= #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真
-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)
server{
listen 80;
listen 443 ssl;
ssl_certificate /apps/nginx/conf.d/ssl/www.wzw.com.crt;
ssl_certificate_key /apps/nginx/conf.d/ssl/www.wzw.com.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
server_name www.wzw.com;
root /apps/nginx/html;
location /main {
index index.html;
default_type text/html;
if ( $scheme = http ){
echo "if-----> $scheme"; 使用什么协议输出对应协议,需要证书哦
}
if ( $scheme = https ){
echo "if ----> $scheme";
}
}
}
return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置
www.kgc.com/test/
404
return code; #返回给客户端指定的HTTP状态码
return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号
return code url; #返回给客户端的URL地址
location /test {
default_type text/plain;
return 302 http://www.baidu.com;
}
location /testt {
default_type text/plain;
return 301 http://www.wzw.com/pc;
}
301 缓存在磁盘上,建议使用301
302 没有缓存 , 服务器断开无法重定向
rewrite regex replacement(www.baidu.com) [flag];
正则匹配原始访问url 替代你想让客户访问的 标志 ()premanent301
server{
listen 80;
listen 443 ssl;
## 监听443
ssl_certificate /apps/nginx/conf.d/ssl/www.wzw.com.crt;
## 指向包含当前虚拟主机和CA的两个证书信息的文件
ssl_certificate_key /apps/nginx/conf.d/ssl/www.wzw.com.key;
## 当前虚拟主机使用的私钥文件,一般是key文件
ssl_session_cache shared:sslcache:20m;
## 在各worker之间使用一个共享的缓存,需要定义一个缓存名称和缓存空间大小,一兆可以存储4000个会话信息,多个虚拟主机可以使用相同的缓存名称
ssl_session_timeout 10m;
## 客户端连接可以复用ssl session cache中缓存的有效时长
server_name www.wzw.com;
root /apps/nginx/html/;
location / {
root /apps/nginx/html;
if ( $scheme = http ){
rewrite ^/(.*)$ https://www.wzw.com/$1 redirect; ##302跳
## 当$scheme为http时,重写为https ^/(.*)$以/后所有 $1后向引用
}
}
}
防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名。
把图片放到/apps/nginx/html 下
vim /apps/nginx/conf.d/www.conf
server{
listen 80;
server_name www.wzw.com;
root /apps/nginx/html;
}
192.168.88.101机器:
systemctl start nginx
systemctl stop firewalld
setenforce 0
vim /apps/nginx/html/index.html
this is yunjisuan
##盗取www.wzw.com的图片
vim /apps/nginx/conf/nginx.conf
server_name www.dsj.com ##基于域名的服务名称
vim /etc/hosts
192.168.88.100 www.wzw.com ##域名解析
C:\Windows\System32\drivers\etc\host
打开添加 www.dsj.com 的IP地址。
192.168.88.101
真机测试:
server块中添加防盗链:
vim /apps/nginx/conf.d/www.conf
location ~* \.(jpg|png|gif|swf|jpeg|bmp)$ {
root /apps/nginx/html;
valid_referers none blocked *.wzw.com wzw.com;
if ( $invalid_referer ) {
return 403;
}
}
这时客户端再次访问盗图服务器时,图片会报403