因为小编上一节讲的Nginx部署,是通过源码进行编译的,很多关于Nginx的插件是需要自己选择定义的。这里简单列列举几个常用的插件,供大家参考使用。
1 通过Nginx获取到真正的IP模块:real_ip
通过real_ip模块可以获取该报文发送时的客户主机IP,而非中间的路由节点IP。
ngx_realip模块究竟有什么实际用途呢?为什么我们需要去改写请求的来源地址呢?答案是:当Nginx处理的请求经过了某个HTTP代理服务器的转发时,这个模块就变得特别有用。
当原始用户的请求经过代理(squid,proxy)转发之后,nginx接收到的请求的来源地址也就变成了该代理服务器的IP,于是乎nginx 就无法获取用户请求的真实IP地址了。
所以,一般我们会在Nginx之前的代理服务器中把请求的原始来源地址编码进某个特殊的HTTP请求头中,然后再在Nginx中把这个请求头中编码的地址恢复出来。这样Nginx中的后续处理阶段(包括Nginx背后的各种后端应用)就会认为这些请求直接来自那些原始的地址,代理服务器就仿佛不存在一样。ngx_realip模块正是用来处理这个需求的。
##使用源码编译,重新加载nginx的配置
[root@server nginx-1.18.0]#./configure --help | grep real ##查找real_ip模块
--with-http_realip_module enable ngx_http_realip_module
--with-stream_realip_module enable ngx_stream_realip_module
[root@server nginx-1.18.0]# ./configure --prefix=/usr/local/nginx/ --with-http_realip_module --with-http_ssl_module
##重新编译环境
[root@server nginx-1.18.0]# make ##重新编译文件
[root@server objs]# cp nginx /usr/local/nginx/sbin/nginx
##将重新编译获得的obj文件,替换原程序(原程序提前备份)
cp: overwrite ‘/usr/local/nginx/sbin/nginx’? y
对配置文件进行配置,调用real_ip模块
##配置real_ip模块
.....
42 server{
43 listen 80; ##访问时的端口
44 server_name server.linux.com; ##服务器名称
45 set_real_ip_from 192.168.1.110;
##服务器的真正ip(来源的上一层真实IP<代理IP>,也可写网段或多个地址)
46 real_ip_header X-Forwarded-For; ##从那个头获取真实IP
47 real_ip_recursive on;
##递归的去除所配置中的可信IP。排除set_real_ip_from里面出现的IP。
如果出现了未出现这些IP段的IP,那么这个IP将被认为是用户的IP
48
49 location / {
50 return 200 "client real ip: $remote_addr\n";
##访问成功,获取远程IP
51 }
52
53 }
....
检查访问结果:
2. 图片压缩模块:image_filter_module
和上述模块操作步骤一样,对其进行重新编译,用编译连接完成的二进制文件替换现文件即可。
##只描述编译文件过程的不同,其他步骤均相等
./configure --prefix=/usr/local/nginx/ --with-http_realip_module --with-http_ssl_module --with-http_image_filter_module=dynamic
##--with-http_image_filter_module=dynamic 动态文件处理模块
#######根据编译环境问题解决相应的依赖性问题
[root@server opt]# yum install -y gd-devel-2.0.35-26.el7.x86_64.rpm
#######因为有依赖性,小编这里采用的动态模块,所以会产生相应的模块。此时建立相应的模块存储位置,并将
动态模块导入
[root@server objs]# mkdir /usr/local/nginx/modules
[root@server objs]# cp ngx_http_image_filter_module /usr/local/nginx/modules
【说明】动态模块指单独形成一个模块,在使用时调用即可,若不调用,不会被直接使用。
随后对建立的模块,进行导入、调用。配置nginx的配置文件:
##配置文件内容
1 load_module modules/ngx_http_image_filter_module.so; ##导入文件处理模块
...
19 http {
20 include mime.types;
21 default_type application/octet-stream;
....
55 server {
56 listen 80;
57 server_name localhost;
58
59 #charset koi8-r;
60
61 #access_log logs/host.access.log main;
62
63 location / {
64 root html;
65 index index.html index.htm;
66 }
67
68 location /download/ { ##指定访问的文件
69 limit_conn addr 1;
70 limit_req zone=one burst=5;
71 image_filter resize 150 -;
##指定压缩图片的格式:【150 -】表示按比例压缩
72 image_filter_buffer 10M; ##当图片过大时,需要设置压缩缓存
73 image_filter_jpeg_quality 85; ##设置压缩时的清晰度
74 }
结果测试:
【说明】 更多图片压缩参数可查看博客:https://www.jianshu.com/p/56ca5c89d972
3. 对数据的加密访问:http_ssl_module
首先对模块进行源码编译,若需要解决依赖性,根据要求解决依赖性即可。这里我们要对访问的数据进行加密,即https,故在完成模块编译后,需要生成使用的证书。
生成证书:
##生成客户主机访问的证书
[root@server download]# cd /etc/pki/tls/certs/ ##切换到证书目录下
[root@server certs]# make cert.pem ##生成证书
##按照要求,依次输入证书信息
【说明】上述生成的证书包含私钥和证书两部分。
将生成的证书,拷贝到配置目录下(cp cert.pem /usr/local/nginx/conf/),方便在配置文件是的调用。随后设置配置文件内容。
##在http服务中开启https服务的设置
....
126 server {
127 listen 443 ssl; ##指定安全连接的端口
128 server_name server.linux.com; ##指定主机
129
130 ssl_certificate cert.pem; ##指定证书和密钥
131 ssl_certificate_key cert.pem;
132
133 ssl_session_cache shared:SSL:1m; ##指定缓存和缓存时间
134 ssl_session_timeout 5m;
135
136 ssl_ciphers HIGH:!aNULL:!MD5; ##加密方式
137 ssl_prefer_server_ciphers on;
##依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
138
139 location / {
140 root /web; ##访问的根目录
141 index index.html index.htm; ##目录下的默认发布页面
142 }
143 }
....
因为小编设置了默认发布目录为/web,所以还需要建立发布目录:
[root@server conf]# mkdir /web
[root@server conf]# touch /web/index.html
[root@server conf]# echo hello the linux world > /web/index.html
最后即可重启服务,进行测试:
##重启前可进行语法检测,根据报错排除文件错误
[root@server nginx]# sbin/nginx -t
【说明】 测试过程中会出现证书认证不安全,需要手动进行确认,是因为我们的证书只针对个人,没有通过CA机构的认证。
在实现数据加密访问后,此时考虑用户的输入情况,不一定每次都是:https://....,同时考虑使用的方便性。例如当输入:baidu.com可直接跳转到:https://www.baidu.com。
为实现上述功能,我们添加地址重定向,实现上述功能。此时使用的模块依然是http_ssl_module。对Nginx的配置文件进行配置即可。
##直接添加server服务,指定重定向内容
...
144 server {
145 listen 80;
146 server_name server.linux.com;
147 rewrite ^/(.*)$ https://server.linux.com/$1;
## ^/(.*)$ 表示以任何开头、结尾的;$1标识网址输入的后面不变
148 }
...
查看访问细节:
上述细节访问可知,是临时重定向,302。这里的临时指不缓存,若要永久重定向,则进行如下配置:
##直接添加server服务,指定重定向内容
...
144 server {
145 listen 80;
146 server_name server.linux.com;
147 rewrite ^/(.*)$ https://server.linux.com/$1 permanent;
## ^/(.*)$ 表示以任何开头、结尾的;$1标识网址输入的后面不变
148 }
...
经过上述的规则重写,我们可以完成一个防盗链的操作(防止没有资源的用户,通过连接就可直接访问资源)。
首先配置盗链的服务器:
##使用Nginx配置服务器
######1 在盗链服务器上,安装nginx服务
##采用源码安装三部曲,这里不再赘述
######2 配置盗链服务器的默认访问配置
##内容如下:
server {
listen 80;
server_name daolian.linux.com;
charset koi8-r;
#access_log logs/host.access.log main;
location / { ##定义默认发布页面
root /web;
index index.html index.htm;
}
######3 根据上述配置,编写默认发布页面
[root@servera conf]# mkdir /web
[root@servera conf]# vim /web/index.html
##内容:
1
2
3
A Steal Link
4 ##正常资源访问地址
5
6
######4 重启服务,进行测试
为了解决上述问题,可在资源服务器中进行如下配置:
##配置资源文件
......
63 location / {
64 root html;
65 index index.html index.htm;
66 }
67 location ~* \.(gif|jpg|png|jpeg)$ { ##设置以(**)结尾的文件
68 root html;
69 valid_referers none blocked server.linux.com;
##从server.linux.com访问正常访问
70 if ($invalid_referer){
71 rewrite ^/ http://bbs.linux.com/download/daolian.jpg;
72 }
##if判断,若不是指定地址访问,则重定向到指定位置
73 }
74 }
75
76 server { ##重定向资源的位置
77 listen 80;
78 server_name bbs.linux.com;
79
80 location / {
81 root html;
82 index index.html;
83 }
84 }
85
4. Nginx的图形分析工具:goaccess
软件下载:https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/g/goaccess-1.3-1.el7.x86_64.rpm
软件安装:因为小编这里下载的rpm包,所以可直接进行安装:yum install -y goaccess
配置Nginx:
##重现编写localtion 访问指定的页面
....
63 location /report.html {
64 alias /usr/local/nginx/html/report.html;
65 }
...
测试:
##启动goaccess进行测试
[root@server opt]# goaccess /usr/local/nginx/logs/access.log -o /usr/local/nginx/html/report.html --real-time-html --time-format='%H:%M:%S' --date-format='%d%b%Y' --log-format=COMBINED
##开启程序,将指定的文件输入(-o)到repot.html中 指定时间格式;日期格式;日志格式
参考文章:http://www.mamicode.com/info-detail-1728752.html