Nginx的HTTP配置主要包括三個區塊,結構以下: http { //這個是協議級別 include mime.types; default_type application/octet-stream; keepalive_timeout 65; gzip on; server { //這個是服務器級別 listen 80; server_name localhost; location / { //這個是請求級別 root html; index index.html index.htm; } } }
location區段html
經過指定模式來與客戶端請求的URI相匹配,基本語法以下:location [=|~|~*|^~|@] pattern{……}nginx
一、沒有修飾符 表示:必須以指定模式開始,如:正則表達式
server { server_name baidu.com; location /abc { …… } }
那麼,以下是對的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde服務器
二、=表示:必須與指定的模式精確匹配app
server { server_name sish location = /abc { …… } } 那麼,以下是對的: http://baidu.com/abc http://baidu.com/abc?p1 以下是錯的: http://baidu.com/abc/ http://baidu.com/abcde
三、~ 表示:指定的正則表達式要區分大小寫spa
server { server_name baidu.com; location ~ ^/abc$ { …… } } 那麼,以下是對的: http://baidu.com/abc http://baidu.com/abc?p1=11&p2=22 以下是錯的: http://baidu.com/ABC http://baidu.com/abc/ http://baidu.com/abcde
四、~* 表示:指定的正則表達式不區分大小寫code
server { server_name baidu.com; location ~* ^/abc$ { …… } } 那麼,以下是對的: http://baidu.com/abc http://baidu..com/ABC http://baidu..com/abc?p1=11&p2=22 以下是錯的: http://baidu..com/abc/ http://baidu..com/abcde
五、^~ 相似於無修飾符的行爲,也是以指定模式開始,不一樣的是,若是模式匹配,
那麼就中止搜索其餘模式了。
六、@ :定義命名location區段,這些區段客戶段不能訪問,只能夠由內部產生的請
求來訪問,如try_files或error_page等server
查找順序和優先級
1:帶有「=「的精確匹配優先
2:沒有修飾符的精確匹配
3:正則表達式按照他們在配置文件中定義的順序
4:帶有「^~」修飾符的,開頭匹配
5:帶有「~」 或「~*」 修飾符的,若是正則表達式與URI匹配
6:沒有修飾符的,若是指定字符串與URI開頭匹配htm
Location區段匹配示例
location = / { # 只匹配 / 的查詢. [ configuration A ] } location / { # 匹配任何以 / 開始的查詢,可是正則表達式與一些較長的字符串將被首先匹配。 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 開始的查詢而且中止搜索,不檢查正則表達式。 [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配任何以gif, jpg, or jpeg結尾的文件,可是全部 /images/ 目錄的請求將在Configuration C中處 理。 [ configuration D ] } 各 請求的處理以下例: ■/ → configuration A ■/documents/document.html → configuration B ■/images/1.gif → configuration C ■/documents/1.jpg → configuration D
root 、alias指令區別blog
location /img/ { alias /var/www/image/; }
#若按照上述配置的話,則訪問/img/目錄裏面的文件時,ningx會自動去/var/www/image/目錄找文件
location /img/ { root /var/www/image; }
#若按照這種配置的話,則訪問/img/目錄下的文件時,nginx會去/var/www/image/img/目錄下找文件。]
alias是一個目錄別名的定義,root則是最上層目錄的定義。
還有一個重要的區別是alias後面必需要用「/」結束,不然會找不到文件的。。。而root則無關緊要~~