在nginx中通过map指令来正确添加请求头或修改头

在使用nginx进行请求转发时,由于各种需要,需要往后端在请求头中添加额外的请求头,或者在前端响应时添加后端没有返回的响应头信息。这些都可以在nginx中需要特定的指令来实现.同时,能够做到与业务无冲突.

本文涉及到的部分包括 添加请求头,添加响应头,以及达到ifAbsent的目的, 做到有则跳过,无则添加的目的.

本文参考的所有Nginx内置变量请参考 http://nginx.org/en/docs/varindex.html 此页.

继续阅读“在nginx中通过map指令来正确添加请求头或修改头”

使用树莓派部署nginx服务器提供dns负载

之前买了一个小小的树莓派,一直在吃灰. 本来自己也有一个对外的博客域名,就想怎么样将此机器用起来.(本来就长年24小时开机,当简单的闹钟用)
本文章的目的是让树莓派工作起来,并没有一定技术上的特定优势,仅作技术验证以及耗电技术验证.
先说一下我这边的硬件和网络环境
1 linode云主机,cpu 1核,内存 1g,对外公网ip,地址新加坡(备案你懂的), nginx,mysql,php程序,之前是独立wordpress应用
2 树莓派3代,没部任何程序 上海电信家庭宽带 封80端口(后来发现的) 路由器可作内网转发

做负载均衡有很多种做法,根据当前的网络环境,以及硬件设备.对于像wordpress这种博客应用来说,有以下两种

1 后端应用负载
即使用一个前端nginx,后端通过挂一个upstream,将相应的请求代理到2个后端应用中.
这样的好处在于,应用始终访问一个对外地址,由统一的代理程序决定如何访问后端应用,并且也可以根据后端的实际情况设置权重.nginx上设置代理也简单.
不足之处,也有许多,主要是后端应用需要部署多套,并且相应的底层存储数据需要共享或者是复制.
1.1 在树莓派上就需要安装mysql,php这种应用,同时要开始公网数据同步,开销可能有点大.树莓派本身能不能支持mysql这种不算小型的数据库,内存和cpu占用都是未知问题.
1.2 前端代理访问,nginx之前安装在linode主机,当前也不准备更换,如果代理到树莓派,就意味着访问先从国内访问到linode,然后linode再内部访问到树莓派,中间的延时肯定会有问题
1.3 当然也可以将nginx放在树莓派国内电信上,不过鉴于电信宽带本身的稳定性(ip变化,断电,或者临时被封等),肯定比不上固定的云主机,而且树莓派一挂,整个博客即挂掉

2 访问前端负载
更往前一点就可以作dns负载, 通过dns解析域名时产生多个ip,让访问者随机选择1个进行访问.
好像在于,原linode应用不作任何调整,接下来就工作就是让访问树莓派时能够输出相应的内容即可
不足之处,在于当前的dns解析(使用的dnspod)当前还不能作权重,不能设置权重信息. 树莓派不用后端处理,那么就需要加速访问才能达到效果.

最后的方案就是dns负载,树莓派加速网络访问,整个步骤如下

  1. 搭建支持https以及lua脚本支持的nginx
  2. 加速GET请求处理
  3. 反向代理POST请求
  4. 反向代理wp-admin后台管理
  5. dns负载配置,ip动态更新
  6. 树莓派小尾巴

继续阅读“使用树莓派部署nginx服务器提供dns负载”