nginx學習總結(不包含安裝過程)

1. nginx常見配置

http服務上支持【若干虛擬主機】。每個虛擬主機對應一個server配置項,配置項里面包含該虛擬主機相關的配置。

server{listen 80 default;server_name www.yonqin.com;index index.html index.htm index.php;root /data/www;location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires      30d;}location ~ .*\.(js|css)?${expires      1h;}
}

  • listen 80;?監聽端口,默認80,小于1024的要以root啟動。可以為listen :80、listen 127.0.0.1:80等形式。
  • server_name www.yonqin.com?用于設置虛擬主機服務名稱,如:127.0.0.1 、 localhost 、域名[www.baidu.comopen in new window?|?www.jd.comopen in new window],也可以進行正則匹配。
  • root /data/www?定義服務器的默認網站根目錄位置。可以是linux的絕對路徑(/xxx/xx),也可以是nginx安裝目錄的相對路徑(html)。
  • index index.jsp index.html index.htm?:定義路徑下默認訪問的文件名,一般跟著root放。
1.1 location 常見的配置項:

location通常用來匹配uri,其基本語法如下:

location [=|~|~*|^~] /uri/ {}

(1)=表示匹配uri時必須做到完全匹配,如

location = /index {}

(2)~表示匹配URI時是字母大小寫敏感的,可以使用正則表達式。

(3)~*表示匹配URI時是忽略字母大小敏感的,可以使用正則表達式。

(4)^~表示匹配uri時只需滿足前綴匹配即可

# 所有 /./img/開頭的uri會全部匹配
location ^~ /./img/ {}

(5)uri參數中是可以使用正則表達式的,如匹配以 .gif .jpg和.jpeg結尾的uri,如下:

location ~* \.(gif|jpg|jpeg)$ {}

(6)以下方式可以匹配所有的uri

location / {}

(7)@?指定一個命名的location,一般用于內部重定義請求:

location @name {…}
1.2文件路徑的定義:

(1)以root方式設置資源路徑

語法 root path ,默認 root html,可以在http、server、location模塊中配置。

location ^~ /backend {root /data/www/backend
}

如果url為?/backend/index/test.html則會返回/data/www/backend/backend/index/test.html這個文件。

(2)以alias方式設置資源路徑

alias也是用來設置文件資源的,它和root不同點在于如何解讀緊跟location后面的uri參數,可以在location中配置:

location ^~ /backend {alias /data/www/backend
}

如果url為?/backend/index/test.html則會返回/data/www/backend/index/test.html文件。

alias會將location后的url部分丟棄掉,而root不會。

1.3 nginx做靜態服務器

我們都知道,nginx的安裝目錄中有這樣一個html的文件夾,這里只做一個基本的演示,進入后進行簡單的修改即可, 修改index.html文件看 可以生效。

我們再結合nginx的基礎配置文件中的以下內容:

server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}
}

進入瀏覽器即可看到效果

2.反向代理解決跨域

在實現代理的過程中,我們需要將/api這個前綴刪除掉,有以下兩種方法,一種是重寫url,如下:

location ^~ /api/ {rewrite ^/api(.*)$ $1 break;proxy_pass http://127.0.0.1:8080;
}

更簡單的做法是,在代理地址的后邊加/,這樣做也會去掉前綴,但不如以上方式靈活:

location ^~ /api/ {proxy_pass http://127.0.0.1:8080/;
}

3. nginx為后端工程做負載均衡

3.1 upstream模塊解讀

nginx 的負載均衡功能依賴于 ngx_http_upstream_module模塊。upstream 模塊應該放于http{}標簽內。

模塊寫法如下:?

upstream backend {ip_hash; server backend1.example.com;server backend2.example.com:8080;server 127.0.0.1:8080;server backup2.example.com:8080;
}

然后在location處使用如下寫法:

location / {proxy_pass http://backend;
}

以上寫法的意思就是,將來同一個url訪問我們的服務時,服務可以由backend中的服務器按照某種特定規則輪流提供

3.2 ngixn負載均衡的五種算法

(1)round robin 輪詢 (默認) 按時間順序依次將請求分配到各個后臺服務器中,掛掉的服務器自動從列表中剔除

upstream bakend {  server 192.168.0.1 down;    server 192.168.0.2;  
}

(2)weight 輪詢權重 weight的值越大分配到的訪問概率越高,主要用于后端每臺服務器性能不均衡的情況下,或在主從的情況下設置不同的權值,達到合理有效的地利用主機資源。

upstream bakend {  server 192.168.0.1 weight=20;  server 192.168.0.2 weight=10;  
}

(3)ip_hash:每個請求按訪問IP的哈希結果分配,使來自同一個IP的訪客固定訪問一臺后端服務器,并且可以有效解決動態網頁存在的session共享問題

upstream bakend {  ip_hash;  server 192.168.0.1:88;  server 192.168.0.2:80;  
} 

