Nginx day01

NSD Operation DAY01

目錄

1 案例1:搭建Nginx服務器

2 案例2:用戶認證

3 案例3:基於域名的虛擬主機

4 案例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.10),如圖-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測試服務器頁面

如果使用firefox火狐瀏覽器,注意在ssh遠程的時候一定要加-X選項。

[root@client ~]# firefox http://192.168.4.5
[root@client ~]# curl http://192.168.4.5

2 案例2:用戶認證

2.1 問題

沿用練習一,通過調整Nginx服務端配置,實現以下目標:

  1. 訪問Web頁面需要進行用戶認證
  2. 用戶名爲: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.10客戶端主機進行測試

如果使用firefox火狐瀏覽器,注意在ssh遠程的時候一定要加-X選項。

或者直接使用真實主機的火狐也可以。

[root@client ~]# firefox http://192.168.4.5                    //輸入密碼後可以訪問

3 案例3:基於域名的虛擬主機

3.1 問題

沿用練習二,配置基於域名的虛擬主機,實現以下目標:

  1. 實現兩個基於域名的虛擬主機,域名分別爲www.a.com和www.b.com
  2. 對域名爲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.10的/etc/hosts文件,進行域名解析

[root@client ~]# vim /etc/hosts
192.168.4.5    www.a.com www.b.com

2)登錄192.168.4.10客戶端主機進行測試

注意:請先關閉真實機的firefox,再SSH -X遠程連接調用虛擬機的firefox。

[root@client ~]# firefox http://www.a.com            //輸入密碼後可以訪問
[root@client ~]# firefox http://www.b.com            //直接訪問

提示:或者直接使用真實主機做客戶端主機驗證,修改真實主機的/etc/hosts文件,直接使用真實主機的火狐瀏覽器訪問也可以。

步驟三:擴展課外實驗:其他類型的虛擬主機

1.基於端口的虛擬主機(參考模板)

server {
listen 8080;              //端口
server_name web1.example.com;         //域名
......
}
server {
listen 8000; //端口
server_name web1.example.com; //域名
.......
}

2.基於IP的虛擬主機(參考模板)

server {
listen 192.168.0.1:80;          //IP地址與端口
server_name web1.example.com;         //域名
... ...
}
server {
listen 192.168.0.2:80; //IP地址與端口
server_name web1.example.com;
... ...
}

4 案例4:SSL虛擬主機

4.1 問題

沿用練習三,配置基於加密網站的虛擬主機,實現以下目標:

  1. 域名爲www.c.com
  2. 該站點通過https訪問
  3. 通過私鑰、證書對該站點所有數據加密

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.10的/etc/hosts文件,進行域名解析

[root@client ~]# vim /etc/hosts
192.168.4.5    www.c.com www.a.com www.b.com

2)登錄192.168.4.10客戶端主機進行測試

[root@client ~]# firefox https://www.c.com            //信任證書後可以訪問

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章