地球最強WEB前端Nginx服務器之搭建基礎靜態WEB站點

地球最強WEB前端Nginx服務器之搭建基礎靜態WEB站點

1.1 Nginx概述及常用Web服務器介紹

1.1.1 Nginx簡介:(來自百度百科)

Nginx (engine x) 是一個高性能的HTTP反向代理服務器,也是一個IMAP/POP3/SMTP服務器Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發佈於2004104日。

其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名201161日,nginx 1.0.4發佈。

Nginx是一款輕量級Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東新浪網易騰訊淘寶等。

提示:紅帽官方的包並沒有收錄Nginx,可能是因爲Nginx的許可證模式跟GNUGPL不一致吧。

寫到這裏我也不禁感概,歐美地區的人真太TMD的牛逼,一言不合就開發個軟件,而且還能改變世界!

1.1.2目前常見的WEB服務器:

1Nginx服務器:

        堪稱目前地球最強的WEB前端服務器,有兩個王牌功能,分別是:靜態頁面處理和反向代理(可以代理httpftpmailphptomcat等)。靜態文件處理能力比Apache強得多、且配置簡單得多。目前併發量大的網站基本上都是使用Nginx(靜態併發能力達到100000/秒)。

提示:要深入瞭解Nginx的功能,可以訪問tengine.taobao.org網站(有中文說明,適合我這樣的英語不太好的中國人,阿里強大啊!)

2Apache服務器:

        功能強大、插件豐富、跨平臺(可以部署在LinuxUnixWindiows上)的WEB服務器,市場佔有率最高,但有被Nginx超越的趨勢。特點:穩定、可靠,但併發能力不強。

3Lighttpd服務器:

     Lighttpd是由一個德國人發起的開源項目,其根本目的是提供一個針對高性能網站,安全、快速、兼容性好並且靈活的WEB服務器,具有非常低的CPU和內存開銷,性能很好,但社區不活躍。

4IBM WebSphere

     WebSphere Application Server是一種功能完善、開放的WEB應用程序服務器,是IBM電子商務計劃的核心部分。基於javaServletsWEB應用程序運行環境,包含了WEB站點提供服務所需的一切,運行時可以協同並擴展ApacheNetscapeIISIBMHTTPWeb服務器。

5WindowsIISInternetInformation Server):

        原生於WindowsWEB服務器,只適合部署在Windows服務器上,全球前100的互聯網WEB服務器基本上不使用(可能除了微軟吧)。

6Tomcat服務器:

     Tomcat是一個開源的Serlvet容器,它是Apache基金會Jakarta項目中的一個核心項目,有ApacheSun和一些其它公司及個人共同開發而成。Tomcat既是一個Servlet容器,有具備傳統的WEB服務器功能:可以解析靜態html頁面,但處理靜態html能力遠不能與Apache相比(Tomcat1024併發,Apache2000併發),實際應用中可以把ApacheTomcat組合到一起,Apache處理靜態htmlTomcat處理jspServlet(即通常說的動靜分離)。

提示:由於Tomcat併發能力比較低,所以只適合做小規模併發(應用中要提高Tomcat併發能力的話可以一臺機器跑多個Tomcat,前提是服務器性能比較好),大規模併發需求的應用使用WeblogicJboss

1.2 Nginx安裝和啓動

    本文例子使用的系統和軟件環境:

    操作系統:CentOS6.5 64位版

   IP地址:192.168.0.12/24

1.2.1以源代碼方式編譯安裝

    紅帽官方沒有收錄Nginx,因此沒有rpm包,需要的話可以自己打包成rpm包。

1步:下載Nginx源代碼包

    到Nginx官網http://nginx.org/下載需要的源碼包,本文使用的版本是nginx/1.8.0

2步:下載編譯Nginx需要使用的其它軟件源代碼包:pcreopenssl

    其實pcreopenssl包含在CentOS的官方Packages中,但在本文中我想使用不同版本的pcreopenssl,所以另外下載源代碼包。

3步:設定編譯參數並編譯安裝

[root@CentOS6lsrv02 nginx]# ll

total 5712

-rwx------ 1 root root 832104 Jul 10  2015nginx-1.8.0.tar.gz

-rwx------ 1 root root 4015794 Jul  3  2012openssl-1.0.0a.tar.gz

-rwx------ 1 root root 992502 Jul  3  2012 pcre-8.12.tar.bz2

[root@CentOS6lsrv02 nginx]# tar xf nginx-1.8.0.tar.gz -C /opt/src      解壓nginx源碼包到/opt/src

[root@CentOS6lsrv02 nginx]# tar xf pcre-8.12.tar.bz2 -C /opt/src        解壓pcre源碼包到/opt/src

[root@CentOS6lsrv02 nginx]# tar xf openssl-1.0.0a.tar.gz -C/opt/src   解壓openssl源碼包到/opt/src

[root@CentOS6lsrv02 nginx]# cd /opt/src/nginx-1.8.0/

