<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Nginx目錄結構有哪些

科技綠洲 ? 來源:Linux開發架構之路 ? 作者:Linux開發架構之路 ? 2023-11-11 11:27 ? 次閱讀

什么是Nginx?

Nginx是一個 輕量級/高性能的反向代理Web服務器,他實現非常高效的反向代理、負載平衡,他可以處理2-3萬并發連接數,官方監測能支持5萬并發,現在中國使用nginx網站用戶有很多,例如:新浪、網易、 騰訊等。

為什么要用Nginx?

跨平臺、配置簡單、方向代理、高并發連接:處理2-3萬并發連接數,官方監測能支持5萬并發,內存消耗?。洪_啟10個nginx才占150M內存 ,nginx處理靜態文件好,耗費內存少,

而且Nginx內置的健康檢查功能:如果有一個服務器宕機,會做一個健康檢查,再發送的請求就不會發送到宕機的服務器了。重新將請求提交到其他的節點上。

使用Nginx的話還能:

  1. 節省寬帶:支持GZIP壓縮,可以添加瀏覽器本地緩存
  2. 穩定性高:宕機的概率非常小
  3. 接收用戶請求是異步的

為什么Nginx性能這么高?

因為他的事件處理機制:異步非阻塞事件處理機制:運用了epoll模型,提供了一個隊列,排隊解決

Nginx怎么處理請求的?

nginx接收一個請求后,首先由listen和server_name指令匹配server模塊,再匹配server模塊里的location,location就是實際地址

