Nginx配置try_files实践二
本文内容承接《Nginx配置try_files实践一》
1. 环境:
OS:Ubuntu 15.10
nginx:nginx/1.9.3 (Ubuntu)
假设有三台虚拟机db1(IP:192.168.68.21)/db2(IP:192.168.68.22)/db3(IP:192.168.68.23),通过try_files等配置,使三台机器的/data/www/upload合集组成网络资源,并且支持HTTPS请求但SSL证书未认证。(注:未验证合法证书的场景)
设计思路如下:

若请求到db2:
- 检索db2是否存在目标资源,若存在则返回,否则请求通过db1-proxy重定向到db1
- 检索db1是否存在目标资源,若存在则返回,否则返回404
- 把404重定向到db3
- 检索db3是否存在目标资源,若存在则返回,否则返回404
- 请求结束
若请求到db1/db3同理。
2. 配置三台机器nginx默认配置
略过具体过程,注意事项
- 配置日志格式
- 生成SSL证书并上传(/etc/nginx/server.crt, /etc/nginx/server.key)
3. 配置db1
- /etc/nginx/conf.d/db1.test.com.conf
server{
listen ;
server_name db1.test.com;
listen ssl;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
error_page /.html;
access_log /var/log/nginx/db1_access.log main;
error_log /var/log/nginx/db1_error.log;
location /upload
{
root /data/www;
try_files $uri @db2;
}
location @db2{
proxy_pass http://192.168.68.22:8000/proxy$uri;
proxy_intercept_errors on;
recursive_error_pages on;
error_page = @db3;
}
location @db3{
proxy_pass http://192.168.68.23:8000/proxy$uri;
}
}
- /etc/nginx/conf.d/db1-proxy.test.com.conf
server{
listen ;
server_name db1-proxy.test.com;
error_page /.html;
access_log /var/log/nginx/db1_access.log main;
error_log /var/log/nginx/db1_error.log;
location /proxy/upload
{
alias /data/www/upload;
}
}
- 重启nginx
4. 配置db2
- /etc/nginx/conf.d/db2.test.com.conf
server{
listen ;
server_name db2.test.com;
listen ssl;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
error_page /.html;
access_log /var/log/nginx/db2_access.log main;
error_log /var/log/nginx/db2_error.log;
location /upload
{
root /data/www;
try_files $uri @db1;
}
location @db1{
proxy_pass http://192.168.68.21:8000/proxy$uri;
proxy_intercept_errors on;
recursive_error_pages on;
error_page = @db3;
}
location @db3{
proxy_pass http://192.168.68.23:8000/proxy$uri;
}
}
- /etc/nginx/conf.d/db2-proxy.test.com.conf
server{
listen ;
server_name db2-proxy.test.com;
error_page /.html;
access_log /var/log/nginx/db2_access.log main;
error_log /var/log/nginx/db2_error.log;
location /proxy/upload
{
alias /data/www/upload;
}
}
- 重启nginx
5. 配置db3
- /etc/nginx/conf.d/db3.test.com.conf
server{
listen ;
server_name db3.test.com;
listen ssl;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
error_page /.html;
access_log /var/log/nginx/db3_access.log main;
error_log /var/log/nginx/db3_error.log;
location /upload
{
root /data/www;
try_files $uri @db1;
}
location @db1{
proxy_pass http://192.168.68.21:8000/proxy$uri;
proxy_intercept_errors on;
recursive_error_pages on;
error_page = @db2;
}
location @db2{
proxy_pass http://192.168.68.22:8000/proxy$uri;
}
}
- /etc/nginx/conf.d/db3-proxy.test.com.conf
server{
listen ;
server_name db3-proxy.test.com;
error_page /.html;
access_log /var/log/nginx/db3_access.log main;
error_log /var/log/nginx/db3_error.log;
location /proxy/upload
{
alias /data/www/upload;
}
}
- 重启nginx
6. 创建测试文件
| server name | location | url |
| db1 | /data/www/upload/db1.html | https://db1.test.com/upload/db1.html |
| /data/www/upload/db1/test.html | https://db1.test.com/upload/db1/test.html | |
| db2 | /data/www/upload/db2.html | https://db2.test.com/upload/db2.html |
| /data/www/upload/db2/test.html | https://db2.test.com/upload/db2/test.html | |
| db3 | /data/www/upload/db3.html | https://db3.test.com/upload/db3.html |
| /data/www/upload/db3/test.html | https://db3.test.com/upload/db3/test.html |
7. 配置本地host
192.168.68.21 db1.test.com
192.168.68.21 db1-proxy.test.com
192.168.68.22 db2.test.com
192.168.68.22 db2-proxy.test.com
192.168.68.23 db3.test.com
192.168.68.23 db3-proxy.test.com
8. 访问结果
| url | http status |
| https://db3.test.com/upload/db1.html | 200 |
| http://db3.test.com/upload/db1.html | 200 |
| https://db3.test.com/upload/db1/test.html | 200 |
| http://db3.test.com/upload/db1/test.html | 200 |
| https://db3.test.com/upload/db2.html | 200 |
| http://db3.test.com/upload/db2.html | 200 |
| https://db3.test.com/upload/db2/test.html | 200 |
| http://db3.test.com/upload/db2/test.html | 200 |
| https://db3.test.com/upload/db3.html | 200 |
| http://db3.test.com/upload/db3.html | 200 |
| https://db3.test.com/upload/db3/test.html | 200 |
| http://db3.test.com/upload/db3/test.html | 200 |
| https://db3.test.com/upload/db3/test1.html | 404 |
| http://db3.test.com/upload/db3/test1.html | 404 |
| https://db3.test.com/upload/dbfdsafas | 404 |
| http://db3.test.com/upload/dbfdsafas | 404 |
Nginx配置try_files实践二的更多相关文章
- Nginx配置try_files实践一
参考资料: http://linuxplayer.org/2013/06/nginx-try-files-on-multiple-named-location-or-serverhttp://stac ...
- MyBatis基本配置和实践(二)
一.前言 从上一篇文章的junit单元测试环节可以看到,每一次调用MyBatis需要先加载SqlMapConfig.xml文件,再通过SqlSessionFactoryBuilder创建SqlSess ...
- Spring MVC基本配置和实践(二)
1. springmvc: 是一个表现层框架,作用是从请求中接收传入的参数,将处理后的结果数据返回给页面展示 2. ssm整合: 1)Dao层 pojo.mapper接口.mapper映射文件(使用逆 ...
- nginx配置反向代理支持session
Nginx反向代理tomcat,很是方便,但是也有些细节的问题需要注意:今天遇到了这样一个问题,tomcat中路径“host/web1”,nginx中直接“host/”代理,这时候session就无法 ...
- Nginx配置支持https协议-应用实践
Nginx配置支持https协议-应用实践 https简介 HTTPS 是运行在 TLS/SSL 之上的 HTTP,与普通的 HTTP 相比,在数据传输的安全性上有很大的提升. TLS是传输层安全协议 ...
- Nginx反向代理与负载均衡应用实践(二)
Nginx反向代理与负载均衡应用实践(二) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...
- 前后端分离项目 nginx配置实践
新项目采用前后端分离的方式开发,前后端代码打算分开部署(同机器且同域名),但打算支持后端依然可访问静态资源. 搜索nginx配置大部分都通过url前缀进行转发来做前后端分离,不适用目前项目. 说明 前 ...
- centos7 nginx配置httpsCenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx环境部署(二)
1.yum安装nginx 下载对应当前系统版本的nginx包(package) # wget http://nginx.org/packages/centos/7/noarch/RPMS/ngin ...
- Nginx 配置指令的执行顺序(二)
我们前面已经知道,当 set 指令用在 location 配置块中时,都是在当前请求的 rewrite 阶段运行的.事实上,在此上下文中,ngx_rewrite 模块中的几乎全部指令,都运行在 rew ...
随机推荐
- 集训第六周 数学概念与方法 UVA 11722 几何概型
---恢复内容开始--- http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31471 题意,两辆火车,分别会在[t1,t2],[ ...
- SQLSERVER DBCC命令大全
DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保 ...
- NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询
RMQ with Shifts 时间限制:1000 ms | 内存限制:65535 KB 难度:3 -> Link1 <- -> Link2 <- 以上两题题意是一样 ...
- PHP $_SERVER的使用
常常会用到php的$_SERVER变量,可是好多常用的参数又不熟每次都去查手册.为了记住一些常用的,写个日志吧.前导:网站根目录:/www/domain.com/访问Url:http://www.do ...
- 【HDOJ3047】Zjnu Stadium(带权并查集)
题意:浙江省第十二届大学生运动会在浙江师范大学举行,为此在浙师大建造了一座能容纳近万人的新体育场. 观众席每一行构成一个圆形,每个圆形由300个座位组成,对300个座位按照顺时针编号1到300,且可以 ...
- React Native学习(五)—— 使用插件react-native-scrollable-tab-view
本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...
- Codeforces Educational Round 23
A emmmmmmmmm B emmmmmmmmm C(套路) 题意: 给定n和s(n,s<=1e18),计算n以内有多少个数x满足(x-x的各个位置数字之和)>=s 分析: 容易想到如果 ...
- webpack 输出多个文件
http://react-china.org/t/webpack/1870/2 webpack 文章 entry = { "button": "demo/button/i ...
- php设计模式——模板模式
最近打算巩固,整理一下设计模式相关的内容.这篇是关于 ——模板模式! 原文:http://www.jb51.net/article/76052.htm ----------------------- ...
- Flink内存管理源代码解读之基础数据结构
概述 在分布式实时计算领域,怎样让框架/引擎足够高效地在内存中存取.处理海量数据是一个非常棘手的问题.在应对这一问题上Flink无疑是做得非常杰出的,Flink的自主内存管理设计或许比它自身的知名度更 ...