nginx 安裝、配置及優化講解

   最近老是有朋友問我nginx方面的問題,其實我nginx在如今的公司就是作作安裝,建立虛擬主機,作作優化,有時候對於朋友問個人問題,我也無能爲力,感受本身超沒面子,沒辦法只能本身惡補惡補下nginx的理論知識了,像我這樣的人理論真心的不好啊,面試很吃虧啊,哈哈哈哈,因此我決定之後好好看看平時用到的東西的理論知識。php

   下面就給你們,說說我對nginx理解,多多給於意見,謝謝:html


nginx 特性:node

   1. nginx是模塊化設計的,有較好的擴展性;nginx

   2. 高可靠性web

        master/worker 的設計模式面試

        加載並分析配置文件是由master來實現的正則表達式

        worker是nginx響應客戶請求的apache

        在nginx中master進程只能有一個,可是worker進程能夠根據cpu來調整設計模式

   3. 支持熱部署瀏覽器

        不停機(不中止服務)更新配置文件,更換日誌文件,更新服務器程序版本,在服務不停機的狀況下將老版本更新成新版本是徹底沒有問題的能夠稱之爲平滑升級;

   4. 低內存消耗

        例如:10000個keep-alive的鏈接模式下的非活動鏈接,僅消耗2.5M內存

   5. 支持event-driven,aio,mmap等較新型的IO技術

nginx的基本功能:

   1. 首先你們要知道,nginx是一個靜態資源的web服務器,它自身只能接受http請求並返回;

   2. 能夠作http協議的反向代理服務;

   3. 同時nginx仍是pop3,smtp,imap4等郵件服務的反向代理,這個不多用到,反正我是沒有用到過

   4. 能緩存打開的文件(僅限於元數據)、支持FastCHI(和php-fpm交互)等協議

   5. 模塊化(非DSO機制的),過濾器zip,ssi,ssl;

web服務相關的功能:

   1. 虛擬主機(server),作過apache的人知道,apache有一個虛擬主機的功能,能夠根據不一樣的端口,主機名,域名來實現,一樣nginx也有這個功能

   2. keepalive,長連接,多數和keepalive軟件相結合來實現的,多用於負載均衡

   5. 路徑別名,能夠在配置文件來使用alias來設置路徑訪問別名

   6. 基於IP及用戶的訪控制

   7. 支持速率限制及併發數控制等等,在優化的時候會修改這兩項配置

    還有許多,就不在這裏一一介紹了

   ...

nginx 的基本架構:

   1. master/worker模型

       一個master進程,可生成一個或者多個worker進程;

       經過nginx事件驅動來響應用戶請求,例如:epoll,/dev/poll

          消息通知功能:select,poll

       支持sendfile,sendfile64

       支持AIO,mmap

       master:加載配置文件,管理worker進程、平滑升級

  worker:http服務,http代理

模塊類型:

   1. 核心模塊:core,module  標準的

   2. Standard HTTP modules   標準的

   3. Optional HTTP modules   可選的,編譯的時候可選擇加不加入編譯

   4. Mail modules            可選的,編譯的時候可選擇加不加入編譯

   5. 3rd party modules       可選的,編譯的時候可選擇加不加入編譯

用來作什麼?

   1. 靜態資源服務器

通常結合apache來使用,由於nginx只能處理靜態資源,配合apache的話,動態訪問apache靜態訪問nginx,更加有效的提升了訪問速度;

   2. HTTP服務器的反向代理


下面來簡單說下源碼安裝nginx吧

nginx 安裝配置

1. nginx在redhat是沒有被收錄進官方的發行版本的,因此要epl源來安裝,前提是能鏈接互聯網,直接在nginx.org官網中就有epl的yum倉庫源

2. nginx有三種版本

 nginx stable     穩定版本  

 穩定版本是nginx官方不斷的修改bug的版本

 nginx mainline   主線版本 不建議在生產上使用

 主線版本是nginx官方不斷在添加新功能,知道肯定穩定好纔會發行的

 次版本號爲偶數的, 多爲傳統版本

3. 編譯安裝nginx

1). yum -y groupinstall "Development Tools" "Server Platform Development"

