- OpenResty完全開發指南:構建百萬級別并發的Web應用
- 羅劍鋒
- 1107字
- 2019-07-25 11:55:07
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的方式來簡化配置。
- FreeSWITCH 1.6 Cookbook
- Python高級編程
- 64位匯編語言的編程藝術
- 云計算通俗講義(第3版)
- JavaScript動態網頁開發詳解
- Learning Raspbian
- 移動互聯網軟件開發實驗指導
- 小型編譯器設計實踐
- Learning AWS
- Qt5 C++ GUI Programming Cookbook
- Advanced UFT 12 for Test Engineers Cookbook
- SignalR:Real-time Application Development(Second Edition)
- SSH框架企業級應用實戰
- Groovy 2 Cookbook
- Design Patterns and Best Practices in Java