Nginx try_files 的问题?

本文探讨了使用Nginx实现JSP请求先由缓存服务器处理的策略,详细介绍了通过调整upstream权重及备份服务器设置来达到目标的方法,并讨论了尝试使用try_files指令遇到的问题。

想用try_files 实现一种功能,把所有的JSP请求先转到缓存服务器,如果不存在再请求应用服务器。

 

 

 

 

 

 

 测试结果,总是后一个@起作用,@cache不会发生作用。

 

后来想到用虚拟路径来实现,

 

 

测试也是不行的。

 

总结:try_files 不支持虚拟文件,而且仅支持最后一个@。

 

用UpStream变相的实现

 

将缓存服务器的权重设置高,将原有服务器设置为备份,使得每次访问都请求到缓存服务器,如果失败,则请求原有服务器。

 

我能想到的只有memcached模块了,不过windows的nginx 都没有这个模块。

 

你有更好的办法没?  

 

 

 

### `try_files` 指令的基本用法 `try_files` 是 Nginx 中用于尝试按顺序查找文件的指令,常用于前端路由的配置,特别是在使用 Vue Router 或 React Router 的 `hash` 模式时。该指令允许 Nginx 在指定的路径中查找资源,如果找不到对应的文件或目录,则可以重定向到指定的 URI 或返回错误码。 其基本语法如下: ``` try_files file ... uri; ``` 或者: ``` try_files file ... =code; ``` 其中,`file` 表示要尝试查找的文件或路径,`uri` 表示如果所有文件都找不到,则重定向到该 URI;`code` 表示返回的 HTTP 状态码(如 404)[^2]。 例如,在一个典型的前端项目中,可以使用如下配置: ```nginx location / { root /home/demo/deploy/front/dist; index index.html index.htm; try_files $uri $uri/ /index.html; } ``` 此配置表示:Nginx 会首先尝试匹配请求的 URI 对应的文件或目录,如果找不到,则返回 `/index.html`,使前端路由能够接管 URL 的处理[^1]。 --- ### `try_files` 的高级用法 `try_files` 不仅可以用于前端路由的重定向,还可以结合命名 location 实现更复杂的逻辑。例如,可以将请求转发到后端服务,如下所示: ```nginx location / { try_files $uri $uri/ @backend; } location @backend { proxy_pass http://backend.example.com; } ``` 在此配置中,如果请求的文件或目录不存在,Nginx 将请求转发到 `@backend` 命名 location,进而代理到后端服务[^4]。 此外,还可以在 `try_files` 中指定多个备选路径。例如: ```nginx location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; } ``` 此配置优先尝试返回 `/system/maintenance.html`,如果不存在,则依次尝试 `$uri`、`$uri/index.html` 和 `$uri.html`,如果都找不到,则转发到 `@mongrel` 处理[^5]。 --- ### `try_files` 与查询参数的处理 需要注意的是,`try_files` 不会自动处理查询参数(即 URL 中 `?` 后面的部分),但可以通过 `$query_string` 变量进行判断和处理。例如: ```nginx location / { set $root_path '/var/www/phalcon/public'; root $root_path; try_files $uri $uri/ /index.php; } ``` 在此配置中,即使 URL 中包含查询参数,`try_files` 也会正常工作,将请求转发到 `/index.php` 进行处理[^3]。 --- ### 配置示例总结 以下是一些常见的 `try_files` 配置示例: 1. **前端路由支持(Hash 模式)**: ```nginx location / { root /home/demo/deploy/front/dist; index index.html index.htm; try_files $uri $uri/ /index.html; } ``` 2. **结合后端代理**: ```nginx location / { try_files $uri $uri/ @backend; } location @backend { proxy_pass http://backend.example.com; } ``` 3. **多级备选路径**: ```nginx location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @mongrel; } location @mongrel { proxy_pass http://mongrel; } ``` 4. **PHP 项目配置**: ```nginx location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ``` --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值