一、获取被反向代理访问的客户端真实ip
1.环境准备
server1:nginx真实web服务器
server2:nginx反向代理服务器
这句话的含义是:当nginx当作真实web服务器时,客户端访问的是反向代理服务器server2,反向代理服务器再访问web服务器,
那么web服务器上应该就只能获取到反向代理服务器server2的地址,现在要在日志的连接请求中看到客户端的真实ip
vim /usr/local/nginx/conf/nginx.conf
日志格式的含义解释:(后面会用到)
$remote_addr:远程IP;
$remote_user:远程用户;
$stime_local:时间;
$request:用来记录请求的url与http协议;
$status:用来记录请求状态;成功是200;
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
$http_x_forwarded_for:访问用户的真实 IP 地址;
2.先在server1上创建一个虚拟主机测试语法
vim /usr/local/nginx/conf/nginx.conf ##修改配置文件
curl -H "X-Forwarded-For: 2.2.2.2,172.25.21.1" server1.example.com ##它应该获取到的时2.2.2.2
修改完成后发现无法重新加载,查看报错是因为无法时别real_ip指令,所以我们需要重新编译并加上这个模块
注意:编译时的安装位置和上次添加的模块必须相同,如果忘记了可以用/usr/local/nginx/sbin/nginx -V 查看编译的详细信息
./configure --prefix=/usr/local/nginx --with-file-aio --with-http_realip_module
make
[root@server1 nginx-1.17.1]# cp ./objs/nginx /usr/local/nginx/sbin/nginx -f
/usr/local/nginx/sbin/nginx -t
systemctl reload nginx
3.用两台主机实现realip的获取
(1)server1真实nginx服务器的设定:(在进行一个新实验时,把上次的内容可以注释掉)
vim /usr/local/nginx/conf/nginx.conf ##修改配置文件
systemctl reload nginx
scp -r /usr/local/nginx/ server2:/usr/local/ ##把nginx目录直接发给server2使用,减少操作步骤
(2)server2反向代理nginx服务器的设定:(把server1的修改全部注释掉)
vim /usr/local/nginx/conf/nginx.conf ##修改配置文件
/usr/local/nginx/sbin/nginx ##启动服务
(3)测试:(在真机测试)
vim /etc/hosts ##先添加域名解析
172.25.21.2 www.example.com
curl -I www.example.com ##访问域名,查看server1的access日志
tail -f /usr/local/nginx/logs/access.log ##查看server1的日志可以看到获取到了真机的ip地址
二、image模块
1.模块的编译安装和导入
/usr/local/nginx/sbin/nginx -V ##在重新编译之前确定自己现在的环境和添加的模块
./configure --help | grep image ##查找image模块
[root@server1 nginx-1.17.1]# ./configure --prefix=/usr/local/nginx --with-file-aio --with-http_realip_module
--with-http_image_filter_module=dynamic ##添加的模块和安装的位置必须和之前的环境相同
##执行完编译命令后很可能会报错,缺少编译环境
下载并安装这个GD编译环境,重新编译,自身yum源没有,需要从网上下载,且版本应与nginx编译的版本相同
本机使用的是:gd-devel-2.0.35-26.el7.x86_64.rpm
yum install gd-devel-2.0.35-26.el7.x86_64.rpm -y ##安装编译环境
[root@server1 nginx-1.17.1]# ./configure --prefix=/usr/local/nginx --with-file-aio --with-http_realip_module
--with-http_image_filter_module=dynamic ##再次执行编译脚本
make ##编译生成二进制文件
cp -f ./objs/nginx /usr/local/nginx/sbin/nginx ##覆盖旧的二进制文件
cd ./objs ##进入后ls查看安装的image模块
mkdir /usr/local/nginx/modules ##因为这不是内置的模块,所以要导入使用,创建一个存放这种模块的目录
cp ngx_http_image_filter_module.so /usr/local/nginx/modules/ ##把模块复制过去
2.模块的使用:
修改配置文件将模块导入使用:
vim /usr/local/nginx/conf/nginx.conf ##修改配置文件,
systemctl reload nginx ##本次演示的是像素的修改方法,若想知道更多应用请查看官网的帮助手册
三、https模块
1.模块的编译安装和导入(与image模块类似)
/usr/local/nginx/sbin/nginx -V ##首先查看已经编译安装的模块和位置
./configure --help | grep ssl ##查找https模块
[root@server1 nginx-1.17.1]# ./configure --prefix=/usr/local/nginx --with-file-aio --with-http_realip_module
--with-http_image_filter_module=dynamic --with-http_ssl_module ##编译安装
make ##生成二进制文件
cp -f ./objs/nginx /usr/local/nginx/sbin/nginx ##覆盖旧的二进制文件
systemctl reload nginx ##重新加载服务
cp ./objs/ngx_http_image_filter_module.so /usr/local/nginx/modules/ ##原来的模块在编译后已经不能用了,所以把新的
##再次导入
systemctl reload nginx ##使策略服务
2.模块的使用:
(1)虚拟主机的建立和证书的生成
vim /usr/local/nginx/conf/nginx.conf ##修改配置文件,创建一个虚拟主机用来https的访问
cd /etc/pki/tls/certs/ ##进入证书目录
ls ##可以看到现在还没有证书模块
make cert.pem ##生成证书,按要求填写信息即可,也可以参照我之前apache那篇博客设置cert和key
cp cert.pem /usr/local/nginx/conf/ ##将证书复制到nginx配置文件目录下
mkdir /web ##建立https的默认发布目录
vim /web/index.html ##编写一个默认发布文件
systemctl reload nginx ##重新加载服务
(2)在浏览器进行测试:
在浏览器访问https://172.25.21.1/,查看是否可以访问