nginx的高級網絡配置(realip的獲取,image模塊和https模塊)

一、獲取被反向代理訪問的客戶端真實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/,查看是否可以訪問

在這裏插入圖片描述
在這裏插入圖片描述

發佈了74 篇原創文章 · 獲贊 6 · 訪問量 5626
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章