nginx服務器很是核心的配置,通常nginx運維人員在修改nginx配置時,大部分也是圍繞着location這個配置進行修改。html
下面看一下一個簡單的location配置:前端
location / {
root home/;
index index.html;
}
複製代碼
這個配置表示任何一個路徑訪問nginx服務器,都跳轉到home目錄下的index.html頁面中。nginx
下面來詳細說一下location 路徑匹配規則,location匹配分爲3種匹配方式 。正則表達式
一、絕對匹配,徹底相等 「=」 號 ,好比:跨域
##當訪問地址端口後面的地址等於/login/demo.html時,就會直接走這個location地址。
location = /login/demo.html {
*******
}
複製代碼
二、正則匹配 ~ 或者 ~* 。前一個區分大小寫,後一個不區分大小寫瀏覽器
location ^~ /images/ {
# 匹配任何已/images/開頭的任何查詢而且中止搜索。任何正則表達式將不會被測試。
}
location ~* .(gif|jpg|jpeg)$ {
# 匹配任何已.gif、.jpg 或 .jpeg 結尾的請求
}
複製代碼
三、通常匹配 無符號 ,無符號匹配就算匹配中,也不會break,還會繼續向下匹配下去,若是發現正則或者徹底匹配的狀況,則直接使用。服務器
總結一下: = 嚴格匹配。若是這個查詢匹配,那麼將中止搜索並當即處理此請求。 ~ 爲區分大小寫匹配(可用正則表達式) !~爲區分大小寫不匹配 ~* 爲不區分大小寫匹配(可用正則表達式) !~*爲不區分大小寫不匹配 ^~ 若是把這個前綴用於一個常規字符串,那麼告訴nginx 若是路徑匹配那麼不測試正則表達式。運維
1:當咱們遇到跨域問題,並且客戶端沒法支持 CORS 時,最好的辦法就是讓服務器來作代理。在前端頁面所在的服務器 nginx 配置上開一個路由,而後使用 proxy 去請求另外一個域名下的資源。 2:先後臺分離後,前端獨立開發後也能夠經過proxy_pass來反向代理到後臺服務,或者服務器部署地址不方便暴露也能夠用proxy作反向代理。測試
簡單到例子:url
location /login {
proxy_pass http://www.sohu.com/
}
複製代碼
當咱們訪問 http://192.168.0.101:8080/login就會直接跳轉到搜狐首頁。說明當前訪問地址爲搜狐網的代理地址。
須要特別注意的是:proxy後面的地址有沒有斜槓:
若是咱們訪問到地址是: http://192.168.0.101:8080/login/index.html 有斜槓:絕對地址,最終跳轉到:www.sohu.com/index.html 沒有斜槓:相對地址,最終跳轉到:www.sohu.com/login/index…rewrite 的做用是修改 uri,但要注意 rewrite 要有個從新匹配 location 的反作用。因爲 proxy_pass 的處理階段比 location 處理更晚,因此須要 break 掉,以防止 rewrite 進入下一次 location 匹配而丟失 proxy_pass。
一、break; 以下:
#這個指令表示,若是/login匹配成功,則直接在home路徑中查找demo.html文件
#而後跳轉到demo.html。注意這是內部跳轉,瀏覽器上的地址url不會變,仍是以/login結尾。
location /login {
rewrite ^/ /demo.html break;
root home/;
}
複製代碼
二、redirect ; 以下
#和break差很少,不過這個表示外部跳轉,也會跳轉到demo.html頁面,不過瀏覽器地址會自動變成demo.html
location /login {
rewrite ^/ /demo.html redirect;
root home/;
}
複製代碼
三、permanent ; 和redirect做用相似。
四、last; 若是是last修飾的話,nginx會將/demo.html地址和其餘location的地址進行匹配,而後找到匹配的地址,繼續執行下去。這裏他會執行到 /demo.html 的location中,而後內部跳轉到/demo.html頁面,以下:
location /login {
rewrite ^/ /demo.html last;
root home/;
}
location /demo.html {
rewrite ^/ /demo.html break;
root home/;
}
複製代碼
五、沒有修飾,就是無任何修飾。能夠看到這個rewrite後面沒有任何修飾。當沒有任何修飾的狀況下,匹配中location後,不會中止,會繼續想下面的location繼續匹配下去。知道匹配到最後一個,使用最後一個匹配到的。。以下
location /login {
rewrite ^/ /demo.html ;
root home/;
}
複製代碼
upstream 用以配置負載的策略,nginx自帶的有:輪詢/權重/ip_hash。特殊需求可用第三方策略(使用較少)。
upstream test{
server 192.168.0.101:8081;
server 192.168.0.102:8081;
}
upstream test1 {
server 192.168.0.101:8081 weight=2;
server 192.168.0.102:8081 weight=1;
}
upstream test2 {
ip_hash
server 192.168.0.101:8081;
server 192.168.0.102:8081;
}
server{
listen 80;
server_name localhost;
location /login {
proxy_pass http://test/
}
}
複製代碼
當訪問:http://localhost/login
時,nginx
就會在server 192.168.0.101:8081; server 192.168.0.102:8081
這兩個服務之間輪詢訪問。
upstream test1
表示上面的服務訪問2次,下面的服務訪問1次
upstream test2
表示更具客戶端ip地址的hash值來進行區分訪問那個服務,這種設置後,同一個客戶端訪問的服務通常是不會變的。