【NGINX入門】15.史上最全Nginx面試題

什么是Nginx?

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

為什么要用Nginx?

  • 跨平臺、配置簡單、方向代理、高并發(fā)連接:處理2-3萬并發(fā)連接數(shù),官方監(jiān)測能支持5萬并發(fā),內(nèi)存消耗小:開啟10個(gè)nginx才占150M內(nèi)存 ,nginx處理靜態(tài)文件好,耗費(fèi)內(nèi)存少,

  • 而且Nginx內(nèi)置的健康檢查功能:如果有一個(gè)服務(wù)器宕機(jī),會做一個(gè)健康檢查,再發(fā)送的請求就不會發(fā)送到宕機(jī)的服務(wù)器了。重新將請求提交到其他的節(jié)點(diǎn)上。

  • 使用Nginx的話還能:

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

為什么Nginx性能這么高?

  • 因?yàn)樗氖录幚頇C(jī)制:異步非阻塞事件處理機(jī)制:運(yùn)用了epoll模型,提供了一個(gè)隊(duì)列,排隊(duì)解決

Nginx怎么處理請求的?

  • nginx接收一個(gè)請求后,首先由listen和server_name指令匹配server模塊,再匹配server模塊里的location,location就是實(shí)際地址
    server {                                    # 第一個(gè)Server區(qū)塊開始,表示一個(gè)獨(dú)立的虛擬主機(jī)站點(diǎn)
        listen       80;                        # 提供服務(wù)的端口,默認(rèn)80
        server_name  localhost;                 # 提供服務(wù)的域名主機(jī)名
        location / {                            # 第一個(gè)location區(qū)塊開始
            root   html;                    # 站點(diǎn)的根目錄,相當(dāng)于Nginx的安裝目錄
            index  index.html index.htm;        # 默認(rèn)的首頁文件,多個(gè)用空格分開
        }                                       # 第一個(gè)location區(qū)塊結(jié)果

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

  1. 正向代理就是一個(gè)人發(fā)送一個(gè)請求直接就到達(dá)了目標(biāo)的服務(wù)器
  2. 反方代理就是請求統(tǒng)一被Nginx接收,nginx反向代理服務(wù)器接收到之后,按照一定的規(guī) 則分發(fā)給了后端的業(yè)務(wù)處理服務(wù)器進(jìn)行處理了

使用“反向代理服務(wù)器的優(yōu)點(diǎn)是什么?

  • 反向代理服務(wù)器可以隱藏源服務(wù)器的存在和特征。它充當(dāng)互聯(lián)網(wǎng)云和web服務(wù)器之間的中間層。這對于安全方面來說是很好的,特別是當(dāng)您使用web托管服務(wù)時(shí)。

Nginx的優(yōu)缺點(diǎn)?

  • 優(yōu)點(diǎn):

    1. 占內(nèi)存小,可實(shí)現(xiàn)高并發(fā)連接,處理響應(yīng)快
    2. 可實(shí)現(xiàn)http服務(wù)器、虛擬主機(jī)、方向代理、負(fù)載均衡
    3. Nginx配置簡單
    4. 可以不暴露正式的服務(wù)器IP地址
  • 缺點(diǎn):
    動(dòng)態(tài)處理差:nginx處理靜態(tài)文件好,耗費(fèi)內(nèi)存少,但是處理動(dòng)態(tài)頁面則很雞肋,現(xiàn)在一般前端用nginx作為反向代理抗住壓力,

Nginx應(yīng)用場景?

  1. http服務(wù)器。Nginx是一個(gè)http服務(wù)可以獨(dú)立提供http服務(wù)??梢宰鼍W(wǎng)頁靜態(tài)服務(wù)器。
  2. 虛擬主機(jī)??梢詫?shí)現(xiàn)在一臺服務(wù)器虛擬出多個(gè)網(wǎng)站,例如個(gè)人網(wǎng)站使用的虛擬機(jī)。
  3. 反向代理,負(fù)載均衡。當(dāng)網(wǎng)站的訪問量達(dá)到一定程度后,單臺服務(wù)器不能滿足用戶的請求時(shí),需要用多臺服務(wù)器集群可以使用nginx做反向代理。并且多臺服務(wù)器可以平均分擔(dān)負(fù)載,不會應(yīng)為某臺服務(wù)器負(fù)載高宕機(jī)而某臺服務(wù)器閑置的情況。
  4. nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口網(wǎng)關(guān),對每個(gè)接口服務(wù)進(jìn)行攔截。

Nginx目錄結(jié)構(gòu)有哪些?

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

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

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

