五分鐘瞭解Nginx反向代理

反向代理

  • 戶端對代理服務器是無感知的,客戶端不需要做任何配置,用戶只請求反向代理服務器,反向代理服務器選擇目標服務器,獲取數據後再返回給客戶端。

  • 反向代理服務器和目標服務器對外而言就是一個服務器,只是暴露的是代理服務器地址,而隱藏了真實服務器的 IP 地址。
    在這裏插入圖片描述

上圖敘述 : 在某項目使用自己的IP地址發佈後覺得, 自己的網站訪問速度慢, 服務器壓力大, 給用戶的體驗比較差 .

解決方案 : 使用Nginx做代理, 不讓用戶直接訪問到自己的IP地址, 從而可以保護自己的網站, 避免被人攻擊的煩惱, 而且還可以大大的提高項目的性能, 因爲Nginx web服務器性能非常高, 訪問速度更快, 但是有個缺點就是隻可以處理靜態資源, 不能處理動態資源, 而用戶請求的靜態資源, 可以由Nginx 直接返回, 將需要處理的業務功能 交給 Tomcat 去處理 , 這樣即實現了性能的優化, 還使得服務器減輕壓力, 實現動靜分離的效果

  1. 首先在主機中啓動一個web項目
  2. 訪問地址 : http://192.168.230.1:8080/Redis_SecondKill
  3. 代理前, 如圖:
    在這裏插入圖片描述
  4. 在Nginx反向代理主機中配置IP : http://192.168.230.1:8080
  5. 再次瀏覽器訪問項目的時候可以通過 Nginx 代理的IP訪問http://192.168.230.200:80 時相當於訪問http://192.168.230.1:8080
  6. 因爲HTTP的默認端口就是80 ,所有80 可以省略不寫

配置步驟

  • 修改Nginx的配置文件:
  • vim /usr/local/nginx/conf/nginx.conf

  • 註釋掉默認的
  • 在Nginx配置文件中 , 添加需要代理的地址如圖
    在這裏插入圖片描述

配置介紹

# 當瀏覽器訪問 http://虛擬機ip:80/xxx 時,會被nginx接受到,由server解析,匹配訪問的地址和location是否對應
# location / 可以匹配所有的訪問ngixn的請求
location / {
    #  root  html 第一行 相當於處理請求時,nginx讓請求在nginx的家目錄下查找(root) , 家目錄的html目錄下查找訪問的路徑
    #  http://虛擬機ip:80/xxx 訪問時,nginx會讓請求在 /usr/local/nginx/html/xxx 
    # root   html;
    # index  index.html index.htm;
    # proxy_pass http://192.168.230.1:8080; 當瀏覽器訪問http://192.168.230.200:80/xxx時,服務器地址由http://192.168.230.1:8080代替處理查找/xxx資源
    proxy_pass http://192.168.230.1:8080;
    # 配置超時時間
    proxy_connect_timeout 30;
}

location指令說明

  • 該指令用於匹配 URL。

  • 語法如下:

  • location [=|~|~*|^~|@] pattern{……}

  • =:用於不含正則表達式的 uri 前,要求請求字符串與 uri 嚴格匹配,如果匹配成功,就停止繼續向下搜索並立即處理該請求。

  • 語法如下

  • location= /index {
    proxy_pass http://192.168.230.1:8080;
    proxy_connect_timeout 30;
    }
    瀏覽器只有訪問虛擬機: http://192.168.230.200:80/index纔會被此location匹配

  • 沒有修飾符,必須以指定模式開始

  • 語法如下

  • location /a/b {
    proxy_pass http://192.168.230.1:8080;
    proxy_connect_timeout 30;
    }
    瀏覽器訪問的虛擬機端口號後如果路徑是以/a/b開始的,那麼就可以匹配, 區分大小寫

  • ~:用於表示 uri 包含正則表達式,並且區分大小寫。

  • 語法如下

  • location ~ ^/abc$ {
    proxy_pass http://192.168.230.1:8080;
    proxy_connect_timeout 30;
    }
    訪問路徑參考正則進行匹配

  • ~*:用於表示 uri 包含正則表達式,並且不區分大小寫。

  • 語法如下

  • location~* ^/abc${
    proxy_pass http://192.168.1.1:8888;
    proxy_connect_timeout 30;
    }

  • ^~:location後有^~ ,表示匹配路徑不包含正則,優先級比正則高

注意:如果 uri 包含正則表達式,則必須要有~或者~* 標識。

查找順序和優先級

  1. 帶有“=“的精確匹配優先
  2. 沒有修飾符的精確匹配
  3. 正則表達式按照他們在配置文件中定義的順序
  4. 帶有“^~”修飾符的,開頭匹配
  5. 帶有“~”“~*”修飾符的,如果正則表達式與URI匹配
  6. 沒有修飾符的,如果指定字符串與URI開頭匹配
  • 修改完後, 保存退出 !
  • 修改完配置文件,需要重新加載配置文件纔可生效
  • nginx -s reload

  • 如果出現以下錯誤
  • nginx: [error] open() “/usr/local/nginx/logs/nginx.pid” failed (2: No such file or directory)
  • 解決方法 : 連接地址
  • Nginx代理配置完成就可以使用代理過的地址訪問項目了
  • 在瀏覽器中測試訪問代理後的 IP, 如圖
    在這裏插入圖片描述
    上述就是對Nginx的反向代理做了一個簡單敘述!

感謝閱讀, 如有什麼更好的建議或方法 ,可以留言或進羣交流. 各種疑難雜症QQ交流羣:1101584918,歡迎大家加入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章