輕松使用Nginx搭建web服務器

jopen 9年前發布 | 22K 次閱讀 Nginx Web服務器

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

輕松使用Nginx搭建web服務器

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

Project 1:Nginx和Apache的區別

1. apache 相對于nginx 的優點:

  • rewrite ,比nginx 的rewrite 強大

    </li>

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

    </li>

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

    </li>

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

    </li> </ul> </blockquote>

    2. nginx相對于apache的優點

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

      </li>

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

      </li>

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

      </li>

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

      </li>

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

      </li>

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

      </li> </ul> </blockquote>

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

      </blockquote>

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

      先說Select:

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

        </li>

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

        </li> </ul>

        再說Epoll:

        • Socket數量無限制

          </li>

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

          </li> </ul> </blockquote>

          原理部分小編覺得讀者知道這些就夠了,起碼當別人問起你選擇上述二者之一的理由你已經夠應付啦,當然小編還給你推薦一種折中的方案,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的啟動狀態

          </blockquote>

          輕松使用Nginx搭建web服務器

          </blockquote>

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

          </blockquote>

          輕松使用Nginx搭建web服務器

          </blockquote>

          到這里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/

          </blockquote>

          輕松使用Nginx搭建web服務器

          </blockquote>

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

          輕松使用Nginx搭建web服務器

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

          輕松使用Nginx搭建web服務器

          下面來測試一下apache的性能

          # pkill nginx

          # service httpd start

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

          輕松使用Nginx搭建web服務器

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

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

          輕松使用Nginx搭建web服務器

          好吧來50000的

          輕松使用Nginx搭建web服務器

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

          </blockquote>

          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:在客戶機分別訪問站點試試

          </blockquote>

          輕松使用Nginx搭建web服務器

          </blockquote>

          輕松使用Nginx搭建web服務器

          </blockquote>

          基于主機頭的

          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.20: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試試

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

          </blockquote>

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

          Project 5:

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

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

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

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

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

          輕松使用Nginx搭建web服務器

          # mkdir certs crl newcerts

          # touch index.txt serial

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

          創建私鑰

          # openssl genrsa 1024 >private/cakey.pem

          # chmod 600 private/cakey.pem

          生成證書文件

          輕松使用Nginx搭建web服務器

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

          # mkdir /usr/local/nginx/certs

          # cd /usr/local/nginx/certs/

          # openssl genrsa 1024 >nginx.key

          # chmod 600 nginx.key

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

          輕松使用Nginx搭建web服務器

          生成證書

          輕松使用Nginx搭建web服務器

          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

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

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

          </blockquote>

          既 然沒有一個可信任的機構來承認這個證書,那么小編就給一個機構唄,還記得小編最初給這臺服務器生成的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 &

          客戶端訪問試試

          輕松使用Nginx搭建web服務器

          </blockquote>

          繼續

          輕松使用Nginx搭建web服務器

          繼續

          輕松使用Nginx搭建web服務器

          GOON

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

          輕松使用Nginx搭建web服務器

          點擊“是”

          輕松使用Nginx搭建web服務器

          關閉瀏覽器重新打開試試

          輕松使用Nginx搭建web服務器

          </blockquote> 來自:http://my.oschina.net/Jerrysun/blog/489407

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!