Nginx靜態(tài)資源?

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

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

  • 使用Nginx轉(zhuǎn)發(fā)請求。把跨域的接口寫成調(diào)本域的接口,然后將這些接口轉(zhuǎn)發(fā)到真正的請求地址。

Nginx虛擬主機(jī)怎么配置?

  • 1、基于域名的虛擬主機(jī),通過域名來區(qū)分虛擬主機(jī)——應(yīng)用:外部網(wǎng)站

  • 2、基于端口的虛擬主機(jī),通過端口來區(qū)分虛擬主機(jī)——應(yīng)用:公司內(nèi)部網(wǎng)站,外部網(wǎng)站的管理后臺

  • 3、基于ip的虛擬主機(jī)。

基于虛擬主機(jī)配置域名

  • 需要建立/data/www /data/bbs目錄,windows本地hosts添加虛擬機(jī)ip地址對應(yīng)的域名解析;對應(yīng)域名網(wǎng)站目錄下新增index.html文件;
    #當(dāng)客戶端訪問www.lijie.com,監(jiān)聽端口號為80,直接跳轉(zhuǎn)到data/www目錄下文件
    server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

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

基于端口的虛擬主機(jī)

  • 使用端口來區(qū)分,瀏覽器使用域名或ip地址:端口號 訪問
    #當(dāng)客戶端訪問www.lijie.com,監(jiān)聽端口號為8080,直接跳轉(zhuǎn)到data/www目錄下文件
     server {
        listen       8080;
        server_name  8080.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

    #當(dāng)客戶端訪問www.lijie.com,監(jiān)聽端口號為80直接跳轉(zhuǎn)到真實(shí)ip服務(wù)器地址 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指令的作用是根據(jù)用戶請求的URI來執(zhí)行不同的應(yīng)用,也就是根據(jù)用戶請求的網(wǎng)站URL進(jìn)行匹配,匹配成功即進(jìn)行相關(guān)的操作。

location的語法能說出來嗎?

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

匹配符 匹配規(guī)則 優(yōu)先級
= 精確匹配 1
^~ 以某個(gè)字符串開頭 2
~ 區(qū)分大小寫的正則匹配 3
~* 不區(qū)分大小寫的正則匹配 4
!~ 區(qū)分大小寫不匹配的正則 5
!~* 不區(qū)分大小寫不匹配的正則 6
/ 通用匹配,任何請求都會匹配到 7

Location正則案例

  • 示例:
    #優(yōu)先級1,精確匹配,根路徑
    location =/ {
        return 400;
    }

    #優(yōu)先級2,以某個(gè)字符串開頭,以av開頭的,優(yōu)先匹配這里,區(qū)分大小寫
    location ^~ /av {
       root /data/av/;
    }

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

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

    #優(yōu)先7,通用匹配
    location / {
        return 403;
    }

限流怎么做的?

  • Nginx限流就是限制用戶請求速度,防止服務(wù)器受不了

  • 限流有3種

    1. 正常限制訪問頻率(正常流量)
    2. 突發(fā)限制訪問頻率(突發(fā)流量)
    3. 限制并發(fā)連接數(shù)
  • Nginx的限流都是基于漏桶流算法,底下會說道什么是桶銅流

實(shí)現(xiàn)三種限流算法

1、正常限制訪問頻率(正常流量):
  • 限制一個(gè)用戶發(fā)送的請求,我Nginx多久接收一個(gè)請求。

  • Nginx中使用ngx_http_limit_req_module模塊來限制的訪問頻率,限制的原理實(shí)質(zhì)是基于漏桶算法原理來實(shí)現(xiàn)的。在nginx.conf配置文件中可以使用limit_req_zone命令及l(fā)imit_req命令限制單個(gè)IP的請求處理頻率。

    #定義限流維度,一個(gè)用戶一分鐘一個(gè)請求進(jìn)來,多余的全部漏掉
    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秒一個(gè)請求,1r/m一分鐘接收一個(gè)請求, 如果Nginx這時(shí)還有別人的請求沒有處理完,Nginx就會拒絕處理該用戶請求。
2、突發(fā)限制訪問頻率(突發(fā)流量):
  • 限制一個(gè)用戶發(fā)送的請求,我Nginx多久接收一個(gè)。

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

    #定義限流維度,一個(gè)用戶一分鐘一個(gè)請求進(jìn)來,多余的全部漏掉
    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;
        }

    }

  • 為什么就多了一個(gè) burst=5 nodelay; 呢,多了這個(gè)可以代表Nginx對于一個(gè)用戶的請求會立即處理前五個(gè),多余的就慢慢來落,沒有其他用戶的請求我就處理你的,有其他的請求的話我Nginx就漏掉不接受你的請求