[root@CentOS6lsrv02 nginx-1.8.0]# ./configure \

> --prefix=/opt/nginx

> --with-http_stub_status_module \

> --with-pcre=/opt/src/pcre-8.12/ \

> --with-http_ssl_module \

> --with-openssl=/opt/src/openssl-1.0.0a/

[root@CentOS6lsrv02 nginx-1.8.0]# make && make install

參數解釋:

--prefix=/opt/nginx:指定nginx安裝路徑。

--with-http_stub_status_module:開啓Nginx的狀態檢測模塊。

--with-pcre=/opt/src/pcre-8.12/:指定pcre源代碼包的路徑。使用CentOS官方自帶的pcre需要先安裝pcre-devel包(yum install -y pcre-devel),安裝後不需要指定路徑。

--with-http_ssl_module:啓用ssl安全模塊。

--with-openssl=/opt/src/openssl-1.0.0a:指定openssl源代碼包的路徑。使用CentOS官方自帶的openssl需要先安裝openssl-develyum install -y openssl-devel),安裝後不需要指定路徑。

安裝完後:用ldd查看nginx動態鏈接庫的關係

[root@CentOS6lsrv02 nginx-1.8.0]# ldd /opt/nginx/sbin/nginx

        linux-vdso.so.1=>  (0x00007fffe8788000)

        libpthread.so.0=> /lib64/libpthread.so.0 (0x000000387c400000)

        libcrypt.so.1 =>/lib64/libcrypt.so.1 (0x0000003a44600000)

        libdl.so.2 =>/lib64/libdl.so.2 (0x0000003a40a00000)

        libz.so.1 =>/lib64/libz.so.1 (0x0000003a41e00000)

        libc.so.6 =>/lib64/libc.so.6 (0x0000003a40e00000)

       /lib64/ld-linux-x86-64.so.2 (0x0000003a40600000)

        libfreebl3.so =>/lib64/libfreebl3.so (0x0000003a43a00000)

提示:通過以上參數編譯出來的nginx並沒有調用pcreopenssl的庫,原因是這種方式把pcreopenssl都編譯進nginx了,不需要使用安裝在系統的pcreopenssl

以下是使用系統系統安裝的pcre-developenssl-devel編譯的結果:

 [[email protected]]# ./configure \

> --prefix=/opt/nginx-redhat \

> --with-http_stub_status_module \

> --with-http_ssl_module \

> --with-pcre       <--這項可以不加,nginx默認會使用pcre

[root@CentOS6lsrv02 nginx-1.8.0]# make && make install

[root@CentOS6lsrv02 nginx]# ldd /opt/nginx-redhat/sbin/nginx

        linux-vdso.so.1=>  (0x00007fffda7ff000)

        libpthread.so.0=> /lib64/libpthread.so.0 (0x000000387c400000)

        libcrypt.so.1 =>/lib64/libcrypt.so.1 (0x0000003a44600000)

        libpcre.so.0 =>/lib64/libpcre.so.0 (0x000000387d800000)         看到吧,有引用pcre

        libssl.so.10 =>/usr/lib64/libssl.so.10 (0x000000387c800000)    引用openssl的庫

        libcrypto.so.10=> /usr/lib64/libcrypto.so.10 (0x0000003a46e00000)

        libdl.so.2 =>/lib64/libdl.so.2 (0x0000003a40a00000)

        libz.so.1 =>/lib64/libz.so.1 (0x0000003a41e00000)

        libc.so.6 =>/lib64/libc.so.6 (0x0000003a40e00000)

       /lib64/ld-linux-x86-64.so.2 (0x0000003a40600000)

        libfreebl3.so =>/lib64/libfreebl3.so (0x0000003a43a00000)

        libgssapi_krb5.so.2=> /lib64/libgssapi_krb5.so.2 (0x000000387d000000)

        libkrb5.so.3 =>/lib64/libkrb5.so.3 (0x000000387cc00000)

        libcom_err.so.2=> /lib64/libcom_err.so.2 (0x000000387d400000)

        libk5crypto.so.3=> /lib64/libk5crypto.so.3 (0x0000003a47600000)

        libkrb5support.so.0=> /lib64/libkrb5support.so.0 (0x0000003a46600000)

        libkeyutils.so.1=> /lib64/libkeyutils.so.1 (0x0000003a47a00000)

        libresolv.so.2=> /lib64/libresolv.so.2 (0x0000003a43200000)

        libselinux.so.1=> /lib64/libselinux.so.1 (0x0000003a42200000)

1.2.2啓動和關閉Nginx

1)啓動nginx

Nginx官方默認沒有啓動腳本,使用絕對路徑運行命令啓動

[root@CentOS6lsrv02 ~]# /opt/nginx/sbin/nginx      啓動nginx,默認不會有提示

