nginx动态编译新模块 --添加 headers-more-nginx-module 模块 --在 nginx 已经安装的基础上,编译安装新的模块
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
  
nginx动态编译新模块 --添加 headers-more-nginx-module 模块
#在 nginx 已经安装的基础上,编译安装新的模块
 
 
1. 查看当前nginx编译信息
> nginx -V
nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.2l  25 May 2017
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l
 
 
2. 进入 nginx 所在目录,创建 module目录并拉取 headers-more-nginx-module 模块仓库
 
    1). > cd /usr/local/nginx/
 
    2). > mkdir module
 
    3). > git clone https://github.com/openresty/headers-more-nginx-module.git
 
    4). > cd ./headers-more-nginx-module
 
    5). > pwd
        /usr/local/nginx/module/headers-more-nginx-module
 
 
3. 进入之前安装 nginx 的源码目录,我们用的lnmp集成,所以进入 lnmp 当时的 nginx 目录
#nginx下载地址: http://nginx.org/download/ 去选择自己需要的版本,如我们已经安装的nginx版本是 1.12.2 ,我们下载 1.12.2
 
    1). > cd /root/lnmp1.4/src
 
    2). > ls
        autoconf-2.13.tar.gz  libiconv-1.14.tar.gz    mysql-5.7.18.tar.gz    patch                                  p.php
        boost_1_59_0.tar.bz2  libmcrypt-2.5.8.tar.gz  nginx-1.12.2.tar.gz    pcre-8.39.tar.bz2                      p.tar.gz
        curl-7.51.0.tar.bz2   mcrypt-2.6.8.tar.gz     openssl-1.0.2l         php-7.1.7.tar.bz2
        freetype-2.7.tar.bz2  mhash-0.9.9.9.tar.bz2   openssl-1.0.2l.tar.gz  phpMyAdmin-4.7.3-all-languages.tar.xz
 
    3). > tar -zxvf nginx-1.12.2.tar.gz
 
    4). > cd ./nginx-1.12.2
 
 