3、 限制并發(fā)連接數(shù)
  • Nginx中的ngx_http_limit_conn_module模塊提供了限制并發(fā)連接數(shù)的功能,可以使用limit_conn_zone指令以及l(fā)imit_conn執(zhí)行進(jìn)行配置。接下來我們可以通過一個(gè)簡單的例子來看下:
    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;
        }
    }

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

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

漏桶算法

  • 漏桶算法是網(wǎng)絡(luò)世界中流量整形或速率限制時(shí)經(jīng)常使用的一種算法,它的主要目的是控制數(shù)據(jù)注入到網(wǎng)絡(luò)的速率,平滑網(wǎng)絡(luò)上的突發(fā)流量。漏桶算法提供了一種機(jī)制,通過它,突發(fā)流量可以被整形以便為網(wǎng)絡(luò)提供一個(gè)穩(wěn)定的流量。也就是我們剛才所講的情況。漏桶算法提供的機(jī)制實(shí)際上就是剛才的案例:突發(fā)流量會進(jìn)入到一個(gè)漏桶,漏桶會按照我們定義的速率依次處理請求,如果水流過大也就是突發(fā)流量過大就會直接溢出,則多余的請求會被拒絕。所以漏桶算法能控制數(shù)據(jù)的傳輸速率。
    在這里插入圖片描述

令牌桶算法

  • 令牌桶算法是網(wǎng)絡(luò)流量整形和速率限制中最常使用的一種算法。典型情況下,令牌桶算法用來控制發(fā)送到網(wǎng)絡(luò)上的數(shù)據(jù)的數(shù)目,并允許突發(fā)數(shù)據(jù)的發(fā)送。Google開源項(xiàng)目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的機(jī)制如下:存在一個(gè)大小固定的令牌桶,會以恒定的速率源源不斷產(chǎn)生令牌。如果令牌消耗速率小于生產(chǎn)令牌的速度,令牌就會一直產(chǎn)生直至裝滿整個(gè)令牌桶。
在這里插入圖片描述

為什么要做動(dòng)靜分離?

  • Nginx是當(dāng)下最熱的Web容器,網(wǎng)站優(yōu)化的重要點(diǎn)在于靜態(tài)化網(wǎng)站,網(wǎng)站靜態(tài)化的關(guān)鍵點(diǎn)則是是動(dòng)靜分離,動(dòng)靜分離是讓動(dòng)態(tài)網(wǎng)站里的動(dòng)態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動(dòng)靜資源做好了拆分以后,我們則根據(jù)靜態(tài)資源的特點(diǎn)將其做緩存操作。

  • 讓靜態(tài)的資源只走靜態(tài)資源服務(wù)器,動(dòng)態(tài)的走動(dòng)態(tài)的服務(wù)器

  • Nginx的靜態(tài)處理能力很強(qiáng),但是動(dòng)態(tài)處理能力不足,因此,在企業(yè)中常用動(dòng)靜分離技術(shù)。

  • 對于靜態(tài)資源比如圖片,js,css等文件,我們則在反向代理服務(wù)器nginx中進(jìn)行緩存。這樣瀏覽器在請求一個(gè)靜態(tài)資源時(shí),代理服務(wù)器nginx就可以直接處理,無需將請求轉(zhuǎn)發(fā)給后端服務(wù)器tomcat。
    若用戶請求的動(dòng)態(tài)文件,比如servlet,jsp則轉(zhuǎn)發(fā)給Tomcat服務(wù)器處理,從而實(shí)現(xiàn)動(dòng)靜分離。這也是反向代理服務(wù)器的一個(gè)重要的作用。

Nginx怎么做的動(dòng)靜分離?

  • 只需要指定路徑對應(yīng)的目錄。location/可以使用正則表達(dá)式匹配。并指定對應(yīng)的硬盤中的目錄。如下:(操作都是在Linux上)
        location /image/ {
            root   /usr/local/static/;
            autoindex on;
        }

  1. 創(chuàng)建目錄

    mkdir /usr/local/static/image
    
    
  2. 進(jìn)入目錄

    cd  /usr/local/static/image
    
    
  3. 放一張照片上去#

    1.jpg
    
    
  4. 重啟 nginx

    sudo nginx -s reload
    
    
  5. 打開瀏覽器 輸入 server_name/image/1.jpg 就可以訪問該靜態(tài)圖片了

