1. 程式人生 > >Nginx安裝與升級 Nginx服務器 Nginx虛擬主機 、 HTTPS加密網站

Nginx安裝與升級 Nginx服務器 Nginx虛擬主機 、 HTTPS加密網站

fault 用戶 cli cipher pat 案例 fir 服務器 算法

案例1:搭建Nginx服務器
案例2:用戶認證
案例3:基於域名的虛擬主機
案例4:SSL虛擬主機
1 案例1:搭建Nginx服務器
1.1 問題

在IP地址為192.168.4.5的主機上安裝部署Nginx服務,並可以將Nginx服務器,要求編譯時啟用如下功能:
支持SSL加密功能
設置Nginx賬戶及組名稱均為nginx
Nginx服務器升級到更高版本。
然後客戶端訪問頁面驗證Nginx Web服務器:
使用火狐瀏覽器訪問
使用curl訪問
1.2 方案

提前準備運維課程所需的所有虛擬機,為後續所有實驗做準備,克隆4臺RHEL7虛擬機,實驗環境所需要的主機及對應的IP設置列表如表-1所示,正確配置IP地址、主機名稱,並且為每臺主機配置YUM源。不需要配置網關與DNS。

表-1 主機列表

第一天課程需要使用2臺RHEL7虛擬機,其中一臺作為Nginx服務器(192.168.4.5)、另外一臺作為測試用的Linux客戶機(192.168.4.100),如圖-1所示。

圖-1
安裝nginx-1.10.3版本時,需要使用如下參數:
--with-http_ssl_module:提供SSL加密功能
--user:指定賬戶
--group:指定組
1.3 步驟

實現此案例需要按照如下步驟進行。
步驟一:構建Nginx服務器

1)使用源碼包安裝nginx軟件包
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel //安裝依賴包

[root@proxy ~]# useradd -s /sbin/nologin nginx
[root@proxy ~]# tar -xf nginx-1.10.3.tar.gz
[root@proxy ~]# cd nginx-1.10.3
[root@proxy nginx-1.10.3]# ./configure \

--prefix=/usr/local/nginx \ //指定安裝路徑
--user=nginx \ //指定用戶
--group=nginx \ //指定組

--with-http_ssl_module //開啟SSL加密功能
.. ..
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
[root@proxy nginx-1.10.3]# make && make install //編譯並安裝
2)nginx命令的用法
[root@proxy ~]# /usr/local/nginx/sbin/nginx //啟動服務
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop //關閉服務
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload //重新加載配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx –V //查看軟件信息
[root@proxy ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/ //方便後期使用
netstat命令可以查看系統中啟動的端口信息,該命令常用選項如下:
-a顯示所有端口的信息
-n以數字格式顯示端口號
-t顯示TCP連接的端口
-u顯示UDP連接的端口
-l顯示服務正在監聽的端口信息,如httpd啟動後,會一直監聽80端口
-p顯示監聽端口的服務名稱是什麽(也就是程序名稱)
nginx服務默認通過TCP 80端口監聽客戶端請求:
root@proxy ~]# netstat -anptu | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx
3)設置防火墻與SELinux
[root@proxy ~]# firewall-cmd --set-default-zone=trusted
[root@proxy ~]# setenforce 0
4)測試首頁文件
Nginx Web服務默認首頁文檔存儲目錄為/usr/local/nginx/html/,在此目錄下默認有一個名為index.html的文件,使用客戶端訪問測試頁面:
[root@client ~]# curl http://192.168.4.5
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>
步驟二:升級Nginx服務器

1)編譯新版本nginx軟件
[root@proxy ~]# tar -zxvf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure \

--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module
[root@proxy nginx-1.12.2]# make
2) 備份老的nginx主程序,並使用編譯好的新版本nginx替換老版本
[root@proxy nginx-1.12.2]# mv /usr/local/nginx/sbin/nginx \
/usr/local/nginx/sbin/nginxold
[root@proxy nginx-1.12.2]# cp objs/nginx /usr/local/nginx/sbin/ //拷貝新版本
[root@proxy nginx-1.12.2]# make upgrade //升級
/usr/local/nginx/sbin/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
kill -USR2 cat /usr/local/nginx/logs/nginx.pid
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT cat /usr/local/nginx/logs/nginx.pid.oldbin
[root@proxy ~]# /usr/local/nginx/sbin/nginx –v //查看版本
步驟三:客戶端訪問測試

1)分別使用瀏覽器和命令行工具curl測試服務器頁面
[root@client ~]# firefox http://192.168.4.5
[root@client ~]# curl http://192.168.4.5
2 案例2:用戶認證
2.1 問題

沿用練習一,通過調整Nginx服務端配置,實現以下目標:
訪問Web頁面需要進行用戶認證
用戶名為:tom,密碼為:123456
2.2 方案

模板配置文件框架如下:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
全局配置(用戶名,日誌,進程)
http{
server{
listen 80;
server_name localhost;
root html;
}
server{
listen 80;
server_name www.xyz.com;
root www;
}
}
通過Nginx實現Web頁面的認證,需要修改Nginx配置文件,在配置文件中添加auth語句實現用戶認證。最後使用htpasswd命令創建用戶及密碼即可。
2.3 步驟

