nginx安裝和入門

特別鳴謝 魯班學院

Nginx簡介與安裝

概要:

• Nginx 簡介
• Nginx 架構說明
• Nginx 基礎配置與使用

一、Nginx 簡介與安裝

1.Nginx 簡介

Nginx是一個高性能WEB服務器,除它之外Apache、Tomcat、Jetty、IIS,它們都是Web服務器,或者叫做WWW(World Wide Web)服務器,相應地也都具備Web服務器的基本功能。Nginx 相對基它WEB服務有什麼優勢呢?

  1. Tomcat、Jetty 面向java語言,先天就是重量級的WEB服務器,其性能與Nginx沒有可比性。
  2. IIS只能在Windows操作系統上運行。Windows作爲服務器在穩定性與其他一些性能上都不如類UNIX操作系統,因此,在需要高性能Web服務器的場合下IIS並不佔優。
  3. Apache的發展時期很長,而且是目前毫無爭議的世界第一大Web服務器,其有許多優點,如穩定、開源、跨平臺等,但它出現的時間太長了,在它興起的年代,互聯網的產業規模遠遠比不上今天,所以它被設計成了一個重量級的、不支持高併發的Web服務器。在Apache服務器上,如果有數以萬計的併發HTTP請求同時訪問,就會導致服務器上消耗大量內存,操作系統內核對成百上千的Apache進程做進程間切換也會消耗大量CPU資源,並導致HTTP請求的平均響應速度降低,這些都決定了Apache不可能成爲高性能Web服務器,這也促使了Lighttpd和Nginx的出現。 下圖可以看出07年到17 年強勁增長勢頭。在這裏插入圖片描述

2.編譯與安裝

安裝環境準備:

(1)linux 內核2.6及以上版本:

只有2.6之後才支持epool ,在此之前使用select或pool多路複用的IO模型,無法解決高併發壓力的問題。通過命令uname -a 即可查看。
#查看 linux 內核
uname -a

(2)GCC編譯器

GCC(GNU Compiler Collection)可用來編譯C語言程序。Nginx不會直接提供二進制可執行程序,只能下載源碼進行編譯。

(3)PCRE庫

PCRE(Perl Compatible Regular Expressions,Perl兼容正則表達式)是由Philip Hazel開發的函數庫,目前爲很多軟件所使用,該庫支持正則表達式。

(4)zlib庫

zlib庫用於對HTTP包的內容做gzip格式的壓縮,如果我們在nginx.conf裏配置了gzip on,並指定對於某些類型(content-type)的HTTP響應使用gzip來進行壓縮以減少網絡傳輸量。

(5)OpenSSL開發庫

如果我們的服務器不只是要支持HTTP,還需要在更安全的SSL協議上傳輸HTTP,那麼就需要擁有OpenSSL了。另外,如果我們想使用MD5、SHA1等散列函數,那麼也需要安裝它。
上面幾個庫都是Nginx 基礎功能所必需的,爲簡單起見我們可以通過yum 命令統一安裝。
#yum 安裝nginx 環境

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel

源碼獲取:
nginx 下載頁:http://nginx.org/en/download.html 。

# 下載nginx 最新穩定版本
wget http://nginx.org/download/nginx-1.14.0.tar.gz
#解壓
tar -zxvf nginx-1.14.0.tar.gz

最簡單的安裝:
全部採用默認安裝

./configure && make && make install
#執行完成之後 nginx 運行文件 就會被安裝在 /usr/local/nginx 下。

基於參數構建

./configure

模塊更新:

# 添加狀態查查看等其它模塊
./configure --with-pcre --with-http_stub_status_module --with-http_ssl_module
# 重新創建主文件
make
# 將新生成的nginx 文件覆蓋 舊文件。
cp objs/nginx /usr/local/nginx/sbin/
# 查看是否更新成功 顯示了 configure 構建參數表示成功
/usr/local/nginx/sbin/nginx -V

控制命令:

#查看命令幫助
./sbin/nginx -?
#默認方式啓動:
./sbin/nginx
#指定配置文件啓動
./sbing/nginx -c /tmp/nginx.conf
#指定nginx程序目錄啓動
./sbin/nginx -p /usr/local/nginx/
#快速停止
./sbin/nginx -s stop
#優雅停止
./sbin/nginx -s quit
# 熱裝載配置文件
./sbin/nginx -s reload
# 重新打開日誌文件
./sbin/nginx -s reopen
# 設置全局命令,如下表示設置啓動用戶爲root
./sbin/nginx -g "user root;"

二、Nginx 架構說明

Nginx 架構圖:

nginx架構圖

架構說明:

1)nginx啓動時,會生 不處理網絡請求,主要負責調度工作進程,也就是圖示的三項:加載配置、啓動工作進程及非停升級。所以,nginx啓動以後,查看操作系統的進程列表,我們就能看到至少有兩個nginx進程。
2)服務器實際處理網絡請求及響應的是工作進程(worker),在類unix系統上,nginx可以配置多個worker,而每個worker進程都可以同時處理數以千計的網絡請求。
3)模塊化設計。nginx的worker,包括核心和功能性模塊,核心模塊負責維持一個運行循環(run-loop),執行網絡請求處理的不同階段的模塊功能,如網絡讀寫、存儲讀寫、內容傳輸、外出過濾,以及將請求發往上游服務器等。而其代碼的模塊化設計,也使得我們可以根據需要對功能模塊進行適當的選擇和修改,編譯成具有特定功能的服務器。
4)事件驅動、異步及非阻塞,可以說是nginx得以獲得高併發、高性能的關鍵因素,同時也得益於對Linux、Solaris及類BSD等操作系統內核中事件通知及I/O性能增強功能的採用,如kqueue、epoll及event ports。