2). nginx源碼包安裝通常依賴於如下幾個組件(必須保證這三個報的開發包是安裝好的)

 PCRE library   主要是在url從新的時候支持poll擴展字符設定的

 zlib library   傳輸壓縮的

 openssl

 

 yum -y install openssl-devel pcre-devel zlib-devel

3). 源碼包解壓出來後文件介紹

*重點

*core   核心模塊

*event  事件驅動模塊

*http   web服務模塊 

mail   郵件模塊

misc   不變規則的雜項

os     系統自己相關的專用代碼

4) ./configure --help   查詢幫助

必定要使用普通用戶來運維worker進程

  ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-debug

  --conf-path=/etc/nginx/nginx.conf   指明配置文件

  --user=nginx                        指明用戶

  --group=nginx                       用戶所在組

  --error-log-path=/var/log/nginx/error.log  錯誤日誌

  --http-log=/var/log/nginx/access.log  訪問日誌

  --pid-path=/var/run/nginx/nginx.pid   pid文件

  --lock-path=/var/lock/nginx.lock      lock文件

  --with-http_ssl_module                默認沒有啓用,須要起來

  --with-http_stub_status_module        啓動狀態頁面

  --with-http_gzip_static_module        支持gzip壓縮

  --with-debug          有必要的話,啓用debug

  

  編譯完成後必定要確認epoll這個模塊是被編譯進去的,默認就在編譯列表中的,要是沒有編譯成功爲有大問題


          5) .make && make install

     4. 啓動nginx服務

    1). /usr/local/nginx/sbin/nginx -t 測試語法

2). /usr/local/nginx/sbin/nginx   啓動nginx服務

3). /usr/local/nginx/sbin/nginx -s stop 平滑關閉服務

下面來簡單說下nginx配置文件吧

nginx.conf配置文件參數介紹:

main配置段:

1. worker_connections #;

每一個worker進程所可以響應的對打的併發請求數量;

worker_processes * worker_connections

請求的最大數

2. use [epoll|rgisg|select|poll]

定義使用的事件模型,建議讓nginx自動選擇

3. accept_mutex [on|off]

各worker接受用戶的請求的負載均衡鎖;啓用時,表示用於讓多個worker輪流序列化的響應新請求

4. lock_file /PATH/TO/LOCK_FILE;

event{

...

}

http{

...

1. server{}

定義一個虛擬主機

---基於端口,ss -tnl ---

server{

listen POST;

server_name www.b.com;

root /PATH/TO/DOCUMENTROOT

}

---基於主機名,ss -tnl ---

server{

listen POST;

server_name www.a.com;

root /PATH/TO/DOCUMENTROOT

}

2. listen指令

listen address:[post]

listen post

default_server: 默認虛擬主機,如果沒有定義的話,就選擇第一個虛擬主機來做爲默認的虛擬主機

ssl:用於限制只能經過ssl鏈接提供服務

http2: http version 2;

3. server_name NAME[....];

server_name能夠跟一個或者多個,還可使用通配符和正則表達式,可是二者要分開使用

(1). 首先作精確匹配 :www.lanyulei.com;

(2). 左側通配符 *.lanyulei.com;

(3). 右側統配符 www.lanyulei.*

(4). 正則表達式 !\^\$

(5). default_server

4. tcp_nodelay on|off;

  在keepalive模式下的鏈接是否使用TCP_NODELAY;推薦不使用

5. tcp_nopush on|off

 

6. alias

定義路徑別名的,只能用於location中

 

7. index

index file...;

8. error_page code .. url;

 根據http的狀態碼重定向錯誤頁面

error_page 404 404.html

9. try_file ... ... ... ...;

設置多個主頁

客戶端請求相關的配置


10. keepalive_timeout  默認是75秒

  設定keepalive鏈接的超時時長;0表示禁止長鏈接

11. keepalive_requests number;

  在keepalive鏈接上所容許請求的最大資源數量:默認是100個

12. keepalive_disable

  指明禁止何種瀏覽器使用keepalive功能

13. send_timeout 默認是60秒

當服務器發送給客戶端請求的資源的時候客戶端沒有任何響應,就在設置的超時時間

}

相關文章
相關標籤/搜索