Nginx http_try_files_module precontent阶段 try_files指令 配置vue项目

http_try_files_module


http_try_files_module 模块只提供了try_files这一个指令,该模块对于我们使用反向代理的时候有很大的帮助,该模块是默认编译进nginx框架当中的,无法将其取消。

在搭建wordpress站点的时候可以使用到try_files指令。该指令用于反向代理场景非常有用,可以先去尝试在nginx上直接获取磁盘上的内容,如果没有这个文件再反向代理到上游服务。

vue 项目打包,打包好的静态文件目录 

[apps@TLVM202016131 zt_cn]$ ls /apps/nginx/plan-vue/
app.css  CLodop_Setup_for_Win32NT.exe  favicon.ico  index.html  Lodop  single  static 

[apps@TLVM202016131 zt_cn]$ cat plan-uat.ztoky.cn.conf
upstream  plan-uat {
        server 10.202.159.7x:8080 max_fails=3 fail_timeout=10 weight=1;
}

server {
        server_name   plan-uat.ztoky.cn;
        listen 443 ssl ;
        ssl_certificate ssl/ztoky.cn.crt;
        ssl_certificate_key ssl/ztoky.cn.key;
        access_log logs/plan-uat.ztoky.cn.access.log json;

        location /plan/ {                                  ####后端配置
           proxy_pass      http://plan-uat/;
           include         proxy.conf;
        }
 
        location / {
            root /apps/nginx/plan-vue;
            try_files $uri $uri/ /index.html;
        }  

}

#先查找$uri下是否有文件存在,若存在直接返回给用户,若$url下没有文件存在,再次访问$uri/的路径是否有文件存在,还是没有文件存在,交给index.html处理

访问后端 

访问前端

上面是内网的nginx代理,如果前面还有一个nginx那么还得配置一个nginx(如果有多个nginx代理,优先配置最内层的nginx,配置好最内层的nginx,再去配置最外层的。这样更加清晰)

upstream plan-uat {
        server 10.202.16.131:443 max_fails=3 fail_timeout=10 weight=1;
}


server {
        listen 443 ssl;
        server_name  zplan-uat.ztoky.cn;

        ssl_certificate     ssl/ztoky.cn.crt;
        ssl_certificate_key ssl/ztoky.cn.key;
        ssl_session_timeout 10m;
        
        access_log logs/plan-uat.ztoky.cn.access.log json;

        location /plan/{
                proxy_pass      https://plan-uat ;
                include         proxy.conf;
        }
        location /{
                proxy_pass      https://plan-uat/;
                include         proxy.conf;
        }
}

try_files两种语法


Syntax:

try_files file ... uri;  --放文件路径的名称,可以放多个。也就是说访问请求的时候,会依次尝试这些文件是否可以返回,只要有一个文件可以返回就立刻返回该文件内容。如果所有的文件都访问不了就按照最后一个url访问的结果返回给用户

try_files file ... =code;  --最后一个url也可以是一个code,用来指定返回的错误码
Default: —

Context: server, location

功能:依次访问多个url对应的文件(由root或者alias指令指定),当文件存在时直接返回文件内容,如果所有文件不存在,则按照最后一个URL结果或者code返回

举几个例子如下


(1) 

Nginx的try_files作用:按选项所指定的顺序去检查用户请求的文件是否存在,
如果本地存在的话则返回该请求;不存在的话将该请求转发到指定的其他路径

location / {
    try_files $uri $uri/ /index.php;
}

#先查找$uri下是否有文件存在,若存在直接返回给用户,若$url下没有文件存在,再次访问$uri/的路径是否有文件存在,还是没有文件存在,交给index.php处理


例:
location / {
    root /test/;
    try_files $uri @test;
}

location @test {
    proxy_pass http://127.0.0.1:9090;
}

#访问 / 时,查看 /test/index.html 文件是否存在,若不存在,让9090端口的程序去处理这个请求

(2)

server {
 
    listen 80;
    server_name  api.xxx.com;
 
    root /mnt/try;
 
    location / {
        add_header  Content-Type 'text/html; charset=utf-8';
        #echo $uri;
        try_files $uri @default;
    }
 
    location @default {
        root /mnt/default;
    }
}

location @xxx解释:定义一个location段,不能被外部请求所访问,只能用于nginx内部配置指令使用,比如 try_files、error_page。

$uri解释:URI代表资源的名称,浏览器访问 http://api.xxx.com/abc/index.html 时,当前的$uri值为/abc/index.html

try_files作用:try_files会先尝试去/mnt/try目录下找abc目录下的index.html(也就是去访问/mnt/try/index.html)如果有,直接返回,没有的话则跳转到@default部分(内部重定向)。在default部分会去/mnt/default目录下找abc目录下的index.html,有,直接返回,没有就返回404错误。try_files可以理解为实现rewrite的作用。

(3)

server {
	error_log  logs/myerror.log  info;
	root html/;
	default_type text/plain;
	
    #当访问frist指令,会去看看是否存在maintenance.html这样一个文件。
     如果这个文件找不到,如果这些资源都没有会去访问@lasturl
	location /first {
       try_files /system/maintenance.html $uri $uri/index.html $uri.html @lasturl;
      }


	location @lasturl {
    		return 200 'lasturl!\n';
	}


	location /second {
		try_files $uri $uri/index.html $uri.html =404;  
  #会尝试访问里面所有的文件,当所有文件都找不到返回404
	}

}


[root@www ~]# curl 192.168.179.99/first
lasturl!
[root@www ~]# curl 192.168.179.99/second
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>

(4)如果资源不存在返回   200 'lasturl!\n'

location / {
              root html/;
              try_files  $uri $uri/index.html $uri.html @lasturl;
           }

location @lasturl {
              return 200 'lasturl!\n';
        }



[root@www html]# curl 192.168.179.99  --如果可以访问到资源,直接返回资源
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>


[root@www html]# curl 192.168.179.99/eg
lasturl!
[root@www html]# curl -I  192.168.179.99/eg
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Mon, 03 Aug 2020 02:31:01 GMT
Content-Type: application/octet-stream
Content-Length: 9
Connection: close
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值