为openresty添加模块及开启nginx的https和http2

HTTP/2 源自 SPDY/2

SPDY 系列协议由谷歌开发,于 2009 年公开。它的设计目标是降低 50% 的页面加载时间。当下很多著名的互联网公司,例如百度、淘宝、UPYUN 都在自己的网站或 APP 中采用了 SPDY 系列协议(当前最新版本是 SPDY/3.1),因为它对性能的提升是显而易见的。主流的浏览器(谷歌、火狐、Opera)也都早已经支持 SPDY,它已经成为了工业标准,HTTP Working-Group 最终决定以 SPDY/2 为基础,开发 HTTP/2。

但是,HTTP/2 跟 SPDY 仍有不同的地方,主要是以下两点:

  1. HTTP/2 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
  2. HTTP/2 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE

HTTP/2 的优势

相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化:

  1. HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。
  2. HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x
  3. 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。 多路复用,直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。
  4. Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。 HTTP/2 主要是 HTTP/1.x 在底层传输机制上的完全重构,HTTP/2 是基本兼容 HTTP/1.x 的语义的(详细兼容性说明请戳这里)。Content-Type 仍然是 Content-Type,只不过它不再是文本传输了。

安装openresty前文已经有介绍,本文是基于前文的openresty安装的。查看nginx编译安装时的命令,安装了哪些模块,

阅读剩余部分 -

推荐OpenResty -- Nginx全能插件版

官网: http://openresty.org/ 
虽然是中国人做的,但没几个汉字…… 

我用Nginx,是这样一个过程: 
1、系统rpm中的nginx,能让其跑起来 
2、玩配置文件 
3、玩编译选项 
4、写插件,集成第三方插件 

OpenResty,是淘宝一位大牛(agentzh)集成的包含N多好插件的Nginx捆绑源码包,这位仁兄自称Nginx最活跃的第三方模块开发人员哦! 

下面,当然要列一下到底集成了什么模块(已经根据agentzh的微博提醒进行修正): 

LuaJIT - 极速版Lua实现 
ArrayVarNginxModule - 数组类型的Nginx变量 
AuthRequestNginxModule - 鉴权,想象一下以C代码的速度判断一个请求是否合法,是不是很有快感呢?! 
DrizzleNginxModule - Nginx-MySQL桥,非阻塞的哦,我又爱又恨的一个模块,值得注意的是,其响应是RDS流 
EchoNginxModule - 以非常直观的方式在Nginx配置文件中编写简单的处理逻辑,源码包含大量注释,绝对是入门好例子!!?? 
EncryptedSessionNginxModule - 加密会话 
FormInputNginxModule - 解析post请求中的参数,这下子,简单请求根本不需要PHP/Java来处理啦 
HeadersMoreNginxModule - Nginx默认的header模块只能添加或忽略,这个给你CRUD全套的!! 
IconvNginxModule - 编码转换,不多说,也不懂 
StandardLuaInterpreter - 与Lua官方实现所匹配,一般用不上,因为我们用LuaJIT!! 
MemcNginxModule - 与Memcached的绝配,谁用谁知道!!与upstram_keepalive一起用,你能更High!! 

阅读剩余部分 -

openresty 添加第三方模块


由于工作需要,在nginx开发过程中遇到了问题,需要添加第三方模块,在网上浏览了很多帖子教程,结果都不成功。

 

1.下载安装包

我下载的是zip包,解压缩到当前文件夹

2.配置

进入openresty源码包,执行命令

./configure --prefix=/usr/local/openresty --add-module=/root/ngx_http_substitutions_filter_module-master

prefix后面是openresty的安装目录,添加模块,后面跟的是我解压的文件夹位置

执行过程中可以看到该模块已经配置成功

3.make

在配置完成可以看到末尾要求执行两条命令gmake和gmake install 按顺序执行即可

4.检查

如何查看是否安装成功呢?

阅读剩余部分 -

tengine 动态加载模块简单上手

首先解释下

nginx里有各种各样的模块你在编译的时候得先添加进去。

tengine开启了dso动态加载模块的支持,你只需要得到模块包 然后使用tengine的编译工具编译进去使用即可。不需要说哪个模块缺少需要整个重新编译了

具体操作如下

我以这个ngx_realtime_request_module 模块为例

git clone https://github.com/magicbear/ngx_realtime_request_module

下载这个包和tengine(自行编译安装)

git clone得到ngx_realtime_request_module 模块文件夹

进入tengine的安装目录下 运行 bin/dso_tool --add-module=/。。(输入模块文件夹的路径)

编译好了编辑conf/nginx.conf

  dso {
  load    ngx_http_realtime_request_module.so;
    }

 

加载这个模块

此时运行nginx -m 查看支持的模块可以看到如下

.........................  

  ngx_http_realtime_request_module (shared, 3.1) //我们添加的模块已经ok了
    ngx_http_copy_filter_module (static)
    ngx_http_range_body_filter_module (static)
    ngx_http_not_modified_filter_module (static)
...

阅读剩余部分 -

重新编译Nginx添加模块

nginx安装成功后,发现有一些其他模块没有编译进去,或者想额外添加一些模块,这时候就要重新编译nginx。

首先,查看之前编译的一些参数,比如:

1

2

3

4

5
[root@lmode nginx]# /usr/local/nginx/nginx -V
nginx version: nginx/1.4.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-pcre=/usr/local/src/lnmp/pcre-8.33 --with-zlib=/usr/local/src/lnmp/zlib-1.2.8 --with-openssl=/usr/local/src/lnmp/openssl-1.0.1e 

比如我现在要新增–with-http_ssl_module 、–with-http_gzip_static_module 这些模块参数,那么我只要把这些参数添加进去然后重新编译即可,需要注意的是原先编译过的参数也要加进来。过程如下:

进入nginx源码包

1
[root@lmode nginx]# cd /usr/local/src/nginx-1.4.7

阅读剩余部分 -

【TeamViewer】协议协商失败,请再试

【情况】:

一直在用的TeamViewer,上周有天上午还在用,下午就连接不上了,之后一直连不上。

控制端一直显示“正在连接...”,但是几分钟也不会连接上;

被控端显示“呼入连接...”一会儿就显示“协议协商失败,请再试一次”。

【解决】:

开始怀疑是版本、缓存、系统自己的设置变更问题,卸载干净、重装、清理都不行。一直查网页研究到昨晚,都已经绝望了。。。 

突然灵光一闪:难道是我的翻墙利器 ss 导致的?因为ss本身就是加密连接翻墙,Teamviewer自己也要加密,所以在加密通道里再次加密导致了失败?

结果,真的是SS,关闭之后,Teamviewer连接就正常了!!

阅读剩余部分 -

meiyoutongji