Nginx 核心模塊:

核心模塊

三、Nginx 配置與使用

知識點

  1. 配置文件語法格式
  2. 配置第一個靜態WEB服務
  3. 配置案例
    a.動靜分離實現
    b.防盜鏈
    c.多域名站點
    d.下載限速
    e.IP 黑名單
    f.基於user-agent分流
  4. 日誌配置

1、配置文件的語法格式:

先來看一個簡單的nginx 配置

worker_processes  1;
events {
   worker_connections  1024;
}
http {
   include       mime.types;
   default_type  application/octet-stream;
   sendfile        on;
   keepalive_timeout  65;
   server {
       listen       80;
       server_name  localhost;
       location / {
           root   html;
           index  index.html index.htm;
       }
       location /nginx_status {
        stub_status on;
        access_log   off;
         }
   }
}

上述配置中的events、http、server、location、upstream等屬於配置項塊。而worker_processes 、worker_connections、include、listen 屬於配置項塊中的屬性。 /nginx_status 屬於配置塊的特定參數參數。其中server塊嵌套於http塊,其可以直接繼承訪問Http塊當中的參數。

配置塊在這裏插入圖片描述

注意 如果配置項值中包括語法符號,比如空格符,那麼需要使用單引號或雙引號括住配置項值,否則Nginx會報語法錯誤。例如:
og_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

2、配置第一個靜態WEB服務

基礎站點演示:
l 創建站點目錄 mkdir -p /usr/www/luban
l 編寫靜態文件
l 配置 nginx.conf
n 配置server
n 配置location
基本配置介紹說明:

(1)監聽端口

語法:listen address:
默認:listen 80;
配置塊:server

(2)主機名稱

語法:server_name name[……];
默認:server_name “”;
配置塊:server
server_name後可以跟多個主機名稱,如server_name www.testweb.com、download.testweb.com;。 支持通配符與正則

(3)location

語法:location[=|~|~*|^~|@]/uri/{……}
配置塊:server
\1. =表示把URI作爲字符串,以便與參數中的uri做完全匹配。
\2. / 基於uri目錄匹配
\3. ~表示正則匹配URI時是字母大小寫敏感的。
\4. ~*表示正則匹配URI時忽略字母大小寫問題。
\5. ^~表示正則匹配URI時只需要其前半部分與uri參數匹配即可。
匹配優先規則:
\1. 精確匹配優先 =
\2. 正則匹配優先 ^~
\3. 前綴最大匹配優先。
\4. 配置靠前優化

(4)root 指定站點根目錄

可配置在 server與location中,基於ROOT路徑+URL中路徑去尋找指定文件。

(5)alias 指定站點別名

只能配置location 中。基於alias 路徑+ URL移除location 前綴後的路徑來尋找文件。
如下示例:
location /V1 {
alias /www/old_site;
index index.html index.htm;
}
#防問規則如下
URL:http://xxx:xx/V1/a.html
最終尋址:/www/old_site/a.thml

動靜分離演示:

l 創建靜態站點
l 配置 location /static
l 配置 ~* .(gif|png|css|js)$

基於目錄動靜分離

server {
listen 80;
server_name *.luban.com;
root /usr/www/luban;
location / {
index luban.html;
}
location /static {
alias /usr/www/static;
}
}

基於正則動靜分離

location ~* .(gif|jpg|png|css|js)$ {
root /usr/www/static;
}

防盜鏈配置演示:

# 加入至指定location 即可實現
valid_referers none blocked *.luban.com;
if ($invalid_referer) {
return 403;
}

下載限速:

location /download {
limit_rate 1m; //限制每S下載速度
limit_rate_after 30m; // 超過30 之 後在下載
}

創建IP黑名單

#封禁指定IP
deny 192.168.0.1;
allow 192.168.0.1;
#開放指定IP 段
allow 192.168.0.0/24;
#封禁所有
deny all;
#開放所有
allow all;
#創建黑名單文件
echo ‘deny 192.168.0.132;’ >> balck.ip
#http 配置塊中引入 黑名單文件
include black.ip;

3、日誌配置:

日誌格式:

log_format main '$remote_addr - remoteuser[remote_user [time_local] “KaTeX parse error: Double superscript at position 32: … '̲status bodybytessent"body_bytes_sent "http_referer” ’
‘“httpuseragent""http_user_agent" "http_x_forwarded_for”’;
access_log logs/access.log main;
#基於域名打印日誌
access_log logs/$host.access.log main;

error日誌的設置

語法:error_log /path/file level;
默認:error_log logs/error.log error;
level是日誌的輸出級別,取值範圍是debug、info、notice、warn、error、crit、alert、emerg,

針對指定的客戶端輸出debug級別的日誌

語法:debug_connection[IP|CIDR]
events {
debug_connection 192.168.0.147;
debug_connection 10.224.57.0/200;
}
注意:debug 日誌開啓 必須在安裝時 添加 --with-debug (允許debug)
nginx.conf

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