實現此案例需要按照如下步驟進行。
步驟一:修改Nginx配置文件

1)修改/usr/local/nginx/conf/nginx.conf
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
auth_basic "Input Password:"; //認證提示符
auth_basic_user_file "/usr/local/nginx/pass"; //認證密碼文件
location / {
root html;
index index.html index.htm;
}
}
2)生成密碼文件,創建用戶及密碼
使用htpasswd命令創建賬戶文件,需要確保系統中已經安裝了httpd-tools。
[root@proxy ~]# yum -y install httpd-tools
[root@proxy ~]# htpasswd -c /usr/local/nginx/pass tom //創建密碼文件
New password:
Re-type new password:
Adding password for user tom
[root@proxy ~]# htpasswd /usr/local/nginx/pass jerry //追加用戶,不使用-c選項
New password:
Re-type new password:
Adding password for user jerry
[root@proxy ~]# cat /usr/local/nginx/pass
3)重啟Nginx服務
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload //重新加載配置文件
#請先確保nginx是啟動狀態才可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
步驟二:客戶端測試

1)登錄192.168.4.100客戶端主機進行測試
[root@client ~]# firefox http://192.168.4.5 //輸入密碼後可以訪問
3 案例3:基於域名的虛擬主機
3.1 問題

沿用練習二,配置基於域名的虛擬主機,實現以下目標:
實現兩個基於域名的虛擬主機,域名分別為www.a.com和www.b.com
對域名為www.a.com的站點進行用戶認證,用戶名稱為tom,密碼為123456
3.2 方案

修改Nginx配置文件,添加server容器實現虛擬主機功能;對於需要進行用戶認證的虛擬主機添加auth認證語句。
虛擬主機一般可用分為:基於域名、基於IP和基於端口的虛擬主機。
3.3 步驟

實現此案例需要按照如下步驟進行。
步驟一:修改配置文件

1)修改Nginx服務配置,添加相關虛擬主機配置如下
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80; //端口
server_name www.a.com; //域名
auth_basic "Input Password:"; //認證提示符
auth_basic_user_file "/usr/local/nginx/pass"; //認證密碼文件
location / {
root html; //指定網站根路徑
index index.html index.htm;
}

}
… …
server {
listen 80; //端口
server_name www.b.com; //域名
location / {
root www; //指定網站根路徑
index index.html index.htm;
}
}
2)創建網站根目錄及對應首頁文件
[root@proxy ~]# mkdir /usr/local/nginx/www
[root@proxy ~]# echo "www" > /usr/local/nginx/www/index.html
3)重啟nginx服務
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啟動狀態才可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
步驟二:客戶端測試

1)修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析
[root@client ~]# vim /etc/hosts
192.168.4.5 www.a.com www.b.com
2)登錄192.168.4.100客戶端主機進行測試
註意:請先關閉真實機的firefox,SSH –X遠程連接調用虛擬機的firefox。
[root@client ~]# firefox http://www.a.com //輸入密碼後可以訪問
[root@client ~]# firefox http://www.b.com //直接訪問
4 案例4:SSL虛擬主機
4.1 問題

沿用練習三,配置基於加密網站的虛擬主機,實現以下目標:
域名為www.c.com
該站點通過https訪問
通過私鑰、證書對該站點所有數據加密
4.2 方案

源碼安裝Nginx時必須使用--with-http_ssl_module參數,啟用加密模塊,對於需要進行SSL加密處理的站點添加ssl相關指令(設置網站需要的私鑰和證書)。
加密算法一般分為對稱算法、非對稱算法、信息摘要。
對稱算法有:AES、DES,主要應用在單機數據加密。
非對稱算法有:RSA、DSA,主要應用在網絡數據加密。
信息摘要:MD5、sha256,主要應用在數據完整性校驗、數據秒傳等。
4.3 步驟

實現此案例需要按照如下步驟進行。
步驟一:配置SSL虛擬主機
1)生成私鑰與證書
[root@proxy ~]# cd /usr/local/nginx/conf
[root@proxy ~]# openssl genrsa > cert.key //生成私鑰
[root@proxy ~]# openssl req -new -x509 -key cert.key > cert.pem //生成證書
2)修改Nginx配置文件,設置加密網站的虛擬主機
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
server {
listen 443 ssl;
server_name www.c.com;
ssl_certificate cert.pem; #這裏是證書文件
ssl_certificate_key cert.key; #這裏是私鑰文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
3)重啟nginx服務
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#請先確保nginx是啟動狀態才可以執行命令成功,否則報錯,報錯信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
步驟二:客戶端驗證
1)修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析
[root@client ~]# vim /etc/hosts
192.168.4.5 www.c.com www.a.com www.b.com
2)登錄192.168.4.100客戶端主機進行測試
[root@client ~]# firefox https://www.c.com //信任證書後可以訪問

Nginx安裝與升級 Nginx服務器 Nginx虛擬主機 、 HTTPS加密網站