[root@CentOS6lsrv02 ~]# pstree -aunpl|grep nginx

  |   |      `-vim,16705 nginx.conf

  |           `-grep,16742 --color=auto nginx

  `-nginx,16736                           nginx使用父子進程方式,默認是1個子進程,我修改爲4個,根據服務器使用的CPU核心總數設置。

      |-nginx,16737,nobody <--默認啓動nginx子進程的用戶爲nobody,可以修改。

      |-nginx,16738,nobody

      |-nginx,16739,nobody

`-nginx,16740,nobody

2)關閉nginx

使用killkill -15停止nginx,此爲正常關閉nginx的方式

1.3 Nginx網站服務配置事例

nginx 成功啓動後,默認可以訪問了,在瀏覽器輸入服務器IP地址192.168.0.12

fe574026d4a12118780412c0511e0448.jpg

到此,nginxWEB站點已經搭建成功,只要把網站的數據拷貝到/opt/nginx/html/目錄下,就可以了。簡單吧!!!

1.3.1配置一個簡單的靜態WEB服務器

以下是一個最基礎的靜態WEB站點設置:

vi /opt/nginx/conf/nginx.conf

     1#----------全局設置區開始----------

     2  #user nobody;

     3  worker_processes  4;    <--設置Nginx服務器啓動的子進程數,根據服務器使用的CPU核心總數設定,本文使用的機器是4核心的CPU,支持超線程的CPU一個核心設置2個子進程是沒有問題的

     4

     5  #error_log logs/error.log;

     6  #error_log logs/error.log  notice;

     7  error_log /var/log/nginx/error.log  info;    <--定義錯誤日誌目錄,默認值             爲logs/error.log  info;表示默認在nginx安裝目錄下的logs目錄下面,日誌記錄級別爲info

     8

     9  pid       /var/run/nginx.pid;  <--設置nginx進程文件所在位置(默認值爲logs/nginx.pid;表示默認在nginx安裝目錄下的logs目錄下面)

    10

    11  events {

    12      worker_connections  15000;    <--設置Nginx併發數

    13  }

    14#----------全局設置區結束----------

    15  http {      <--定義Nginx代理的http協議段開端

    16      include       mime.types;    <--該文件定義Nginx能處理的文件類型及對文件的處理方法,可以在該文件中添加類型

    17      default_type  application/octet-stream;<--Nginx不能處理的文件都識別爲二進制,在用戶客戶端瀏覽器彈出對話框,讓用戶下載該文件

    18

    19      log_format  main '$remote_addr - $remote_user [$time_local] "$request" '

    20                                  '$status$body_bytes_sent "$http_referer" '

    21                                  '"$http_user_agent" "$http_x_forwarded_for"';

    22    #log_format定義日誌變量“main”,後面是日誌記錄的格式,可以自定義日誌變量名字和格式

    23      #access_log  logs/access.log  main;

    24

    25      sendfile        on;    <--開啓快速文件傳輸

    26      tcp_nopush     on;    <--這項設置意思是當nginx非常繁忙時(nginx hold不住啦!!!!)就暫時不要把新的連接請求發送到應用層的nginx了,暫存在傳輸層吧

    27

    28      #keepalive_timeout  0;

    29      keepalive_timeout  30;<--保持連接30秒,根據客戶端瀏覽器設定,通常IE30秒,Firefox15秒等,這個值是服務器和客戶端程序共同決定的

    30      gzip on;<--開啓壓縮

    31

    32      server {    <--虛擬主機段開端

    33          listen       80;    <--監聽端口

    34          server_name  localhost;<--主機頭,即域名

    35

    36          charset utf8;<--設置虛擬主機使用的字符集(默認是koi8-r,修改爲utf8比較通用)

    37          access_log  /var/log/localhost-access.log  main;    <--這裏的設置會覆蓋全局區第23行的設置,表示啓用訪問日誌,日誌格式使用前面由log_format定義的格式“main”

    38

    39          location / {   <--萬能location,匹配任何路徑

    40              root   html;           <--定義站點根目錄位置,如:/www/html,默認在nginx安裝目錄下的html目錄

    41              index  index.html index.htm;    <--站點首頁索引順序

    42          }

    43

    44          error_page  404             /404.html;    <--定義404錯誤(找不到頁面)響應文件名,放在站點根目錄下

    45         error_page403  /403.html;    <--定義403錯誤(禁止訪問)響應文件名,放在站點根目錄下

    46          # redirect server error pages to thestatic page /50x.html

    47          #

    48          error_page   500 502 503 504  /50x.html;    <--定義500以上錯誤響應文件名,放在站點跟目錄下

    49          location = /50x.html {

    50              root   html;

    51          }

    52      }    <--虛擬主機段結束

    53  }    <--定義Nginx代理的http協議段結束


小結:本文是關於Nginx安裝和配置一個靜態WEB站點的最簡單的方法,後續我將會繼續發佈關於Nginx的更高級應用,會逐步擴展到大型WEB集羣的應用,希望對技術感興趣的小夥伴繼續關注我的技術博客!!!!!!

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