4. 在之前 编译安装的相关参数后追加需要动态编译新的模块 --add-dynamic-module=/usr/local/nginx/module/headers-more-nginx-module ,并进行编译,新的命令应该是:
 
    1). > ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --add-dynamic-module=/usr/local/nginx/module/headers-more-nginx-module
 
    2). > make
        # 注意!!! 执行完毕 make 命令后, 千万不要执行 make install 否则就真的把原先安装的 nginx 覆盖了!包括之前的配置信息等等,会全部覆盖!!!
        //------------------编译开始    begin
        ... 一大堆乱七八槽的
        sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
        -e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
        -e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
        -e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
        < man/nginx.8 > objs/nginx.8
        make[1]: Leaving directory `/root/lnmp1.4/src/nginx-1.12.2'
        --到这里新的 nginx 二进制文件编译完毕
        //------------------编译开始    end
 
 
5. 进入 objs 目录,检查编译结果
 
    1). > cd ./objs/
 
    2). > ./nginx -V
        nginx version: nginx/1.12.2
        built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
        built with OpenSSL 1.0.2l  25 May 2017
        TLS SNI support enabled
        configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --add-dynamic-module=/usr/local/nginx/module/headers-more-nginx-module
        #可以看到, 要添加 headers-more-nginx-module 模块,已经编译
 
 
6. 替换已存在的nginx二进制可执行文件
 
    1). > cd /usr/local/nginx/sbin/
 
    #保险起见我们不执行覆盖操作
    2). > mv nginx nginx.old
 
    3). > cp /root/lnmp1.4/src/nginx-1.12.2/objs/nginx /usr/local/nginx/sbin/
 
 
7. 检查 /usr/sbin OR /usr/bin 下对应的可执行文件
 
    1). 因 nginx 可能被加入全局可执行命令, 我们也可以通过 which 直接查找 nginx 全局命令所在位置
    > which nginx
        /usr/bin/nginx          #可以看到在这里...
 
    2). 进入此目录,检查是否需要替换此命令
    > cd /usr/bin/
    > ll | grep nginx
    lrwxrwxrwx    1 root root        27 Jan 31  2018 nginx -> /usr/local/nginx/sbin/nginx
    #可以看出 该处的 nginx 是以软链的形式存在的,并且源地址 /usr/local/nginx/sbin/nginx 是我们已经更新的 二进制可执行文件地址 ,所以不需要做任何操作了.
 
    3). #如果该处地址有误,直接替换为新的地址即可,参考命令:
        (1). 删除已存在的软件 或二进制文件 注意:如果是软件 rm -f /usr/local/nginx/sbin/nginx 后面不可有 空格 OR / 否则会删除目标源文件甚至目录!!! 不可以写成: rm -f /usr/local/nginx/sbin/nginx --这里有个空格 OR rm -f /usr/local/nginx/sbin/nginx/ --这里有/
        > rm -f /usr/local/nginx/sbin/nginx
        (2). 建立新的软链
        > ln -s /usr/local/nginx/sbin/nginx /usr/bin/
 
    4). 检查全局nginx 命令是否成功替换
    > nginx -V
    nginx version: nginx/1.12.2
    built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
    built with OpenSSL 1.0.2l  25 May 2017
    TLS SNI support enabled
    configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.0.2l --add-dynamic-module=/usr/local/nginx/module/headers-more-nginx-module
 
    5). 替换成功
 
 
8. 复制 已经编译好的 ngx_http_headers_more_filter_module.so 至 nginx/module 目录
    1). > cp /root/lnmp1.4/src/nginx-1.12.2/objs/ngx_http_headers_more_filter_module.so /usr/local/nginx/module/headers-more-nginx-module/
 
    2). > pwd
        /usr/local/nginx/module/headers-more-nginx-module
 
 
9. 修改 nginx.conf 配置文件,加载新的模块
    1). > vim /usr/local/nginx/conf/nginx.conf
        #load_module /usr/local/nginx/module/headers-more-nginx-module/ngx_http_headers_more_filter_module.so;
        //----------------------------在 nginx.conf 配置文件中写入内容    begin
         1 user  www www;
         2
         3 worker_processes auto;
         4
         5 error_log  /var/log/nginx/error.log  warn;
         6
         7 pid        /usr/local/nginx/logs/nginx.pid;
         8
         9 #加载headers-more-nginx-module模块       --这里是要追加的内容!!!
        10 load_module /usr/local/nginx/module/headers-more-nginx-module/ngx_http_headers_more_filter_module.so;
        //----------------------------在 nginx.conf 配置文件中写入内容    end
 
    2). > nginx -t
        nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
        nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 
10. 修改 nginx.conf 配置文件, http 返回 header 头,检查是否成功
    1). > vim /usr/local/nginx/conf/nginx.conf
        # more_set_headers 'Server:JSX/1.0';
        //----------------------------在 nginx.conf 配置文件中写入内容    begin
        16 events
        17     {
        18         use epoll;
        19         worker_connections 51200;
        20         multi_accept on;
        21     }
        22
        23 http
        24     {
        25         #重写header头Server值    --在此直接操作.可对所有域名生效
        26         more_set_headers 'Server:JSX/1.0';
        27
        28         include       mime.types;
        29         default_type  application/octet-stream;
        //----------------------------在 nginx.conf 配置文件中写入内容    end
        #更多使用命令,可参考: https://blog.csdn.net/chunyuan314/article/details/81737303
 
    #测试是否成功
    2). > nginx -t
        nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
        nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
 
    #重新加载配置文件
    3). > nginx -s reload
 
 
11. 浏览器发起 http 请求,检查 header 头,确认生效
    HTTP/1.1 200 OK
    Date: Thu, 31 Jan 2019 03:50:08 GMT
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Vary: Accept-Encoding
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate
    Pragma: no-cache
    Server: JSX/1.0
    Content-Encoding: gzip
 
12. 搞定
 
  


---------------------------------------------------------------------------------------------
不忘初心 方得始终!

唯有志存高远,方能风行天下。

道之所存,虽千万人吾往矣! 情之所钟,虽千万里吾念矣~

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。