Nginx的五大應用場景


應用場景
1、HTTP服務器
Nginx本身也是一個靜態資源的服務器,當只有靜態資源的時候,就可以使用Nginx來做服務器,如果一個網站只是靜態頁面的話,那么就可以通過這種方式來實現部署。
①文檔目錄創建路徑如下:

②設置nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    
    keepalive_timeout  65;

    gzip  on;
	 
    server {
        listen       80;
        charset UTF-8;
		location /{
			root D://com//static//;
			index index.html;
        }
    }
}

③啟動nginx(start nginx),訪問地址:http://localhost/

④指令簡介

◾server : 用於定義服務,http中可以有多個server塊
◾listen : 指定服務器偵聽請求的IP地址和端口,如果省略地址,服務器將偵聽所有地址,如果省略端口,則使用標准端口
◾server_name : 服務名稱,用於配置域名
◾location : 用於配置映射路徑uri對應的配置,一個server中可以有多個location, location后面跟一個uri,可以是一個正則表達式, / 表示匹配任意路徑, 當客戶端訪問的路徑滿足這個uri時就會執行location塊里面的代碼
◾root : 根路徑,當訪問http://localhost/test.html,“/test.html”會匹配到”/”uri, 找到root為/usr/local/var/www/html,用戶訪問的資源物理地址=root + uri = /usr/local/var/www/html + /test.html=/usr/local/var/www/html/test.html
◾index : 設置首頁,當只訪問server_name時后面不跟任何路徑是不走root直接走index指令的;如果訪問路徑中沒有指定具體的文件,則返回index設置的資源,如果訪問http://localhost/html/ 則默認返回index.html
5、location uri正則表達式
◾. :匹配除換行符以外的任意字符
◾? :重復0次或1次
◾+ :重復1次或更多次
◾* :重復0次或更多次
◾\d :匹配數字
◾^ :匹配字符串的開始
◾$ :匹配字符串的結束
◾{n} :重復n次
◾{n,} :重復n次或更多次
◾[c] :匹配單個字符c
◾[a-z] :匹配a-z小寫字母的任意一個
◾(a|b|c) : 屬線表示匹配任意一種情況,每種情況使用豎線分隔,一般使用小括號括括住,匹配符合a字符 或是b字符 或是c字符的字符串
◾\ 反斜杠:用於轉義特殊字符
小括號()之間匹配的內容,可以在后面通過$1來引用,$2表示的是前面第二個()里的內容。正則里面容易讓人困惑的是\轉義特殊字符。

2、靜態服務器
html

<h1>nginx index</h1>
<img src="20201030160749.jpg"></img>

<img src="nice.jpg"></img>

nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    
    keepalive_timeout  65;

    gzip  on;
	 
    server {
        listen 80;
        charset UTF-8;
		set $static_root D://com//static;
		location /{
			root D://com//static//;
			index index.html;
        }
		location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
           root $static_root/image;
        }
    }
}

3、反向代理
反向代理應該是Nginx使用最多的功能了,反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。

簡單來說就是真實的服務器不能直接被外部網絡訪問,所以需要一台代理服務器,而代理服務器能被外部網絡訪問的同時又跟真實服務器在同一個網絡環境,當然也可能是同一台服務器,端口不同而已。

反向代理通過proxy_pass指令來實現。

