地球最強WEB前端Nginx服務器之搭建基礎靜態WEB站點php
1.1 Nginx概述及經常使用Web服務器介紹html
1.1.1 Nginx簡介:(來自百度百科)前端
Nginx (engine x) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發佈於2004年10月4日。java
其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。linux
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。nginx
提示:紅帽官方的包並無收錄Nginx,多是由於Nginx的許可證模式跟GNU的GPL不一致吧。vim
寫到這裏我也不由感概,歐美地區的人真太TMD的牛逼,一言不合就開發個軟件,並且還能改變世界!api
1.1.2目前常見的WEB服務器:瀏覽器
1)Nginx服務器:tomcat
堪稱目前地球最強的WEB前端服務器,有兩個王×××功能,分別是:靜態頁面處理和反向代理(能夠代理http、ftp、mail、php、tomcat等)。靜態文件處理能力比Apache強得多、且配置簡單得多。目前併發量大的網站基本上都是使用Nginx(靜態併發能力達到100000/秒)。
提示:要深刻了解Nginx的功能,能夠訪問tengine.taobao.org網站(有中文說明,適合我這樣的英語不太好的中國人,阿里強大啊!)
2)Apache服務器:
功能強大、插件豐富、跨平臺(能夠部署在Linux、Unix、Windiows上)的WEB服務器,市場佔有率最高,但有被Nginx超越的趨勢。特色:穩定、可靠,但併發能力不強。
3)Lighttpd服務器:
Lighttpd是由一個德國人發起的開源項目,其根本目的是提供一個針對高性能網站,安全、快速、兼容性好而且靈活的WEB服務器,具備很是低的CPU和內存開銷,性能很好,但社區不活躍。
4)IBM WebSphere:
WebSphere Application Server是一種功能完善、開放的WEB應用程序服務器,是IBM電子商務計劃的核心部分。基於java和Servlets的WEB應用程序運行環境,包含了WEB站點提供服務所需的一切,運行時能夠協同並擴展Apache、Netscape、IIS和IBM的HTTPWeb服務器。
5)WindowsIIS(InternetInformation Server):
原生於Windows的WEB服務器,只適合部署在Windows服務器上,全球前100的互聯網WEB服務器基本上不使用(可能除了微軟吧)。
6)Tomcat服務器:
Tomcat是一個開源的Serlvet容器,它是Apache基金會Jakarta項目中的一個核心項目,有Apache、Sun和一些其它公司及我的共同開發而成。Tomcat既是一個Servlet容器,有具有傳統的WEB服務器功能:能夠解析靜態html頁面,但處理靜態html能力遠不能與Apache相比(Tomcat:1024併發,Apache:2000併發),實際應用中能夠把Apache與Tomcat組合到一塊兒,Apache處理靜態html,Tomcat處理jsp和Servlet(即一般說的動靜分離)。
提示:因爲Tomcat併發能力比較低,因此只適合作小規模併發(應用中要提升Tomcat併發能力的話能夠一臺機器跑多個Tomcat,前提是服務器性能比較好),大規模併發需求的應用使用Weblogic或Jboss。
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須要使用的其它軟件源代碼包:pcre與openssl
其實pcre與openssl包含在CentOS的官方Packages中,但在本文中我想使用不一樣版本的pcre與openssl,因此另外下載源代碼包。
第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-devel(yum 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並無依賴 pcre 和 openssl 的庫,緣由是這種方式把 pcre 和 openssl 都編譯進nginx了,不須要使用安裝在系統的 pcre和 openssl。
如下是使用系統系統安裝的pcre-devel和openssl-devel編譯的結果:
[root@CentOS6lsrv02nginx-1.8.0]# ./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
使用kill或kill -15中止nginx,此爲正常關閉nginx的方式
1.3 Nginx網站服務配置事例
nginx 成功啓動後,默承認以訪問了,在瀏覽器輸入服務器IP地址192.168.0.12
到此,nginx的WEB站點已經搭建成功,只要把網站的數據拷貝到/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秒,根據客戶端瀏覽器設定,一般IE是30秒,Firefox是15秒等,這個值是服務器和客戶端程序共同決定的
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集羣的應用,但願對技術感興趣的小夥伴繼續關注個人技術博客!!!!!!