nginx功能之一 搭建web伺服器
一 nginx的優點
1、可以高併發連線
官方測試Nginx能夠支撐5萬併發連線,實際生產環境中可以支撐2~4萬併發連線數。
原因,主要是Nginx使用了最新的epoll(Linux2.6核心)和kqueue(freeBSD)網路I/O模型,而Apache使用的是傳統的Select模型,其比較穩定的Prefork模式為多程序模式,需要經常派生子程序,所以消耗的CPU等伺服器資源,要比Nginx高很多。
2、記憶體消耗少
Nginx+PHP(FastCGI)伺服器,在3萬併發連線下,開啟10個Nginx程序消耗150MB記憶體,15MB*10=150MB,開啟的64個PHP-CGI程序消耗1280記憶體,20MB*64=1280MB,加上系統自身消耗的記憶體,總共消耗不到2GB的記憶體。
如果伺服器的記憶體比較小,完全可以只開啟25個PHP-CGI程序,這樣PHP-CGI消耗的總記憶體數才500MB。
3、成本低廉
購買F5BIG-IP、NetScaler等硬體負載均衡交換機,需要十多萬到幾十萬人民幣,而Nginx為開源軟體,採用的是2-clause BSD-like協議,可以免費試用,並且可用於商業用途。
BSD開源協議是一個給使用者很大自由的協議,協議指出可以自由使用、修改原始碼、也可以將修改後的程式碼作為開源或專用軟體再發布。
4、配置檔案非常簡單
網路和程式一樣通俗易懂,即使,非專用系統管理員也能看懂。
5、支援Rewrite重寫
能夠根據域名、URL的不同,將http請求分到不同的後端伺服器群組。
6、內建的健康檢查功能
如果NginxProxy後端的某臺Web伺服器宕機了,不會影響前端的訪問。
7、節省頻寬
支援GZIP壓縮,可以新增瀏覽器本地快取的Header頭。
8、穩定性高
用於反向代理,宕機的概率微乎其微。
9、支援熱部署
Nginx支援熱部署,它的自動特別容易,並且,幾乎可以7天*24小時不間斷的執行,即使,執行數個月也不需要重新啟動,還能夠在不間斷服務的情況下,對軟體版本進行升級。
二 搭建靜態web伺服器
1 訪問基本的靜態頁面
(1)使用原始碼包安裝nginx軟體
[[email protected] ~]# yum -y install gcc pcre-devel openssl-devel httpd-tools //安裝依賴包
[[email protected] ~]# useradd -s /sbin/nologin nginx
[[email protected] ~]# tar -xf nginx-1.10.3.tar.gz
[[email protected] ~]# cd nginx-1.12.2
[[email protected] nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx \ //指定安裝路徑
> --user=nginx \ //指定使用者
> --group=nginx \ //指定組
> --with-http_ssl_module //開啟SSL加密功能
> --with-stream //開啟4層反向代理功能
> --with-http_stub_status_module //開啟status狀態頁面
[[email protected] nginx-1.12.2]# make && make install //編譯 安裝
(2) nginx命令的用法
[email protected] ~]# /usr/local/nginx/sbin/nginx //啟動服務
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s stop //關閉服務
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload //重新載入配置檔案
[[email protected] ~]# /usr/local/nginx/sbin/nginx –V //檢視軟體資訊
[[email protected] ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/ //方便後期使用
(3)測試首頁檔案,Nginx Web服務預設首頁文件儲存目錄為/usr/local/nginx/html/,在此目錄下預設有一個名為index.html的檔案,使用客戶端訪問測試頁面:
[[email protected] ~]# 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>
2 訪問nginx Web頁面實現使用者認證
(1)修改Nginx配置檔案
[[email protected] ~]# 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
[[email protected] ~]# yum -y install httpd-tools
[[email protected] ~]# htpasswd -c /usr/local/nginx/pass tom //建立密碼檔案
New password:
Re-type new password:
Adding password for user tom
[[email protected] ~]# htpasswd /usr/local/nginx/pass jerry //追加使用者,不使用-c選項
New password:
Re-type new password:
Adding password for user jerry
[[email protected] ~]# cat /usr/local/nginx/pass
(3)重啟Nginx服務,訪問測試
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload //重新載入配置檔案
[[email protected] ~]# firefox http://192.168.4.5 //輸入密碼後可以訪問
3 基於域名的虛擬主機:修改Nginx配置檔案,新增server容器實現虛擬主機功能;對於需要進行使用者認證的虛擬主機新增auth認證語句。虛擬主機一般可用分為:基於域名、基於IP和基於埠的虛擬主機。
要求: 實現兩個基於域名的虛擬主機,域名分別為www.a.com和www.b.com 對域名為www.a.com的站點進行使用者認證,使用者名稱稱為tom,密碼為123456
(1)修改Nginx服務配置
[[email protected] ~]# 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)建立網站根目錄及對應首頁檔案
[[email protected] ~]# mkdir /usr/local/nginx/www
[[email protected] ~]# echo "www" > /usr/local/nginx/www/index.html
(3)重啟nginx服務
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload
(4)修改客戶端主機的/etc/hosts檔案,進行域名解析
[[email protected] ~]# vim /etc/hosts
192.168.4.5 www.a.com www.b.com
(5)測試
[[email protected] ~]# firefox http://www.a.com //輸入密碼後可以訪問
[[email protected] ~]# firefox http://www.b.com //直接訪問
4 配置基於加密網站的虛擬主機
原始碼安裝Nginx時必須使用--with-http_ssl_module引數,啟用加密模組,對於需要進行SSL加密處理的站點新增ssl相關指令(設定網站需要的私鑰和證書)。 加密演算法一般分為對稱演算法、非對稱演算法、資訊摘要。 對稱演算法有:AES、DES,主要應用在單機資料加密。 非對稱演算法有:RSA、DSA,主要應用在網路資料加密。 資訊摘要:MD5、sha256,主要應用在資料完整性校驗、資料秒傳等
(1)生成私鑰與證書
[[email protected] ~]# cd /usr/local/nginx/conf
[[email protected] ~]# openssl genrsa > cert.key //生成私鑰
[[email protected] ~]# openssl req -new -x509 -key cert.key > cert.pem //生成證書
(2)修改Nginx配置檔案,設定加密網站的虛擬主機
[[email protected] ~]# 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服務並測試
[[email protected] ~]# /usr/local/nginx/sbin/nginx -s reload
[[email protected] ~]# firefox https://www.c.com //信任證書後可以訪問(客戶機測試)