源碼安裝nginx 平滑升級

Top

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服務器,要求編譯時啓用以下功能:html

  • 支持SSL加密功能
  • 設置Nginx帳戶及組名稱均爲nginx
  • Nginx服務器升級到更高版本。

而後客戶端訪問頁面驗證Nginx Web服務器:nginx

  • 使用火狐瀏覽器訪問
  • 使用curl訪問

1.2 方案

提早準備運維課程全部的全部虛擬機,爲後續全部實驗作準備,克隆4臺RHEL7虛擬機,實驗環境所須要的主機及對應的IP設置列表如表-1所示,正確配置IP地址、主機名稱,而且爲每臺主機配置YUM源。算法

表-1 主機列表vim

第一天課程須要使用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 步驟

實現此案例須要按照以下步驟進行。session

步驟一:構建Nginx服務器框架

1)使用源碼包安裝nginx軟件包運維

  1. [root@proxy ~]# yum -y install gcc pcre-devel openssl-devel        //安裝依賴包
  2. [root@proxy ~]# useradd -s /sbin/nologin nginx
  3. [root@proxy ~]# tar -xf nginx-1.10.3.tar.gz
  4. [root@proxy ~]# cd nginx-1.10.3
  5. [root@proxy nginx-1.10.3]# ./configure \
  6. > --prefix=/usr/local/nginx \                //指定安裝路徑
  7. > --user=nginx \                            //指定用戶
  8. > --group=nginx \                            //指定組
  9. > --with-http_ssl_module                        //開啓SSL加密功能
  10. .. ..
  11. nginx path prefix: "/usr/local/nginx"
  12. nginx binary file: "/usr/local/nginx/sbin/nginx"
  13. nginx configuration prefix: "/usr/local/nginx/conf"
  14. nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  15. nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  16. nginx error log file: "/usr/local/nginx/logs/error.log"
  17. nginx http access log file: "/usr/local/nginx/logs/access.log"
  18. nginx http client request body temporary files: "client_body_temp"
  19. nginx http proxy temporary files: "proxy_temp"
  20. nginx http fastcgi temporary files: "fastcgi_temp"
  21. nginx http uwsgi temporary files: "uwsgi_temp"
  22. nginx http scgi temporary files: "scgi_temp"
  23. [root@proxy nginx-1.10.3]# make && make install    //編譯並安裝

2)nginx命令的用法

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx                    //啓動服務
  2. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop            //關閉服務
  3. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload        //從新加載配置文件
  4. [root@proxy ~]# /usr/local/nginx/sbin/nginx –V                //查看軟件信息
  5. [root@proxy ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/        //方便後期使用

nginx服務默認經過TCP 80端口監聽客戶端請求:

  1. [root@proxy ~]# netstat -anptu | grep nginx
  2. tcp        0        0 0.0.0.0:80        0.0.0.0:*        LISTEN        10441/nginx

3)設置防火牆與SELinux

  1. [root@proxy ~]# firewall-cmd --set-default-zone=trusted
  2. [root@proxy ~]# setenforce 0

4)測試首頁文件

Nginx Web服務默認首頁文檔存儲目錄爲/usr/local/nginx/html/,在此目錄下默認有一個名爲index.html的文件,使用客戶端訪問測試頁面:

  1. [root@client ~]# curl http://192.168.4.5
  2. <html>
  3. <head>
  4. <title>Welcome to nginx!</title>
  5. </head>
  6. <body bgcolor="white" text="black">
  7. <center><h1>Welcome to nginx!</h1></center>
  8. </body>
  9. </html>

步驟二:升級Nginx服務器

1)編譯新版本nginx軟件

  1. [root@proxy ~]# tar -zxvf nginx-1.12.2.tar.gz
  2. [root@proxy ~]# cd nginx-1.12.2
  3. [root@proxy nginx-1.12.2]# ./configure \
  4. > --prefix=/usr/local/nginx \
  5. > --user=nginx \
  6. > --group=nginx \
  7. > --with-http_ssl_module
  8. [root@proxy nginx-1.12.2]# make            

2) 備份老的nginx主程序,並使用編譯好的新版本nginx替換老版本

  1. [root@proxy nginx-1.12.2]# mv /usr/local/nginx/sbin/nginx \
  2. >/usr/local/nginx/sbin/nginxold
  3. [root@proxy nginx-1.12.2]# cp objs/nginx /usr/local/nginx/sbin/     //拷貝新版本
  4. [root@proxy nginx-1.12.2]# make upgrade                            //升級
  5. /usr/local/nginx/sbin/nginx -t
  6. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  7. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  8. kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
  9. sleep 1
  10. test -f /usr/local/nginx/logs/nginx.pid.oldbin
  11. kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
  12. [root@proxy ~]# /usr/local/nginx/sbin/nginx –v                //查看版本

步驟三:客戶端訪問測試

1)分別使用瀏覽器和命令行工具curl測試服務器頁面

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

2 案例2:用戶認證

2.1 問題

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

  1. 訪問Web頁面須要進行用戶認證
  2. 用戶名爲:tom,密碼爲:123456

2.2 方案

模板配置文件框架以下:

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
  2. 全局配置(用戶名,日誌,進程)
  3. http{
  4. server{
  5. listen 80;
  6. server_name localhost;
  7. root html;
  8. }
  9. server{
  10. listen 80;
  11. server_name localhost;
  12. root www;
  13. }
  14. }

經過Nginx實現Web頁面的認證,須要修改Nginx配置文件,在配置文件中添加auth語句實現用戶認證。最後使用htpasswd命令建立用戶及密碼便可。

2.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:修改Nginx配置文件

1)修改/usr/local/nginx/conf/nginx.conf

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
  2. .. ..
  3. server {
  4. listen 80;
  5. server_name localhost;
  6. auth_basic "Input Password:";                        //認證提示符
  7. auth_basic_user_file "/usr/local/nginx/pass";        //認證密碼文件
  8. location / {
  9. root html;
  10. index index.html index.htm;
  11. }
  12. }

2)生成密碼文件,建立用戶及密碼

使用htpasswd命令建立帳戶文件,須要確保系統中已經安裝了httpd-tools。

  1. [root@proxy ~]# yum -y install httpd-tools
  2. [root@proxy ~]# htpasswd -c /usr/local/nginx/pass tom        //建立密碼文件
  3. New password:
  4. Re-type new password:
  5. Adding password for user tom
  6. [root@proxy ~]# htpasswd /usr/local/nginx/pass jerry     //追加用戶,不使用-c選項
  7. New password:
  8. Re-type new password:
  9. Adding password for user jerry
  10. [root@proxy ~]# cat /usr/local/nginx/pass

3)重啓Nginx服務

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload    //從新加載配置文件    
  2. //請先確保nginx是啓動狀態才能夠執行命令成功,不然報錯

步驟二:客戶端測試

1)登陸192.168.4.100客戶端主機進行測試

  1. [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服務配置,添加相關虛擬主機配置以下

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
  2. .. ..
  3. server {
  4. listen 80;                                     //端口
  5. server_name www.a.com;                             //域名
  6. auth_basic "Input Password:";                        //認證提示符
  7. auth_basic_user_file "/usr/local/nginx/pass";        //認證密碼文件
  8. location / {
  9. root html;                                    //指定網站根路徑
  10. index index.html index.htm;
  11. }
  12. }
  13. … …
  14. server {
  15. listen 80;                                        //端口
  16. server_name www.b.com;                             //域名
  17. location / {
  18. root www;                                 //指定網站根路徑
  19. index index.html index.htm;
  20. }
  21. }

2)建立網站根目錄及對應首頁文件

  1. [root@proxy ~]# mkdir /usr/local/nginx/www
  2. [root@proxy ~]# echo "www" > /usr/local/nginx/www/index.html

3)重啓nginx服務

  1. [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

步驟二:客戶端測試

1)修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析

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

2)登陸192.168.4.100客戶端主機進行測試

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

  1. [root@client ~]# firefox http://www.a.com            //輸入密碼後能夠訪問
  2. [root@client ~]# firefox http://www.b.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,主要應用在網絡數據加密。

信息摘要:MD五、sha256,主要應用在數據完整性校驗、數據秒傳等。

4.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:配置SSL虛擬主機

1)生成私鑰與證書

  1. [root@proxy ~]# cd /usr/local/nginx/conf
  2. [root@proxy ~]# openssl genrsa > cert.key                            //生成私鑰
  3. [root@proxy ~]# openssl req -new -x509 -key cert.key > cert.pem     //生成證書

2)修改Nginx配置文件,設置加密網站的虛擬主機

  1. [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
  2. … …    
  3. server {
  4. listen 443 ssl;
  5. server_name          www.c.com;
  6. ssl_certificate cert.pem;
  7. ssl_certificate_key cert.key;
  8. ssl_session_cache shared:SSL:1m;
  9. ssl_session_timeout 5m;
  10. ssl_ciphers HIGH:!aNULL:!MD5;
  11. ssl_prefer_server_ciphers on;
  12. location / {
  13. root html;
  14. index index.html index.htm;
  15. }
  16. }

步驟二:客戶端驗證

1)修改客戶端主機192.168.4.100的/etc/hosts文件,進行域名解析

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

2)登陸192.168.4.100客戶端主機進行測試

  1. [root@client ~]# firefox https://www.c.com            //信任證書後能夠訪問
相關文章
相關標籤/搜索