輕鬆使用Nginx搭建web服務器

      如果讀者以前做過web開發的話,就應該知道如何去搭建一個web服務器來跑你的web站點,在windows下你可能會選擇去用IIS,十分的快捷,在linux下,你可能首先會想到apache,“一哥”( W3Techs網站數據的排名)啦

clip_p_w_picpath002

      今天小編要介紹後起之秀nginx來實現web服務器。小編在前面的博客中也詳細的聊過apache的使用,如今又來說nginx的使用,讀者可能以後搭建web服務器的話就不知道選用哪一種,O(∩_∩)O~,別急,小編這就來給讀者分析一下Nginx和Apache區別,以後讀者就可以根據自己web站點的特點來擇其優即可。

Project 1:Nginx和Apache的區別

1. apache 相對於nginx 的優點:

  • rewrite ,比nginx 的rewrite 強大

  • 動態頁面,nginx處理動態請求是雞肋,一般動態請求要apache去做,nginx只適合靜態和反向。

  • 模塊超多,基本想到的都可以找到

  • 少bug ,nginx 的bug 相對較多超穩定

2. nginx相對於apache的優點

  • 輕量級,同樣起web 服務,比apache佔用更少的內存及資源 ,支持更多的併發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連接併發的情況下,Nginx是Apache服務器不錯的替代品: Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟件平臺之一. 能夠支持高達 50,000 個併發連接數的響應, 這歸功於Nginx爲我們選擇了 epoll and kqueue 作爲開發模型.

  • 抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能

  • 高度模塊化的設計,編寫模塊相對簡單

  • 社區活躍,各種高性能模塊出品迅速啊

  • Nginx本身就是一個反向代理服務器

  • 負載均衡能力突出,Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作爲 HTTP代理 服務器對外進行服務. Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多.

3. 核心區別:apache是同步多進程模型,一個連接對應一個進程;nginx是異步的,多個連接(萬級別)可以對應一個進程

一般來說,需要性能的web 服務,用nginx 。如果不需要性能只求穩定,那就apache 吧。後者的各種功能模塊實現得比前者,例如ssl 的模塊就比前者好,可配置項多。這裏要注意一點,epoll(freebsd 上是 kqueue )網絡IO 模型是nginx 處理性能高的根本理由,但並不是所有的情況下都是epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache 的select 模型或許比epoll 更高性能。

先說Select:

  • Socket數量限制:該模式可操作的Socket數由FD_SETSIZE決定,內核默認32*32=1024.

  • 操作限制:通過遍歷FD_SETSIZE個Socket來完成調度,不管哪個Socket是活躍的,都遍歷一遍(這就是apache慢的原因).

再說Epoll:

  • Socket數量無限制

  • 操作無限制:基於內核提供的反射模式,有活躍Socket時,內核訪問該Socket的callback,不需要遍歷輪詢(這當然是nginx快的原因啦).

原理部分小編覺得讀者知道這些就夠了,起碼當別人問起你選擇上述二者之一的理由你已經夠應付啦,當然小編還給你推薦一種折中的方案,nginx做前端,apache做後端啦

Project 2:安裝nginx

軟件需求:

官方最新的是nginx-1.3.16.tar.gz

官方最新libevent-2.0.21-stable.tar.gz 提供事件處理機制,linux 5.4 自帶的也可以,默認安裝了

Pcre以及pcre-devel,默認pcre是安裝的,pcre-devel需要使用yum安裝

Step 1:安裝pcre-devel,以及建立nginx用戶

# yum install pcre-devel

# groupadd -r nginx

# useradd -r -g nginx -M nginx

Step 2:解壓縮nginx的源碼並安裝

# tar -zxvf nginx-1.3.16.tar.gz -C /usr/local/src/

# cd /usr/local/src/nginx-1.3.16/

# ./configure \

--conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--user=nginx \

--group=nginx \

--with-http_ssl_module \

--with-http_flv_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/tmp/nginx/client/ \

--http-proxy-temp-path=/var/tmp/nginx/proxy/ \

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