啟動工程端口8090
訪問地址:http://127.0.0.1:8090/
nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    
    keepalive_timeout  65;

    gzip  on;
	 
    server {
        listen 80;
        charset UTF-8;
		set $static_root D://com//static;
		location /{
			root D://com//static//;
			index index.html;
        }
		location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
           root $static_root/image;
        }
    }
	 
    server {
        listen 8080;
        server_name  127.0.0.1;
        charset UTF-8;
		location /{
			proxy_pass http://127.0.0.1:8090;
			proxy_set_header Host $host:$server_port;
			# 設置用戶ip地址
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
}


訪問:http://127.0.0.1:8080/
顯示如下:

4、負載均衡
負載均衡也是Nginx常用的一個功能,負載均衡其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。

簡單而言就是當有2台或以上服務器時,根據規則隨機的將請求分發到指定的服務器上處理,負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。而Nginx目前支持自帶3種負載均衡策略,還有2種常用的第三方策略。

負載均衡通過upstream指令來實現。

nginx.conf

upstream web_servers {
	   server localhost:8090;
	   server localhost:8091;
	}
	
    server {
        listen 80;
        charset UTF-8;
		location / {
			proxy_pass http://web_servers;
			# 必須指定Header Host
			proxy_set_header Host $host:$server_port;
		}
    }

結果如下:

測試發現:
在火狐、ie、edge 中f5無效, ctrl+f5也是無效。
在chorme中F5無效,ctrl+f5有效。按一次就會請求到另一台服務器。
猜測可能是本地緩存的問題

支持多種負載均衡策略:默認輪詢
①、輪詢
②、權重
③、ip_hash
④、fair(第三方)
⑤、url_hash(第三方)

5、動靜分離
動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。
nginx.conf

upstream web_servers {
	   server localhost:8090;
	   server localhost:8091;
}

server {
        listen 80;
        charset UTF-8;
		set $static_root D://com//static;
		location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
		   root $static_root/image;
		}
		location / {
			proxy_pass http://web_servers;
			# 必須指定Header Host
			proxy_set_header Host $host:$server_port;
		}
		location /favicon.ico {
			root D://com//static//image//;
        }
    }

html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>nginx教程222222222222222</title>
</head>
<body>
<h1>nginx教程2222222222222222222</h1>
<p>nginx教程2222222222222222222。</p>
<img src="logo.jpg"></img>
</body>
</html>

結果

6、其他
①.return指令
②.rewrite指令
重寫URI請求 rewrite,通過使用rewrite指令在請求處理期間多次修改請求URI,該指令具有一個可選參數和兩個必需參數。

第一個(必需)參數是請求URI必須匹配的正則表達式。
第二個參數是用於替換匹配URI的URI。
可選的第三個參數是可以停止進一步重寫指令的處理或發送重定向(代碼301或302)的標志
③.error_page指令
使用error_page指令,您可以配置NGINX返回自定義頁面以及錯誤代碼,替換響應中的其他錯誤代碼,或將瀏覽器重定向到其他URI。在以下示例中,error_page指令指定要返回404頁面錯誤代碼的頁面(/404.html)。
④.日志
⑤.deny 指令
⑥.內置變量
nginx的配置文件中可以使用的內置變量以美元符$開始,也有人叫全局變量。其中,部分預定義的變量的值是可以改變的。
◾$args :#這個變量等於請求行中的參數,同$query_string
◾$content_length :請求頭中的Content-length字段。
◾$content_type :請求頭中的Content-Type字段。
◾$document_root :當前請求在root指令中指定的值。
◾$host :請求主機頭字段,否則為服務器名稱。
◾$http_user_agent :客戶端agent信息
◾$http_cookie :客戶端cookie信息
◾$limit_rate :這個變量可以限制連接速率。
◾$request_method :客戶端請求的動作,通常為GET或POST。
◾$remote_addr :客戶端的IP地址。
◾$remote_port :客戶端的端口。
◾$remote_user :已經經過Auth Basic Module驗證的用戶名。
◾$request_filename :當前請求的文件路徑,由root或alias指令與URI請求生成。
◾$scheme :HTTP方法(如http,https)。
◾$server_protocol :請求使用的協議,通常是HTTP/1.0或HTTP/1.1。
◾$server_addr :服務器地址,在完成一次系統調用后可以確定這個值。
◾$server_name :服務器名稱。
◾$server_port :請求到達服務器的端口號。
◾$request_uri :包含請求參數的原始URI,不包含主機名,如:”/foo/bar.php?arg=baz”。
◾$uri :不帶請求參數的當前URI,$uri不包含主機名,如”/foo/bar.html”。
◾$document_uri :與$uri相同

參見:https://mp.weixin.qq.com/s/FbtVTb8HJwgptAsdnfnWeQ


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM