Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx。javascript
Nginx使用最新的epoll(Linux2.6內核)和kqueue(freebsd)網絡I/O模型,而Apache使用的是傳統的 select模型,目前Linux下可以承受併發訪問的Squuid,Memcached都是採用的是epoll網絡I/O模型。css
靜態業務:高併發,採用Nginx或者lighttpd
動態業務:採用Nginx或Apache都可
既有動態業務也有靜態業務:Nginx或Apache都可,不要多選要單選
動態業務可有前段代理(haproxy),根據頁面元素的類型,向後轉發相應的服務器進行處理。
說明:Nginx作web(Apache,lighttpd)反向代理(haproxy,lvs,nat)緩存服務器(squid)html
1)ping 跟ip 物理通不通
2)telnet ip :端口 瀏覽器到web服務通不通
3)服務器本地curl ip web服務開沒開
4)查看錯誤日誌如:cat /application/nginx/error_log前端
Pcre全稱(Perl Compatible Regular Expressions),中文perl兼容正則表達式,官方站點爲 http://www.pcre.org,安裝pcre庫是爲了使Nginx支持HTTP Rewrite模塊,安裝以下:java
1)查看當前Linux系統環境,命令以下:
[root@www ~]# cat /etc/redhat-release CentOS release 6.6(Final) [root@www ~]# uname -r 2.6.32-504.el6.x86_64 [root@www ~]# uname -m x86_64#<==64位系統
2)採用yum安裝方式安裝pcre,命令以下:
[root@www ~]# yum install pcre pcre-devel -y [root@www ~]# rpm -qa pcre pcre-devel
3)yum安裝操做後檢查安裝結果,命令以下:(pcre-7.8-6.el6.x86_64提示:yum安裝的pcre版本有些低,不過通常狀況不影響使用)node
[root@www ~]# rpm -qa pcre pcre-devel pcre-devel-7.8-6.el6.x86_64
4)編譯安裝pcrenginx
wget http://sourceforge.net/projects/pcre/files/pcre/7.80/pcre-7.80.tar.gz tar zxf pcre-7.80.tar.gz cd pcre-7.80 ./configure make && make install cd ../
Nginx的英文官方網站是http://nginx.org/,在這裏能夠查看Nginx的各個軟件版本信息。Nginx軟件有三種版本:穩定版、開發版和歷史穩定版web
1.檢查並安裝Nginx基礎依賴包pcre-devel、openssl-devel操做命令以下:正則表達式
[root@www ~]# rpm -qa pcre-devel pcre pcre-devel-7.8-6.el6.x86_64 #<==pcre的devel包已經安裝! pcre-7.8-6.el6.x86_64 #<==pcre包已經安裝! [root@www ~]# rpm -qa openssl-devel openssl openssl-1.0.1e-30.el6.x86_64 #<==這裏沒有opensll「devel」字符串的包
2.安裝openssl-devel,安裝openssl-devel的命令及檢查命令以下:apache
[root@www ~]# yum install -y openssl openssl-devel [root@www ~]# rpm -qa openssl openssl-devel openssl-devel-1.0.1e-30.el6.8.x86_64 openssl-1.0.1e-30.el6.8.x86_64
3.開始安裝Nginx
wget -q http://nginx.org/download/nginx-1.6.3.tar.gz #下載軟件包,進入http://nginx.org/download/ 複製對應版本的連接地址。提示,若是發現Nginx軟件下載地址已不可用,可能版本已更新,可去官方地址http://www.nginx.org下載。
4.安裝的操做過程演示
[root@www ~]# mkdir -p /home/tools [root@www ~]# cd /home/tools [root@www tools]# wget -q http://nginx.org/download/nginx-1.6.3.tar.gz [root@www tools]# ls -l nginx-1.6.3.tar.gz -rw-r--r--1 root root 804164 11月 23 15:26 nginx-1.6.3.tar.gz [root@www tools]# useradd nginx -s /sbin/nologin -M [root@www tools]# tar xf nginx-1.6.3.tar.gz [root@www tools]# cd nginx-1.6.3 [root@www nginx-1.6.3]#./configure --user=nginx --group=nginx --prefix=/application/nginx --with-http_stub_status_module --with-http_ssl_module [root@www nginx-1.6.3]# make [root@www nginx-1.6.3]# make install [root@www nginx-1.6.3]# ln -s /application/nginx-1.6.3 /application/nginx [root@www nginx-1.6.3]# ls -l /application/nginx/總用量 16 drwxr-xr-x. 2 root root 4096 7月 20 11:19 conf drwxr-xr-x. 2 root root 4096 7月 20 11:19 html drwxr-xr-x. 2 root root 4096 7月 20 11:19 logs drwxr-xr-x. 2 root root 4096 7月 20 11:19 sbin
安裝過程出現以下錯誤,執行命令:
yum install openssl openssl-devel-y
出現的錯誤信息以下:
./configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules,or install the OpenSSL library into the system,or build the OpenSSL library statically from the source with nginx by using --with-openssl=<path> option.
1- 啓動前檢查配置文件語法,執行命令
[root@www tools]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.6.3/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.6.3/conf/nginx.conf test is successful
2-啓冬Nginx服務,執行命令
/application/nginx/sbin/nginx
3-查看Nginx服務對應的端口是否啓動
方法一; lsof -i :80
方法二; netstat -lnt|grep 80
4.檢查Nginx啓動實際效果
在瀏覽器輸入 http://10.0.0.8 (10.0.0.8wei an安裝Nginx服務器的IP地址)
在Linux 用wget命令檢測 wget 本機的鏈接的IP地址
curl命令檢測 curl本機鏈接的ip地址()
1)Nginx核心功能模塊(Coer functionality),主要負責Nginx的全局應用,針對主配置文件Main區塊和Events區塊,http://nginx.org/en/docs/ngx_core_module.html(更多查看)
2)標準的http功能模塊集合,http://nginx.org/en/docs(能夠查看更多的功能模塊)
企業應用場景功能模塊彙總
執行命令 tree /application/nginx ;若是tree命令找不到就執行 yum install tree -y安裝
1 [root@www ~]# tree /application/nginx/ 2 /application/nginx/ 3 |-- client_body_temp 4 |-- conf #這是Nginx全部配置文件的目錄,極其重要 5 | |-- fastcgi.conf #fastcgi相關參數的配置文件 6 | |-- fastcgi.conf.default #fastcgi.conf的原始備份 7 | |-- fastcgi_params #fastcgi的參數文件 8 | |-- fastcgi_params.default 9 | |-- koi-utf 10 | |-- koi-win 11 | |-- mime.types #媒體類型, 12 | |-- mime.types.default 13 | |-- nginx.conf #這是Nginx默認的主配置文件 14 | |-- nginx.conf.default 15 | |-- scgi_params #scgi相關參數文件,通常用不到 16 | |-- scgi_params.default 17 | |-- uwsgi_params #uwsgi相關參數文件,通常用不到 18 | |-- uwsgi_params.default 19 | `-- win-utf 20 |-- fastcgi_temp #fastcgi臨時數據目錄 21 |-- html #這是編譯安裝時Nginx的默認站點目錄,相似 22 Apache的默認站點htdocs目錄 23 | |--50x.html # 錯誤頁面優雅替代顯示文件,例如:出現502錯誤時會調用此頁面 24 # error_page 500502503504 /50x.html; 25 | `-- index.html # 默認的首頁文件,首頁文件名字是在nginx.conf中事先定義好的。 26 |-- logs #這是Nginx默認的日誌路徑,包括錯誤日誌及訪問日誌 27 | |-- access.log # 這是Nginx的默認訪問日誌文件,使用tail -f access.log,能夠實時觀看網站用戶訪問狀況信息 28 | |-- error.log # 這是Nginx的錯誤日誌文件,若是Nginx出現啓動故障等問題,必定要看看這個錯誤日誌 29 | `-- nginx.pid # Nginx的pid文件,Nginx進程啓動後,會把全部進程的ID號寫到此文件 30 |-- proxy_temp #臨時目錄 31 |-- sbin #這是Nginx命令的目錄,如Nginx的啓動命令nginx 32 | `-- nginx #Nginx的啓動命令nginx 33 |-- scgi_temp #臨時目錄 34 `-- uwsgi_temp #臨時目錄 35 9 directories,21 files
1.Nginx主配置文件nginx.conf是一個純文本類型的文件(其餘配置文件也是如此)Nginx整個配置文件nginx.conf主題框架:
2.查看Nginx配置文件
1 [root@www conf]# egrep -v "#|^$" nginx.conf.default ←去掉包含#號和空行的內容 2 worker_processes 1; ← worker進程的數量 3 events { ← 事件區塊開始 4 worker_connections 1024; ←每一個worker進程支持的最大鏈接數 5 } ←事件區塊結束 6 http { ← HTTP區塊開始 7 include mime.types; ← Nginx支持的媒體類型庫文件 8 default_type application/octet-stream; ← 默認的媒體類型 9 sendfile on; ←開啓高效傳輸模式 10 keepalive_timeout 65; ←鏈接超時 11 server { ←第一個Server區塊開始,表示一個獨立的虛擬主機站點 12 listen 80; ← 提供服務的端口,默認80 13 server_name localhost; ←提供服務的域名主機名 14 location / { ←第一個location區塊開始 15 root html; ←站點的根目錄,至關於Nginx的安裝目錄 16 index index.html index.htm; ← 默認的首頁文件,多個用空格分開 17 } ←第一個location區塊結果 18 error_page 500502503504 /50x.html; ← 出現對應的http狀態碼時,使用50x.html迴應客戶 19 location = /50x.html { ←location區塊開始,訪問50x.html 20 root html; ← 指定對應的站點目錄爲html 21 } 22 }
Nginx配置文件
1 user nginx nginx; #定義Nginx運行的用戶和用戶組 2 worker_processes 1; #nginx進程數,建議設置爲等於CPU總核心數。 3 error_log /var/log/nginx/error.log info; #全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ] 4 pid /var/run/nginx.pid; #進程文件 5 worker_rlimit_nofile 1024; #一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,可是nginx分配請求並不均勻,因此#建議與ulimit -n的值保持一致
6 7 events 8 { 9 use epoll; #參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,
若是跑在FreeBS #D上面,就用kqueue模型。 10 11 worker_connections 65535; #單個進程最大鏈接數(最大鏈接數=鏈接數*進程數) 12 } 13 14 15 16 http #HTTP區塊開始 17 { 18 include mime.types; #Nginx支持的媒體類型庫文件 19 default_type application/octet-stream; #默認媒體類型 20 #charset utf-8; #默認編碼 21 server_names_hash_bucket_size 128; #服務器名字的hash表大小 22 client_header_buffer_size 32k; #上傳文件大小限制 23 large_client_header_buffers 4 64k; #設定請求緩 24 client_max_body_size 8m; #設定請求緩 25 sendfile on; #開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲o #ff,以平衡磁盤與網絡I/O處理速度,下降系統的負載。注意:若是圖片顯示不正常把這個改爲off。
26 autoindex on; #開啓目錄列表訪問,合適下載服務器,默認關閉。 27 tcp_nopush on; #防止網絡阻塞 28 tcp_nodelay on; #防止網絡阻塞 29 keepalive_timeout 120; #鏈接超時,單位是秒 30 31 #FastCGI相關參數是爲了改善網站的性能:減小資源佔用,提升訪問速度。 32 fastcgi_connect_timeout 300; 33 fastcgi_send_timeout 300; 34 fastcgi_read_timeout 300; 35 fastcgi_buffer_size 64k; 36 fastcgi_buffers 4 64k; 37 fastcgi_busy_buffers_size 128k; 38 fastcgi_temp_file_write_size 128k; 39 40 #gzip模塊設置 41 gzip on; #開啓gzip壓縮輸出 42 gzip_min_length 1k; #最小壓縮文件大小 43 gzip_buffers 4 16k; #壓縮緩衝區 44 gzip_http_version 1.0; #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0) 45 gzip_comp_level 2; #壓縮等級 46 gzip_types text/x-javascript text/css application/xml; #壓縮類型,默認就已經包含text/html,因此下面就不用再寫了,寫上去也不會有問題,可是會有一個warn。 47 gzip_vary on; 48 #limit_zone crawler $binary_remote_addr 10m; #開啓限制IP鏈接數的時候須要使用 49 50 51 52 #虛擬主機的配置 53 server 54 { 55 56 listen 80; #監聽端口 57 58 server_name localhost; #提供服務的域名主機名 59 location / { #第一個location區塊開始 60 root html; #站點的根目錄,至關於Nginx的安裝目錄 61 index index.html index.htm index.jsp; #默認的首頁文件,多個用空格分開 62 } #第一個location區塊結果 63 64 65 66 #圖片緩存時間設置 67 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 68 { 69 expires 10d; 70 } 71 72 73 #JS和CSS緩存時間設置 74 location ~ .*\.(js|css)?$ 75 { 76 expires 1h; 77 } 78 79 80 #日誌格式設定 81 log_format access '$remote_addr - $remote_user [$time_local] "$request" ' 82 '$status $body_bytes_sent "$http_referer" ' 83 '"$http_user_agent" $http_x_forwarded_for'; 84 85 access_log /var/log/nginx/access_$(data+%F -d -1day).log access; #定義本虛擬主機的訪問日誌 86 87 88 89 location / { #對 "/" 啓用反向代理 90 proxy_pass http://127.0.0.1:88; 91 proxy_redirect off; 92 proxy_set_header X-Real-IP $remote_addr; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP 93 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 94 95 #如下是一些反向代理的配置,可選 96 proxy_set_header Host $host; 97 client_max_body_size 10m; #容許客戶端請求的最大單文件字節數 98 client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數, 99 proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) 100 proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時) 101 proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) 102 proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 103 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的設置 104 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) 105 proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 106 107 } 108 109 #設定查看Nginx狀態的地址 110 location /NginxStatus { 111 stub_status on; 112 access_log on; 113 auth_basic "NginxStatus"; 114 auth_basic_user_file conf/htpasswd; #htpasswd文件的內容能夠用apache提供的htpasswd工具來產生。 115 116 } 117 118 #本地動靜分離反向代理配置 119 #全部jsp的頁面均交由tomcat或resin處理 120 location ~ .(jsp|jspx|do)?$ { 121 proxy_set_header Host $host; 122 proxy_set_header X-Real-IP $remote_addr; 123 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 124 proxy_pass http://127.0.0.1:8080; 125 } 126 127 128 #全部靜態文件由nginx直接讀取不通過tomcat或resin 129 location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ 130 { expires 15d; } 131 location ~ .*.(js|css)?$ 132 { expires 1h; } 133 } 134 }