--with-pcre

# make && make install

# mkdir -p /var/tmp/nginx/client

Step 3:啓動nginx服務並在客戶端做測試

# /usr/local/nginx/sbin/nginx & //這裏小編還沒寫啓動腳本,之後會附上

查詢nginx的啓動狀態

clip_p_w_picpath004

客戶機瀏覽器輸入http://192.168.111.10試試

clip_p_w_picpath006

到這裏nginx的簡單安裝就算完成了

Project 3:靜態網頁的負載測試

前面總是說nginx在處理靜態網頁方面性能優越於apache,那這裏小編就來測試一下來試試,nginx的web站點主目錄在/usr/local/nginx/html,apache的web站點主目錄在/var/www/html,編寫一個相同的靜態頁面分別放到兩個web站點主目錄

Step 1:建立相同的測試頁

# rm –rf /usr/local/nginx/html/index.html //刪除原有的主頁

# echo "This is testPage." >/usr/local/nginx/html/index.html

# echo "This is testPage." >/var/www/html/index.html

Step 2:ab工具測試nginx

# pkill nginx

# /usr/local/nginx/sbin/nginx &

# ab -c 1000 -n 5000 http://192.168.111.10:80/

clip_p_w_picpath008

# ab -c 1000 -n 10000 http://192.168.111.10:80/

clip_p_w_picpath010

# ab -c 1000 -n 50000 http://192.168.111.10:80/

clip_p_w_picpath012

下面來測試一下apache的性能

# pkill nginx

# service httpd start

# ab -c 1000 -n 5000 http://192.168.111.10:80/

clip_p_w_picpath014

居然還沒當掉,那就來個10000的試試

# ab -c 1000 -n 10000 http://192.168.111.10:80/

clip_p_w_picpath016

好吧來50000的

clip_p_w_picpath018

讀者可以好好看看小編在圖片上圈的數字,很明顯nginx在處理靜態頁面方面很出色啦

Project 4:實現虛擬主機啦,這個是比較常用的功能啦

Nginx的配置文件是比較簡潔啦,配置起來也不是那麼麻煩

基於IP的虛擬主機

Step 1:準備工作

增加一個網卡地址(原有的是192.168.111.10)

# ifconfig eth0:0 192.168.111.20

建立兩個站點目錄

# mkdir /website1

# mkdir /website2

建立兩個存放日誌的目錄

# mkdir /var/log/nginx/website1

# mkdir /var/log/nginx/website2

創建兩個測試頁

# echo "This is website1" >/website1/index.html

# echo "This is website2" >/website2/index.html

Step 2:修改配置文件,原有的配置文件中默認有一個server節點,修改一下,然後再添加一個server節點

