Nginx安裝,目錄結構與配置文件詳解

1.Nginx簡介

  Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx。javascript

a)爲何Nginx的整體性能比Apache高?

Nginx使用最新的epoll(Linux2.6內核)和kqueue(freebsd)網絡I/O模型,而Apache使用的是傳統的 select模型,目前Linux下可以承受併發訪問的Squuid,Memcached都是採用的是epoll網絡I/O模型。css

b)那麼如 何正確的選擇web服務器呢?

靜態業務:高併發,採用Nginx或者lighttpd
動態業務:採用Nginx或Apache都可
既有動態業務也有靜態業務:Nginx或Apache都可,不要多選要單選
動態業務可有前段代理(haproxy),根據頁面元素的類型,向後轉發相應的服務器進行處理。
說明:Nginx作web(Apache,lighttpd)反向代理(haproxy,lvs,nat)緩存服務器(squid)html

c)windows瀏覽器訪問報錯處理解決方法:

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 ../ 

2.安裝Nginx

  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.

3.啓動並檢查安裝結果

  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地址()

4.Nginx軟件功能模塊說明

  1)Nginx核心功能模塊(Coer functionality),主要負責Nginx的全局應用,針對主配置文件Main區塊和Events區塊,http://nginx.org/en/docs/ngx_core_module.html(更多查看)

  2)標準的http功能模塊集合,http://nginx.org/en/docs(能夠查看更多的功能模塊)

                                   企業應用場景功能模塊彙總

                  

5. Nginx目錄結構

  執行命令 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

6)Nginx主配置文件nginx.conf

  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*2105 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 }
相關文章
相關標籤/搜索