官术网_书友最值得收藏!

2.5 HTTP服務

配置HTTP相關的功能需要使用指令http{},定義OpenResty里對外提供的HTTP服務,通常的形式是:

http {                                     #http塊開始,所有的HTTP相關功能
  server {                                 #server塊,第一個Web服務
      listen 80; #監聽80端口
      location uri {                       #location塊,需指定URI
          ... #定義訪問此URI時的具體行為
      }                                    #location塊結束
  }                                        #server塊結束
  server {                                 #server塊,第二個Web服務
      listen xxx; #監聽xxx端口
      ... #其他location定義
  }                                        #server塊結束
}                                          #http塊結束

由于http塊內容太多,如果都寫在一個文件里可能會造成配置文件過度龐大,難以維護。在實踐中我們通常把server、location等配置分離到單獨的文件,再利用include指令包含進來,這樣就可以很好地降低配置文件的復雜度。

使用include后http塊就簡化成了:

http {                                     #http配置塊開始,所有的HTTP相關功能
  include common.conf                      #基本的HTTP配置文件,配置通用參數
  include servers/*.conf                   #包含servers目錄下所有Web服務配置文件
}                                          #http配置塊結束

2.5.1 server配置

server指令在http塊內定義一個Web服務,它必須是一個配置塊,在塊內部再用其他指令來確定Web服務的端口、域名、URI處理等更多細節。

listen port;

listen指令使用port參數設置Web服務監聽的端口,默認是80。此外還可以添加其他很多參數,例如IP地址、SSL、HTTP/2支持等。

server_name name ...;

server_name指令設置Web服務的域名,允許使用“*”通配符或“~”開頭的正則表達式。例如“www.openresty.org”“*.openresty.org”。當OpenResty處理請求時將會檢查HTTP頭部的Host字段,只有與server_name匹配的server塊才會真正提供服務。

對于我們自己的開發研究來說,可以直接使用localhost或者簡單的通配符*.*,用類似“curl http://localhost/...”這樣的命令就能夠訪問OpenResty。

2.5.2 location配置

location指令定義Web服務的接口(相當于RESTful里的API),也就是URI,它是OpenResty處理的入口,決定了請求應該如何處理。

location是一個配置塊,但語法稍多一些,除{}外還有其他的參數:

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

location使用uri參數匹配HTTP請求里的URI,默認是前綴匹配,也支持正則表達式,uri參數前可以使用特殊標記進一步限定匹配:

■ =:URI必須完全匹配;

■ ~:大小寫敏感匹配;

■ ~*:大小寫不敏感匹配;

■ ^~:前綴匹配,匹配URI的前半部分即可。

在server塊里可以配置任意數量的location塊,定義Web服務接口。Nginx對location的順序沒有特殊要求,并不是按照配置文件里的順序逐個查找匹配,而是對所有可能的匹配進行排序,查找最佳匹配的location。

不同的location里可以有不同的處理方式,靈活設置location能夠讓OpenResty配置清晰明了,易于維護。比如,我們可以在一個location里存放靜態html文件,在另一個location里存放圖片文件,其他的location則執行Lua程序訪問MySQL數據庫處理動態業務,這些location互不干擾,修改其中的一個不會影響其他的正常運行。例如:

location =    /502.html               #只處理/502.html這一個文件
location      /item/                  #前綴匹配/item/*
location ^~   /image/                 #顯式前綴匹配/image/*
location ~    /articles/(\d+)$        #正則匹配/articles/*
location ~    /api/(\w+)              #定義RESTful接口
location      /                       #匹配任意的URI

需要注意最后一個“/”,根據前綴匹配規則,它能夠匹配任意的URI,所以可以把它作為一個“黑洞”,處理所有其他location不能處理的請求(例如返回404)。

如果location配置很多,我們同樣可以用include的方式來簡化配置。

主站蜘蛛池模板: 松溪县| 临汾市| 岳池县| 资中县| 岢岚县| 泰顺县| 漠河县| 闸北区| 邹城市| 宜丰县| 武夷山市| 五莲县| 西平县| 辉南县| 五寨县| 玉环县| 河间市| 天祝| 长乐市| 阿拉善右旗| 吴桥县| 大埔县| 榆树市| 礼泉县| 绥棱县| 克拉玛依市| 关岭| 沅陵县| 凉山| 东平县| 增城市| 锡林浩特市| 红桥区| 阿鲁科尔沁旗| 聂拉木县| 桦川县| 南澳县| 临湘市| 镇雄县| 行唐县| 保亭|