Nginx負(fù)載均衡的算法怎么實(shí)現(xiàn)的?策略有哪些?

  • 為了避免服務(wù)器崩潰,大家會通過負(fù)載均衡的方式來分擔(dān)服務(wù)器壓力。將對臺服務(wù)器組成一個(gè)集群,當(dāng)用戶訪問時(shí),先訪問到一個(gè)轉(zhuǎn)發(fā)服務(wù)器,再由轉(zhuǎn)發(fā)服務(wù)器將訪問分發(fā)到壓力更小的服務(wù)器。

  • Nginx負(fù)載均衡實(shí)現(xiàn)的策略有以下五種:

1 輪詢(默認(rèn))

  • 每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端某個(gè)服務(wù)器宕機(jī),能自動(dòng)剔除故障系統(tǒng)。
upstream backserver { 
 server 192.168.0.12; 
 server 192.168.0.13; 
} 

2 權(quán)重 weight

  • weight的值越大分配

  • 到的訪問概率越高,主要用于后端每臺服務(wù)器性能不均衡的情況下。其次是為在主從的情況下設(shè)置不同的權(quán)值,達(dá)到合理有效的地利用主機(jī)資源。

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

  • 權(quán)重越高,在被訪問的概率越大,如上例,分別是20%,80%。

3 ip_hash( IP綁定)

  • 每個(gè)請求按訪問IP的哈希結(jié)果分配,使來自同一個(gè)IP的訪客固定訪問一臺后端服務(wù)器,并且可以有效解決動(dòng)態(tài)網(wǎng)頁存在的session共享問題
upstream backserver { 
 ip_hash; 
 server 192.168.0.12:88; 
 server 192.168.0.13:80; 
} 

4 fair(第三方插件)

  • 必須安裝upstream_fair模塊。

  • 對比 weight、ip_hash更加智能的負(fù)載均衡算法,fair算法可以根據(jù)頁面大小和加載時(shí)間長短智能地進(jìn)行負(fù)載均衡,響應(yīng)時(shí)間短的優(yōu)先分配。

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

  • 哪個(gè)服務(wù)器的響應(yīng)速度快,就將請求分配到那個(gè)服務(wù)器上。

5、url_hash(第三方插件)

  • 必須安裝Nginx的hash軟件包

  • 按訪問url的hash結(jié)果來分配請求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,可以進(jìn)一步提高后端緩存服務(wù)器的效率。

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

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

  • 當(dāng)上游服務(wù)器(真實(shí)訪問服務(wù)器),一旦出現(xiàn)故障或者是沒有及時(shí)相應(yīng)的話,應(yīng)該直接輪訓(xùn)到下一臺服務(wù)器,保證服務(wù)器的高可用

  • Nginx配置代碼:

server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            ### 指定上游服務(wù)器負(fù)載均衡服務(wù)器
            proxy_pass http://backServer;
            ###nginx與上游服務(wù)器(真實(shí)訪問的服務(wù)器)超時(shí)時(shí)間 后端服務(wù)器連接的超時(shí)時(shí)間_發(fā)起握手等候響應(yīng)超時(shí)時(shí)間
            proxy_connect_timeout 1s;
            ###nginx發(fā)送給上游服務(wù)器(真實(shí)訪問的服務(wù)器)超時(shí)時(shí)間
            proxy_send_timeout 1s;
            ### nginx接受上游服務(wù)器(真實(shí)訪問的服務(wù)器)超時(shí)時(shí)間
            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全局變量是什么?

變量 含義
$args 這個(gè)變量等于請求行中的參數(shù),同$query_string
$content length 請求頭中的Content-length字段。
$content_type 請求頭中的Content-Type字段。
$document_root 當(dāng)前請求在root指令中指定的值。
$host 請求主機(jī)頭字段,否則為服務(wù)器名稱。
$http_user_agent 客戶端agent信息
$http_cookie 客戶端cookie信息
$limit_rate 這個(gè)變量可以限制連接速率。
$request_method 客戶端請求的動(dòng)作,通常為GET或POST。
$remote_addr 客戶端的IP地址。
$remote_port 客戶端的端口。
$remote_user 已經(jīng)經(jīng)過Auth Basic Module驗(yàn)證的用戶名。
$request_filename 當(dāng)前請求的文件路徑,由root或alias指令與URI請求生成。
$scheme HTTP方法(如http,https)。
$server_protocol 請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$server_addr 服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值。
$server_name 服務(wù)器名稱。
$server_port 請求到達(dá)服務(wù)器的端口號。
$request_uri 包含請求參數(shù)的原始URI,不包含主機(jī)名,如”/foo/bar.php?arg=baz”。
$uri 不帶請求參數(shù)的當(dāng)前URI,$uri不包含主機(jī)名,如”/foo/bar.html”。
$document_uri 與$uri相同。

本文轉(zhuǎn)載自《Nginx面試題(總結(jié)最全面的面試題!?。。?/a>

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容