Nginx核心模塊與配置

Nginx簡介

Nginx是一個高性能WEB服務器,除了它之外還有Apache、Tomcat、Jetty、IIS等都是WEB服務器。相應的也都有具備Web服務的基本功能。

Nginx的優勢

  • Tomcat、Jetty面向java語言,先天就是重量級的Web服務器。
  • IIS只能在Windows操作系統上運行,但是Window作爲服務器從穩定性等方面都不如類似UNIX等系統,所以需要高性能Web服務器的場合下IIS並不佔優勢;
  • Apache的發展時期很長,作爲世界第一大Web服務器,它有許多優點,如穩定、開源、跨平臺等。但是由於長期發展,性能完善,逐漸被設計成一個重量級、不支持高併發的Web服務器。若有數以萬計的HTTP請求同時訪問,就會導致服務器上消耗大量內存,操作系統內核對成百上千Apache進程進行管理也會消耗大量CPU資源。

在這裏插入圖片描述

Nginx的編譯與安裝

安裝環境準備

Linux內核2.6以上版本

因爲只有2.6之後才支持epool,在此之前使用select或pool多路複用IO模型,無法解決高併發壓力的問題。可以通過uname -a來查看系統內核版本。
在這裏插入圖片描述
GCC編譯器
GCC(GNU Compiler Conllection)可用來編譯C語言程序,Nginx不會直接提供二進制可執行程序,只能下載源碼進行編譯;

PCRE庫
PCRE(Perl Compatible Regular Expressions)該庫支持正則表達式;

zlib庫
用於對HTTP包的內容做gzip格式的壓縮,可以減少網絡傳輸量。

OpenSSL開發庫
爲了能支持在更安全的SSL協議上傳輸HTTP,另外還支持MD5、SHA1等散列函數。

[root@localhost installpack]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel

下載nginx源碼

官網下載:http://nginx.org/en/download.html
在這裏插入圖片描述
解壓

tar -zxvf nginx-1.18.0.tar.gz

編譯安裝

./configure && make && make install

查看版本

[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.18.0

啓動

./nginx

瀏覽器訪問

在這裏插入圖片描述

更新nginx配置模塊

模塊更新

./configure --with-pcre --with-http_stub_status_module --with-http_ssl_module
make

備份之前的配置
在這裏插入圖片描述
在這裏插入圖片描述
將目前的配置拷貝到安裝目錄

在這裏插入圖片描述

nginx控制命令

#查看命令幫助
./sbin/nginx -?
#默認方式啓動
./sbin/nginx
#指定配置文件啓動
./sbin/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
#設置全局命令
./sbin/nginx -g "user root;"

Nginx架構說明

在這裏插入圖片描述

  • Master進程:不處理網絡請求,主要負責調度工作進程,加載配置,啓動工作進程及非停止升級,所以,nginx啓動以後,查看操作系統的進程列表,就能看到至少有兩個nginx進程;

  • 服務器實際上處理網絡請求及相應的是工作進程(Worker),在類UNIX系統上,nginx可以配置多個worker,而每個worker進程都可以同時處理數以千計的網絡請求。

  • 模塊化設計:nginx的worker包括核心和功能性模塊。核心模塊負責爲之一個運行循環,執行網絡請求處理的不同階段的模塊功能,如網絡讀寫、存儲讀寫、內容傳輸、外出過濾,以及將請求發往上游服務器等。而其代碼的模塊化設計,也使得我們可以根據需要對其功能模塊進行適當的選擇和修改,編譯成具有特定功能的服務器。

  • 事件驅動、異步及非阻塞,可以說是nginx的一獲得高併發、高性能的關鍵隱私,同時得益於對Linux、Solaris等操作系統內核中事件通知及IO性能增強功能的採用,如kqueue、epoll及event ports。

Nginx核心模塊

在這裏插入圖片描述

核心模塊的講解以及用法:http://nginx.org/en/docs/

Nginx配置與使用

配置文件的語法格式

基礎配置說明

#屬性  屬性參數
#配置nginx worker進程數量
worker_processes  1;

#配置塊
#時間模塊配置
events {
    #屬性
    #每個worker 進程可以接受最大連接數
    worker_connections  1024;
}

# http服務根路徑,裏面可以包含多個server
http {
     
     # 參數
    include       mime.types;
    default_type  application/octet-stream;
    
    # 是否可以發送文件
    sendfile        on;
    
    # 超時時間
    keepalive_timeout  65;

    #server 模塊
    server {

    	# 監聽端口
	listen       80;
	
	# 指向哪個服務器,可以有多個,匹配優先級:全路徑匹配 > 通配符匹配左邊大於右邊
        server_name  localhost;
        
	# 可以有多個location,指定訪問路徑
	location / {
	    # 當前站點的根目錄(相對於nginx)
            root   html;
            index  index.html index.htm;
        }
	location /static {
            root   html;

            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    #server 模塊
    server {
    	# 監聽端口
	listen       80;
	# 服務域名設置
        server_name  localhost;
	location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

配置靜態代理

新增配置

server {
        listen       80;
        server_name  www.hello.com;
        root /www/hello/;
        location / {
                index index.html;
                }
        }

檢查配置是否有語法錯誤
在這裏插入圖片描述
重新加載配置

更改本地hosts文件
在這裏插入圖片描述
在這裏插入圖片描述

location

語法:location[=|~|~*|^~|@]/url/{......}

  1. =表示把URI作爲字符串,以便參數中的uri做完全匹配;
  2. / 基於uri目錄匹配
  3. ~ 表示正則匹配URI時是字母大小寫敏感的;
  4. ~* 表示正則匹配URI時忽略字母大小寫;
  5. ^~ 表示正則匹配URl是隻需要前半部分與uri參數匹配即可。

匹配優先規則

精確匹配 > 正則匹配 > 前綴最大匹配 > 配置靠前

root指定站點根目錄
可配置在server與location中,基於ROOT路徑+URL中路徑去尋找指定文件;

alias指定站點別名
只能配置location中,基於alias路徑+URL移除location 前綴後的路徑來尋找文件;

配置動靜分離代理

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

基於目錄動靜分離

		# 基於目錄訪問
		location /static {
           autoindex on;
           alias /www/static;
           }
        # 基於正則表達式匹配
        location ~* \.(gif|jpg|png|css|js)$ {
           root /www/static;
        }

在這裏插入圖片描述
在這裏插入圖片描述

防盜鏈配置

location裏面加上,只有hello域名能訪問。

invalid_referers none blocked *.hello.com;
if($invalid_referers){
	return 403;
}

新增一個域名

在這裏插入圖片描述

通過兩個域名都可以訪問圖片;
在這裏插入圖片描述
在這裏插入圖片描述

給圖片添加防盜鏈

location ~* \.(gif|jpg|png|css|js)$ {
        valid_referers none blocked *.hello.com;
        if ( $invalid_referer ){
        return 403;
        }
           root /www/static;
        }
    }

除了hello域名,別的路徑都訪問不到圖片了。
在這裏插入圖片描述

下載限速

location /download {
	limit_rate 1m; #限制每秒下載速度;
	limit_rate_after 30m; //下載30m之後再限速
}

創建IP黑名單

# 封禁指定IP
deny IP;
allow IP;
# 開放指定IP段
allow IP/子網掩碼
# 封禁所有
deny all;
#開放所有
allow all;
#創建黑名單文件
echo 'deny IP;' >> balck.ip

# http配置塊中引入黑名單文件
include black.ip 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章