Nginx 反向代理經常使用配置

什麼是代理

在計算機中,客戶端A與服務端B進行通訊,中間加入中介C進行數據傳遞,則造成了代理。來個淺顯易懂的比喻,三年級二班小明和小花談戀愛,因爲小明和小花座位離的太遠,這時候須要小王在中間傳遞紙條,在這個愛情故事中小王在中間充當了代理做用。php

什麼是正向代理呢

正向代理中,客戶端經過代理服務器從服務端收發數據,即爲正向代理。
舉個栗子:有一個局域網,可是隻有主機局域訪問外部網絡的權限,如今全部的機器都須要訪問外部網絡,經過將主機設置爲代理服務器,讓全部的機器經過主機能夠訪問外部網絡,即稱爲正向代理。
clipboard.pnghtml

反向代理又是什麼

反向代理中,代理服務器替服務端收發數據,全部的請求與相應都通過反向代理,能夠用來實現數據緩存,負載均衡等。
舉個栗子: 張三開了一個保險公司(服務端),一開始公司業務小,一我的接電話就夠了,後來隨着公司擴張,天天無數電話打進來,張三招了一個客服李四(代理),張三把和客戶對接的事情都交給了李四,造成了反向代理。
clipboard.pngnginx

反向代理經常使用配置

server {
    listen       80;
    server_name  localhost;  #實際狀況能夠寫域名    
    location / {
         index  index.html index.htm;
         proxy_set_header Host $host:$server_port;
         proxy_pass http://127.0.0.1:9992;
         rewrite ^/(.*)  /index.php?s=$1;    
    }
}

配置項不少,挑幾個幾個經常使用的配置依次介紹:location、proxy_set_header、rewrite、proxy_pass正則表達式

代理目錄匹配 location

# 匹配全部根目錄
location /
# 字符串匹配, 表示匹配全部「/static」開頭的目錄
location /static
# ~ 匹配符合表達式目錄好比代理目錄中存在「static/(js|images)」的目錄
location ~ /static/(js|images)/
# ~* 加上 * 表示不區分大小寫
location ~ /static/(js|images)/
# = 表示精確匹配, 只有"/index"路徑纔會被代理,"/index/test"將不會被代理
location = /index

固然還有」!「、」^「匹配,用的比較少,這裏不作說明緩存

設置代理請求頭 proxy_set_header

# 設置代理請求服務器請求頭host
proxy_set_header Host $host
# 設置代理請求的ip地址
proxy_set_header X-Forwarded-Ip $remote_addr  
# 設置代理請求自定義數據
proxy_set_header test test

這裏還有不少數據,不一一說明bash

請求代理服務器 proxy_pass

# 從 「127.0.0.1」這臺服務器收發數據,固然也能夠直接寫域名
proxy_pass http://127.0.0.1:8080
# 從服務端機器data目錄收發數據
proxy_pass http://127.0.0.1:81/data;
# 動態配置數據,$scheme表示用戶請求是http仍是https,$host表示客戶端請求頭host,$args表示客戶端請求參數
proxy_pass $scheme://$host/$request_uri/?$args

url重定向規則 rewrite

包含3個參數:服務器

rewrite 匹配規則 重定向規則 重定向類型;

用法示例:網絡

# /a.html 的時候,url重定向路徑 /b.html 中
rewrite /a.html /b.html last;
# break 與 last的區別是,當存在多條rewrite規則時last會繼續往下匹配,break不會繼續往下匹配,而是將匹配到的重定向路徑當作最終路徑
rewrite /a.html /b.html break;
# 固然重定向規則也是能夠寫正則表達式的 例如:/static/images/a.png => /local/images/a.png
rewrite ^/static/images/(.*)$ /local/images/$1 break;
# redirect 表示302重定向
rewrite /a.html /b.html redirect;
# permanent 表示301重定向
rewrite /a.html /b.html permanent;

301重定向表示永久性重定向,對於SEO相較302來講比較友好,這裏不作過多說明。負載均衡

部分參考

nginx doc
nginx rewrite 配置ide

相關文章
相關標籤/搜索