本文内容承接《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

最新文章

  1. C++中extern关键字用法小结
  2. 【MySQL】MySQL server has gone away 怎么处理?
  3. MySQL 5.7 深度解析: 半同步复制技术
  4. shell编程基础(3)条件判断语句
  5. C语言调用Lua函数
  6. MS SQL Server时间常用函数
  7. struts2 标签的使用之一 s:if
  8. HTML部分标签的含义(3)
  9. 安装zabbix2.2.3
  10. 【android】java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused
  11. Visual Studio 2015 中文企业版及专业版 正式版下载地址 激活秘钥 正版key
  12. Java读书笔记1
  13. 让 IE支持圆角的方法
  14. atomic详解
  15. Linux基础命令和NAT技术
  16. Ext.net资源地址
  17. Centos7 firewall开放3306端口
  18. Python学习笔记 ---第三章
  19. fabric读书笔记
  20. Java通过在主循环中判断Boolean来停止线程

热门文章

  1. LeetCode(33)Search in Rotated Sorted Array
  2. POJ-3041 Asteroids,二分匹配解决棋盘问题。
  3. markman & psd
  4. 建造高塔(codevs 1689)
  5. Java高并发实战,锁的优化
  6. Oldboy 基于Linux的C/C++自动化开发---MYSQL
  7. ESG操作指南
  8. 我的arcgis培训照片8
  9. 移动端 js 实现图片上传 预览
  10. 【c++】【转】如何只在heap上创建对象,如何只在stack上建立对象?