server {

listen 192.168.111.10:80;

server_name localhost;

#charset koi8-r;

access_log /var/log/nginx/website1/access.log;

error_log /var/log/nginx/website1/error.log;

location / {

root /website1;

index index.html index.htm;

}

error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 192.168.111.20:80;

server_name localhost;

#charset koi8-r;

access_log /var/log/nginx/website2/access.log;

error_log /var/log/nginx/website2/error.log;

location / {

root /website2;

index index.html index.htm;

}

error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

Step 3:停掉原有的apache服務

# service httpd stop

# /usr/local/nginx/sbin/nginx &

Step 4:在客戶機分別訪問站點試試

clip_p_w_picpath020

clip_p_w_picpath022

基於主機頭的

Step 1:修改配置文件

server {

listen 192.168.111.10:80;

server_name www.website1.com;

#charset koi8-r;

access_log /var/log/nginx/website1/access.log;

error_log /var/log/nginx/website1/error.log;

location / {

root /website1;

index index.html index.htm;

}

error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

server {

listen 192.168.111.10:80;

server_name www.website2.com;

#charset koi8-r;

access_log /var/log/nginx/website2/access.log;

error_log /var/log/nginx/website2/error.log;

location / {

root /website2;

index index.html index.htm;

}

error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

Step 2:修改本機的hosts文件,並重啓nginx服務

192.168.111.10 www.website1.com

192.168.111.10 www.website2.com

# pkill nginx

# /usr/local/nginx/sbin/nginx &

Step 3:在瀏覽器分別輸入www.website1.comwww.website2.com試試

clip_p_w_picpath024

clip_p_w_picpath026

完成了吧,下面小編就來實現簡單的安全性的訪問(使用ssl來控制),這就涉及到證書的創建啦,這裏小編將該服務器即作爲web服務器,又作爲CA服務器,如果作爲CA服務器,那麼首先的給CA創建證書

Project 5:

Step 1:配置創建證書的配置文件,以及創建證書

# vim /etc/pki/tls/openssl.cnf

45行修改爲dir = /etc/pki/CA

clip_p_w_picpath028

clip_p_w_picpath030

根據配置文件的需求創建相關的文件夾和文件

clip_p_w_picpath032

# mkdir certs crl newcerts

# touch index.txt serial

# echo 01 >>serial //初始化文件

創建私鑰

# openssl genrsa 1024 >private/cakey.pem

# chmod 600 private/cakey.pem

生成證書文件

clip_p_w_picpath034

Step 2:建立Nginx的安全目錄,並生成相關的私鑰和證書文件

# mkdir /usr/local/nginx/certs

# cd /usr/local/nginx/certs/

# openssl genrsa 1024 >nginx.key

# chmod 600 nginx.key

因爲小編的這臺服務器即作爲CA又作爲web服務器,所以可以證書申請的過程可以直接在本機做

clip_p_w_picpath036

生成證書

clip_p_w_picpath038

Step 3:修改nginx的配置文件,添加用於安全訪問的站點

server {

listen 192.168.111.10:443;

server_name www.zzu.com;

ssl on;

ssl_certificate /usr/local/nginx/certs/nginx.cert;

ssl_certificate_key /usr/local/nginx/certs/nginx.key;

ssl_session_timeout 5m;

access_log /var/log/nginx/access.log;

error_log /var/log/nginx/error.log;

ssl_protocols SSLv2 SSLv3 TLSv1;

ssl_ciphers HIGH:!aNULL:!MD5;

ssl_prefer_server_ciphers on;

location / {

root html;

index index.html index.htm;

}

}

Step 4:重啓nginx服務,修改客戶機的hosts文件並訪問

# pkill nginx

# /usr/local/nginx/sbin/nginx &

修改hosts文件

192.168.111.10 www.zzu.com

當首次訪問的時候會提示風險

clip_p_w_picpath040

clip_p_w_picpath042

既然沒有一個可信任的機構來承認這個證書,那麼小編就給一個機構唄,還記得小編最初給這臺服務器生成的CA證書嗎,web網站的證書就是這個CA發的,如果客戶端信任這個CA了,那不就信任web的證書了麼,那麼就來實現吧,原理是使用證書鏈,在發送web證書的時候附帶將其上級的證書帶過去

Step 5:修改web的證書,將CA的證書內容加進去,但是要注意加的順序,web證書的內容在前,CA證書在後

# cp /etc/pki/CA/cacert.pem /usr/local/nginx/certs

# cd /usr/local/nginx/certs/

# cat cacert.pem >> nginx.cert

重啓ngnix服務是必須的

# pkill nginx

# /usr/local/nginx/sbin/nginx &

客戶端訪問試試

clip_p_w_picpath044

繼續

clip_p_w_picpath046

繼續

clip_p_w_picpath048

GOON

clip_p_w_picpath050

clip_p_w_picpath052

clip_p_w_picpath054

clip_p_w_picpath056

clip_p_w_picpath058

clip_p_w_picpath060

點擊“是”

clip_p_w_picpath062

關閉瀏覽器重新打開試試

clip_p_w_picpath064

好啦,小編要實現的幾項已近完成了,當然這只是一些簡單的應用,在後面的博文中小編將會介紹如何搭建”LNMP”,敬請關注哈。。。。。

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