(4)url_hash:按訪問的URL的哈希結果來分配請求,使每個URL定向到同一臺后端服務器,可以進一步提高后端服務器緩存的效率 ,Nginx本身不支持url_hash,需要安裝Nginx的hash軟件包。

upstream backend {  server 192.168.0.1:88;     //使用hash語句時,不能在使用weight等其他參數server 192.168.0.2:80;  hash $request_uri;  hash_method crc32;    //使用hash算法
}

(5)fair算法:可以根據頁面大小和加載時間長短智能地進行負載均衡,根據后端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx本身不支持fair,要安裝upstream_fair模塊才能使用。

upstream backend {  server 192.168.0.1:88;  server 192.168.0.2:80;  fair;  
}
簡單的負載均衡的實踐:

1. 創建簡單的SpringBoot項目 ,寫一個controller層的接口 返回當前Java進程的監聽端口號

package spring.learn.nginx;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/nginx")
public class TestContoller {@Autowiredprivate Environment env;@RequestMapping("/test")public String test(){ // 打印當前端口return "nginx yonqin port: "+ env.getProperty("server.port");}
}

2. jar上傳 并啟動

3. 配置nginx.conf?

4.瀏覽器測試

三次請求訪問不同的實例

4. nginx 做資源下載服務器

4.1 訪問控制 allow/deny

Nginx 的訪問控制模塊默認就會安裝,而且寫法也非常簡單,可以分別有多個allow,deny,允許或禁止某個ip或ip段訪問,依次滿足任何一個規則就停止往下匹配。如:

location /status {stub_status on;access_log off;allow 192.168.10.100;allow 172.29.73.0/24;deny all;
}
4.2、列出目錄 autoindex?

打開nginx.conf文件,在location,server 或 http段中加入如下參數 ,通過配置可以做為資源下載站 下。

location ^~ /file {root   /data/www;autoindex on;autoindex_exact_size off;autoindex_localtime on;charset utf-8,gbk;
}
  • autoindex on;運行列出目錄內容。另外兩個參數最好也加上去。
  • autoindex_exact_size off;?默認為on,顯示出文件的確切大小,單位是bytes。改為off后,顯示出文件的大概大小,單位是kB或者MB或者GB。
  • autoindex_localtime on;?默認為off,顯示的文件時間為GMT時間。改為on后,顯示的文件時間為文件的服務器時間。

4.3 演示? 在nginx.conf 中配置
4.4 在瀏覽其中訪問

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63780.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63780.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63780.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS系列(29)-- Scroll Snap詳解

前端技術探索系列:CSS Scroll Snap詳解 📜 致讀者:探索流暢滾動體驗 👋 前端開發者們, 今天我們將深入探討 CSS Scroll Snap,這個強大的滾動優化特性。 基礎特性 🚀 容器設置 /* 基礎滾動…

如何設計高效的商品系統并提升擴展性:從架構到實踐的全方位探索

在現代電商、零售及企業資源管理系統中,商品管理無疑是核心模塊之一。隨著市場的變化與企業規模的擴展,商品系統需要具備強大的功能支持以及高效的擴展能力,以應對日益復雜的業務需求。一個設計良好的商品系統不僅僅是一個商品信息的容器&…

RFdiffusion get_torsions函數解讀

函數功能 get_torsions 函數根據輸入的原子坐標(xyz_in)和氨基酸序列(seq),計算一組主鏈和側鏈的扭轉角(torsions)。同時生成備用扭轉角(torsions_alt),用于表示可以鏡像翻轉的幾何結構,并返回掩碼(tors_mask)和是否平面化(tors_planar)的信息。 輸入參數 xyz…

docker springboot 運維部署詳細實例

環境安裝 [rootiZbp1dcnzq7pzpg9607m6pZ ~]# docker -v Docker version 26.1.4, build 5650f9b鏡像構建 Dockerfile 文件內容 FROM openjdk:8 # Author Info 創建人信息 MAINTAINER ratelcloudfoxmail.com ENV PORT20001 EXPOSE 20001 RUN mkdir /usr/local/ratel-boot-serv…

貪心算法在背包問題上的運用(Python)

背包問題 有n個物品,它們有各自的體積和價值,現有給定容量的背包,如何讓背包里裝入的物品具有最大的價值總和? 這就是典型的背包問題(又稱為0-1背包問題),也是具體的、沒有經過任何延伸的背包問題模型。 背包問題的傳統求解方法較為復雜,現定義有一個可以載重為8kg的背…

【ArcGIS Pro微課1000例】0063:處理無人機數據(空三、生成DOM、DSM、DTM)

使用ArcGIS Pro 正射拼接處理無人機數據流程化工具,不需要額外產品許可的支持,只需要桌面是高級版許可即可支持。ArcGIS Pro處理無人機攝影測量數據主要內容有:空三、生成DOM、DSM、DTM。 文章目錄 一、創建映射項目二、提交自由空三三、添加控制點優化四、提交產品生產一、…

解鎖 Jenkins 搭建全攻略

一、Jenkins 簡介 (一)簡述 Jenkins 的作用與價值 Jenkins 是一款在軟件開發領域備受矚目的開源軟件項目,它基于 Java 開發,是極為重要的持續集成工具。在軟件開發的整個流程中,Jenkins 發揮著關鍵作用,能…

人工智能ACA(四)--機器學習基礎

零、參考資料 一篇文章完全搞懂正則化(Regularization)-CSDN博客 一、 機器學習概述 0. 機器學習的層次結構 學習范式(最高層) 怎么學 監督學習 無監督學習 半監督學習 強化學習 學習任務(中間層&#xff0…

豆包MarsCode:小U的數字插入問題

問題描述 問題分析 問題的核心是找到將數字 b 插入到數字 a 的某個位置后,使形成的數字盡可能大。需要仔細分析以下幾個要點: 1. 分析數字的特性 輸入的兩個數字: a 是一個正整數(例如 76543)。b 是一個非負整數&am…

雅思真題短語梳理(八)

126員工流動率高 high staff turnover 127(多)負擔一些工作任務 cover some duties / an increased workload 128不滿 feel upset and resentful 129偏向性待遇 preferential treatment 130介入幫忙 step in and help 131切實的好處 tangible benefits 132挽留 staff retention…

【Cadence射頻仿真學習筆記】IC設計中電感的分析、建模與繪制(EMX電磁仿真,RFIC-GPT生成無源器件及與cadence的交互)

一、理論講解 1. 電感設計的兩個角度 電感的設計可以從兩個角度考慮,一個是外部特性,一個是內部特性。外部特性就是把電感視為一個黑盒子,帶有兩個端子,如果帶有抽頭的電感就有三個端子,需要去考慮其電感值、Q值和自…

基礎元器件的學習

1、二極管 1.1二極管的符號 ZD是穩壓二極管 VD、V、D是普通二極管的符號。 1.2二極管的反向恢復時間 首先交流電為上正下負,然后下正上負。當二極管接到反向電壓,二極管存在寄生電容,電壓不能立刻突變,當輸入頻率變高時&#…

EdgeX物聯網平臺

一、概述 EdgeX Foundry是一個由Linux基金會支持的邊緣計算開源平臺。它的定位是作為通用工業物聯網邊緣計算通用框架,部署在路由器和交換機等邊緣設備上。EdgeX Foundry為各種傳感器、設備或其他物聯網器件提供即插即用功能,并管理它們,進一步收集和分析它們的數據,或者導…

基于小樣本學習的自然場景圖像中茶葉病害識別技術綜述

基于小樣本學習的自然場景圖像中茶葉病害識別技術綜述 引言 茶葉作為全球廣泛消費的飲品之一,其產量和品質直接關系到茶農的經濟收益。然而,茶樹在生長過程中容易受到多種病害的侵染,這些病害不僅影響茶葉的產量和品質,還給茶農…

Linux之幫助命令

一、man幫助命令 語法: man 你要查找的命令例如:man ls 即可得到你要的命令說明,按q退出 二、內置命令和外部命令 一部分基礎功能的系統命令是直接內嵌在shel中的,系統加載啟動之后會隨著shll一起加載,常駐系統內存中…

MONI后臺管理系統-swagger3(springdoc-openapi)集成

springdoc-openapi Java 庫有助于使用 Spring Boot 項目自動生成 API 文檔。springdoc-openapi 通過在運行時檢查應用程序來根據 Spring 配置、類結構和各種注釋推斷 API 語義。 該庫會自動生成 JSON/YAML 和 HTML 格式的頁面文檔。生成的文檔可以使用swagger-api注釋進行補充。…

GFPS擴展技術原理(七)-音頻切換消息流

音頻切換消息流 Seeker和Provider通過消息流來同步音頻切換能力,觸發連接做切換,獲取或設置音頻切換偏好,通知連接狀態等等。為此專門定義了音頻切換消息流Message Group 為0x07,Message codes如下: MAC of Audio s…

LiteFlow決策系統的策略模式,順序、最壞、投票、權重

個人博客:無奈何楊(wnhyang) 個人語雀:wnhyang 共享語雀:在線知識共享 Github:wnhyang - Overview 想必大家都有聽過或做過職業和性格測試吧,尤其是現在的畢業生,在投了簡歷之后經…

【計算機視覺基礎CV-圖像分類】02-入門詳解圖像分類、經典數據集、比賽與冠軍圖像模型演進史

前言 圖像分類(Image Classification)是計算機視覺(Computer Vision)中一項基礎且核心的任務。簡單來說,就是讓計算機從給定的類別集合中,為一張輸入圖片分配一個正確的類別標簽。這個過程聽起來直觀&…

三子棋游戲(基礎版)

我們用 C 語言代碼實現了一個簡單的控制臺版三子棋游戲&#xff0c;代碼分為三個部分&#xff0c;分別是頭文件game.h中定義的函數聲明以及兩個源文件game.c和test.c、game.c文件。 1.頭文件&#xff08;game.h&#xff09;部分 首先包含了<stdio.h>&#xff08;用于標…