server {            		# 第一個Server區塊開始,表示一個獨立的虛擬主機站點
        listen       80;      		# 提供服務的端口,默認80
        server_name  localhost;       	# 提供服務的域名主機名
        location / {            	# 第一個location區塊開始
            root   html;       	# 站點的根目錄,相當于Nginx的安裝目錄
            index  index.html index.htm;# 默認的首頁文件,多個用空格分開
        }          			# 第一個location區塊結果

什么是正向代理和反向代理?

  1. 正向代理就是一個人發送一個請求直接就到達了目標的服務器
  2. 反方代理就是請求統一被Nginx接收,nginx反向代理服務器接收到之后,按照一定的規 則分發給了后端的業務處理服務器進行處理了

使用“反向代理服務器的優點是什么?

反向代理服務器可以隱藏源服務器的存在和特征。它充當互聯網云和web服務器之間的中間層。這對于安全方面來說是很好的,特別是當您使用web托管服務時。

Nginx的優缺點?

優點:

  • 占內存小,可實現高并發連接,處理響應快
  • 可實現http服務器、虛擬主機、方向代理、負載均衡
  • Nginx配置簡單
  • 可以不暴露正式的服務器IP地址

缺點:

  • 動態處理差:nginx處理靜態文件好,耗費內存少,但是處理動態頁面則很雞肋,現在一般前端用nginx作為反向代理抗住壓力,

Nginx應用場景?

  • http服務器。Nginx是一個http服務可以獨立提供http服務??梢宰鼍W頁靜態服務器。
  • 虛擬主機??梢詫崿F在一臺服務器虛擬出多個網站,例如個人網站使用的虛擬機。
  • 反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用nginx做反向代理。并且多臺服務器可以平均分擔負載,不會應為某臺服務器負載高宕機而某臺服務器閑置的情況。
  • nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口網關,對每個接口服務進行攔截。

Nginx目錄結構有哪些?

[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf                             # Nginx所有配置文件的目錄
│   ├── fastcgi.conf                 # fastcgi相關參數的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始備份文件
│   ├── fastcgi_params               # fastcgi的參數文件
│   ├── fastcgi_params.default       
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒體類型
│   ├── mime.types.default
│   ├── nginx.conf                   # Nginx主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params                  # scgi相關參數文件
│   ├── scgi_params.default  
│   ├── uwsgi_params                 # uwsgi相關參數文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi臨時數據目錄
├── html                             # Nginx默認站點目錄
│   ├── 50x.html                     # 錯誤頁面優雅替代顯示文件,例如當出現502錯誤時會調用此頁面
│   └── index.html                   # 默認的首頁文件
├── logs                             # Nginx日志目錄
│   ├── access.log                   # 訪問日志文件
│   ├── error.log                    # 錯誤日志文件
│   └── nginx.pid                    # pid文件,Nginx進程啟動后,會把所有進程的ID號寫到此文件
├── proxy_temp                       # 臨時目錄
├── sbin                             # Nginx命令目錄
│   └── nginx                        # Nginx的啟動命令
├── scgi_temp                        # 臨時目錄
└── uwsgi_temp                       # 臨時目錄

Nginx配置文件nginx.conf有哪些屬性模塊?

worker_processes  1;                					# worker進程的數量
events {                              					# 事件區塊開始
    worker_connections  1024;            				# 每個worker進程支持的最大連接數
}                                    					# 事件區塊結束
http {                               					# HTTP區塊開始
    include       mime.types;            				# Nginx支持的媒體類型庫文件
    default_type  application/octet-stream;     		# 默認的媒體類型
    sendfile        on;       							# 開啟高效傳輸模式
    keepalive_timeout  65;       						# 連接超時
    server {            								# 第一個Server區塊開始,表示一個獨立的虛擬主機站點
        listen       80;      							# 提供服務的端口,默認80
        server_name  localhost;       					# 提供服務的域名主機名
        location / {            						# 第一個location區塊開始
            root   html;       						# 站點的根目錄,相當于Nginx的安裝目錄
            index  index.html index.htm;      			# 默認的首頁文件,多個用空格分開
        }          										# 第一個location區塊結果
        error_page   500502503504  /50x.html;     		# 出現對應的http狀態碼時,使用50x.html回應客戶
        location = /50x.html {          				# location區塊開始,訪問50x.html
            root   html;      							# 指定對應的站點目錄為html
        }
    }  
    ......

Nginx靜態資源?

靜態資源訪問,就是存放在nginx的html頁面,我們可以自己編寫

如何用Nginx解決前端跨域問題?

使用Nginx轉發請求。把跨域的接口寫成調本域的接口,然后將這些接口轉發到真正的請求地址。

Nginx虛擬主機怎么配置?

1、基于域名的虛擬主機,通過域名來區分虛擬主機——應用:外部網站

2、基于端口的虛擬主機,通過端口來區分虛擬主機——應用:公司內部網站,外部網站的管理后臺

3、基于ip的虛擬主機。

基于虛擬主機配置域名

需要建立/data/www /data/bbs目錄,windows本地hosts添加虛擬機ip地址對應的域名解析;對應域名網站目錄下新增index.html文件;

#當客戶端訪問www.lijie.com,監聽端口號為80,直接跳轉到data/www目錄下文件
    server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

	#當客戶端訪問www.lijie.com,監聽端口號為80,直接跳轉到data/bbs目錄下文件
	 server {
        listen       80;
        server_name  bbs.lijie.com;
        location / {
            root   data/bbs;
            index  index.html index.htm;
        }
    }

基于端口的虛擬主機

使用端口來區分,瀏覽器使用域名或ip地址:端口號 訪問

#當客戶端訪問www.lijie.com,監聽端口號為8080,直接跳轉到data/www目錄下文件
	 server {
        listen       8080;
        server_name  8080.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }
	
	#當客戶端訪問www.lijie.com,監聽端口號為80直接跳轉到真實ip服務器地址 127.0.0.1:8080
	server {
        listen       80;
        server_name  www.lijie.com;
        location / {
		 	proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm;
        }
	}

location的作用是什么?

location指令的作用是根據用戶請求的URI來執行不同的應用,也就是根據用戶請求的網站URL進行匹配,匹配成功即進行相關的操作。

location的語法能說出來嗎?

圖片

注意:~ 代表自己輸入的英文字母

Location正則案例

示例:

#優先級1,精確匹配,根路徑
    location =/ {
        return 400;
    }

    #優先級2,以某個字符串開頭,以av開頭的,優先匹配這里,區分大小寫
    location ^~ /av {
       root /data/av/;
    }

    #優先級3,區分大小寫的正則匹配,匹配/media*****路徑
    location ~ /media {
          alias /data/static/;
    }

    #優先級4 ,不區分大小寫的正則匹配,所有的****.jpg|gif|png 都走這里
    location ~* .*.(jpg|gif|png|js|css)$ {
       root  /data/av/;
    }

    #優先7,通用匹配
    location / {
        return 403;
    }

限流怎么做的?

  • Nginx限流就是限制用戶請求速度,防止服務器受不了
  • 限流有3種
  1. 正常限制訪問頻率(正常流量)
  2. 突發限制訪問頻率(突發流量)
  3. 限制并發連接數
  • Nginx的限流都是基于漏桶流算法,底下會說道什么是桶銅流

實現三種限流算法

1、正常限制訪問頻率(正常流量):

限制一個用戶發送的請求,我Nginx多久接收一個請求。

Nginx中使用ngx_http_limit_req_module模塊來限制的訪問頻率,限制的原理實質是基于漏桶算法原理來實現的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制單個IP的請求處理頻率。

#定義限流維度,一個用戶一分鐘一個請求進來,多余的全部漏掉
	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;

	#綁定限流維度
	server{
		
		location/seckill.html{
			limit_req zone=zone;	
			proxy_pass http://lj_seckill;
		}

	}

1r/s代表1秒一個請求,1r/m一分鐘接收一個請求, 如果Nginx這時還有別人的請求沒有處理完,Nginx就會拒絕處理該用戶請求。

2、突發限制訪問頻率(突發流量):

限制一個用戶發送的請求,我Nginx多久接收一個。

上面的配置一定程度可以限制訪問頻率,但是也存在著一個問題:如果突發流量超出請求被拒絕處理,無法處理活動時候的突發流量,這時候應該如何進一步處理呢?Nginx提供burst參數結合nodelay參數可以解決流量突發的問題,可以設置能處理的超過設置的請求數外能額外處理的請求數。我們可以將之前的例子添加burst參數以及nodelay參數:

#定義限流維度,一個用戶一分鐘一個請求進來,多余的全部漏掉
	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;

	#綁定限流維度
	server{
		
		location/seckill.html{
			limit_req zone=zone burst=5 nodelay;
			proxy_pass http://lj_seckill;
		}

	}

為什么就多了一個 burst=5 nodelay; 呢,多了這個可以代表Nginx對于一個用戶的請求會立即處理前五個,多余的就慢慢來落,沒有其他用戶的請求我就處理你的,有其他的請求的話我Nginx就漏掉不接受你的請求

3、 限制并發連接數

Nginx中的
ngx_http_limit_conn_module模塊提供了限制并發連接數的功能,可以使用limit_conn_zone指令以及limit_conn執行進行配置。接下來我們可以通過一個簡單的例子來看下:

http {
		limit_conn_zone $binary_remote_addr zone=myip:10m;
		limit_conn_zone $server_name zone=myServerName:10m;
	}

    server {
        location / {
            limit_conn myip 10;
            limit_conn myServerName 100;
            rewrite / http://www.lijie.net permanent;
        }
    }

上面配置了單個IP同時并發連接數最多只能10個連接,并且設置了整個虛擬服務器同時最大并發數最多只能100個鏈接。當然,只有當請求的header被服務器處理后,虛擬服務器的連接數才會計數。剛才有提到過Nginx是基于漏桶算法原理實現的,實際上限流一般都是基于漏桶算法和令牌桶算法實現的。接下來我們來看看兩個算法的介紹:

漏桶流算法和令牌桶算法知道?

漏桶算法

漏桶算法是網絡世界中流量整形或速率限制時經常使用的一種算法,它的主要目的是控制數據注入到網絡的速率,平滑網絡上的突發流量。漏桶算法提供了一種機制,通過它,突發流量可以被整形以便為網絡提供一個穩定的流量。也就是我們剛才所講的情況。漏桶算法提供的機制實際上就是剛才的案例:突發流量會進入到一個漏桶,漏桶會按照我們定義的速率依次處理請求,如果水流過大也就是突發流量過大就會直接溢出,則多余的請求會被拒絕。所以漏桶算法能控制數據的傳輸速率。

圖片

令牌桶算法

令牌桶算法是網絡流量整形和速率限制中最常使用的一種算法。典型情況下,令牌桶算法用來控制發送到網絡上的數據的數目,并允許突發數據的發送。Google開源項目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的機制如下:存在一個大小固定的令牌桶,會以恒定的速率源源不斷產生令牌。如果令牌消耗速率小于生產令牌的速度,令牌就會一直產生直至裝滿整個令牌桶。

圖片

為什么要做動靜分離?

Nginx是當下最熱的Web容器,網站優化的重要點在于靜態化網站,網站靜態化的關鍵點則是是動靜分離,動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們則根據靜態資源的特點將其做緩存操作。

讓靜態的資源只走靜態資源服務器,動態的走動態的服務器

Nginx的靜態處理能力很強,但是動態處理能力不足,因此,在企業中常用動靜分離技術。

對于靜態資源比如圖片,js,css等文件,我們則在反向代理服務器nginx中進行緩存。這樣瀏覽器在請求一個靜態資源時,代理服務器nginx就可以直接處理,無需將請求轉發給后端服務器tomcat。

若用戶請求的動態文件,比如servlet,jsp則轉發給Tomcat服務器處理,從而實現動靜分離。這也是反向代理服務器的一個重要的作用。

Nginx怎么做的動靜分離?

只需要指定路徑對應的目錄。location/可以使用正則表達式匹配。并指定對應的硬盤中的目錄。如下:(操作都是在Linux上)

location /image/ {
            root   /usr/local/static/;
            autoindex on;
        }

創建目錄

mkdir /usr/local/static/image

進入目錄

cd  /usr/local/static/image

放一張照片上去#

1.jpg

重啟 nginx

sudo nginx -s reload

打開瀏覽器 輸入 server_name/image/1.jpg 就可以訪問該靜態圖片了

Nginx負載均衡的算法怎么實現的?策略有哪些?

為了避免服務器崩潰,大家會通過負載均衡的方式來分擔服務器壓力。將對臺服務器組成一個集群,當用戶訪問時,先訪問到一個轉發服務器,再由轉發服務器將訪問分發到壓力更小的服務器。

Nginx負載均衡實現的策略有以下五種:

1 輪詢(默認)

每個請求按時間順序逐一分配到不同的后端服務器,如果后端某個服務器宕機,能自動剔除故障系統。

upstream backserver { 
 server 192.168.0.12; 
 server 192.168.0.13; 
}

2 權重 weight

weight的值越大分配

到的訪問概率越高,主要用于后端每臺服務器性能不均衡的情況下。其次是為在主從的情況下設置不同的權值,達到合理有效的地利用主機資源。

upstream backserver { 
 server 192.168.0.12 weight=2; 
 server 192.168.0.13 weight=8; 
}

權重越高,在被訪問的概率越大,如上例,分別是20%,80%。

3 ip_hash( IP綁定)

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

upstream backserver { 
 ip_hash; 
 server 192.168.0.12:88; 
 server 192.168.0.13:80; 
}

4 fair(第三方插件)

必須安裝upstream_fair模塊。

對比 weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面大小和加載時間長短智能地進行負載均衡,響應時間短的優先分配。

upstream backserver { 
 server server1; 
 server server2; 
 fair; 
}

哪個服務器的響應速度快,就將請求分配到那個服務器上。

5、url_hash(第三方插件)

必須安裝Nginx的hash軟件包

按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率。

upstream backserver { 
 server squid1:3128; 
 server squid2:3128; 
 hash $request_uri; 
 hash_method crc32; 
}

Nginx配置高可用性怎么配置?

當上游服務器(真實訪問服務器),一旦出現故障或者是沒有及時相應的話,應該直接輪訓到下一臺服務器,保證服務器的高可用

Nginx配置代碼:

server {
        listen       80;
        server_name  www.lijie.com;
        location / {
		    ### 指定上游服務器負載均衡服務器
		    proxy_pass http://backServer;
			###nginx與上游服務器(真實訪問的服務器)超時時間 后端服務器連接的超時時間_發起握手等候響應超時時間
			proxy_connect_timeout 1s;
			###nginx發送給上游服務器(真實訪問的服務器)超時時間
            proxy_send_timeout 1s;
			### nginx接受上游服務器(真實訪問的服務器)超時時間
            proxy_read_timeout 1s;
            index  index.html index.htm;
        }
    }

Nginx怎么判斷別IP不可訪問?

# 如果訪問的ip地址為192.168.9.115,則返回403
     if  ($remote_addr = 192.168.9.115) {  
         return 403;  
     }

怎么限制瀏覽器訪問?

## 不允許谷歌瀏覽器訪問 如果是谷歌瀏覽器返回500
 	if ($http_user_agent ~ Chrome) {   
        return 500;  
    }

Rewrite全局變量是什么?

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    2767

    瀏覽量

    72762
  • Web服務器
    +關注

    關注

    0

    文章

    137

    瀏覽量

    24227
  • 網站
    +關注

    關注

    1

    文章

    256

    瀏覽量

    22747
  • nginx
    +關注

    關注

    0

    文章

    135

    瀏覽量

    11985
收藏 人收藏

    評論

    相關推薦

    Linux目錄結構及文件操作

    Linux的目錄結構為樹狀結構,最頂級的目錄為根目錄/。
    發表于 09-05 10:15 ?414次閱讀

    Linux上Nginx獲得最佳性能的8種方法

    NGINX 是一種流行的、免費的開源 Web 服務器。默認的 NGINX 配置足以讓 Web 服務器正常工作。 但是,如果您想充分利用 NGINX,則需要使用其配置文件并設置可優化服務器性能的參數。您將在Linux 機器上的 /
    發表于 01-16 09:51 ?446次閱讀

    NanoPi NEO - 可靠的Nginx 網絡服務器

    的是Ubuntu16.04 系統,Ubuntu16.04 官方的nginx 安裝包,我們可以直接安裝。#apt-get install nginx啟動nginx 服務:#servic
    發表于 06-20 15:43

    linux目錄結構

    目錄樹的主要部分root(/)、/USR、/var、/home等等。下面是一個典型的linux目錄結構如下: +/ 根目錄 +/bin
    發表于 07-03 12:15

    linux目錄結構

    目錄樹的主要部分root(/)、/USR、/var、/home等等。下面是一個典型的linux目錄結構如下: +/ 根目錄 +/bin
    發表于 07-09 09:33

    Linux下Nginx的常用命令------啟動、停止、重啟

    啟動代碼格式:nginx安裝目錄地址 -c nginx配置文件地址例如:[root@LinuxServer ***in]# /usr/local/nginx/***in/
    發表于 07-09 07:02

    詳解Linux目錄結構

    /:根目錄,位于Linux文件系統目錄結構的頂層,一般根目錄下只存放目錄,不要存放文件,/etc、/bin、/dev、/lib、/***in
    發表于 07-25 07:45

    Linux目錄結構

    嵌入式Linux系統編程學習之一目錄結構文章目錄嵌入式Linux系統編程學習之一目錄結構前言一、Linux
    發表于 11-05 08:00

    sdk開發包的目錄結構是怎樣的?哪些功能模塊?

    sdk開發包的目錄結構是怎樣的?哪些功能模塊?
    發表于 03-09 07:51

    主要學習下nginx的安裝配置

    處理。因為了中間件,使得大型網站在規劃了更好的層次性,維護上更加方便。也可以實現負載均衡、安全防護等。Nginx是一個開源高性能、可靠的HTTP中間件、代理服務,在目前企業中得到了很大的利用。今天
    發表于 10-19 14:12

    展示一下nginx的學習模塊

    .conf,否則報錯:因為nginx.conf中include了conf.d目錄下的所有.conf文件。然后重新加載配置文件:#-s表示給master進程發送信號:stop、quit、reopen、reload
    發表于 10-19 14:16

    如何徹底搞懂Nginx知識網結構

    1.Nginx知識網結構Nginx是一個高性能的HTTP和反向代理服務器,特點是占用內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好
    的頭像 發表于 05-03 14:15 ?1464次閱讀
    如何徹底搞懂<b class='flag-5'>Nginx</b>知識網<b class='flag-5'>結構</b>

    Nginx軟件location目錄匹配詳解

    Nginx作為一個輕量級的,高性能的web服務軟件,因其占有內存少,并發能力強的特點,而廣受歡迎和使用。國內很多大型互聯網公司也對Nginx很是青睞。 像BAT(百度,阿里和騰訊),TMD(頭條
    的頭像 發表于 10-08 17:10 ?3356次閱讀

    Nginx如何監控

    搭建了Nginx集群后,需要繼續深入研究的就是日常Nginx監控。
    的頭像 發表于 08-22 10:03 ?1161次閱讀

    nginx自動更新ssl證書

    上面命令中的/root/html/路徑表示nginx配置中的root目錄,如果有多個域名,命令后面繼續加 -d 參數就行
    的頭像 發表于 03-03 15:17 ?1140次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>