反向代理
-
戶端對代理服務器是無感知的,客戶端不需要做任何配置,用戶只請求反向代理服務器,反向代理服務器選擇目標服務器,獲取數據後再返回給客戶端。
-
反向代理服務器和目標服務器對外而言就是一個服務器,只是暴露的是代理服務器地址,而隱藏了真實服務器的 IP 地址。
上圖敘述 : 在某項目使用自己的IP地址發佈後覺得, 自己的網站訪問速度慢, 服務器壓力大, 給用戶的體驗比較差 .
解決方案 : 使用Nginx做代理, 不讓用戶直接訪問到自己的IP地址, 從而可以保護自己的網站, 避免被人攻擊的煩惱, 而且還可以大大的提高項目的性能, 因爲Nginx web服務器性能非常高, 訪問速度更快, 但是有個缺點就是隻可以處理靜態資源, 不能處理動態資源, 而用戶請求的靜態資源, 可以由Nginx 直接返回, 將需要處理的業務功能 交給 Tomcat 去處理 , 這樣即實現了性能的優化, 還使得服務器減輕壓力, 實現動靜分離的效果
- 首先在主機中啓動一個web項目
- 訪問地址 : http://192.168.230.1:8080/Redis_SecondKill
- 代理前, 如圖:
- 在Nginx反向代理主機中配置IP : http://192.168.230.1:8080
- 再次瀏覽器訪問項目的時候可以通過 Nginx 代理的IP訪問http://192.168.230.200:80 時相當於訪問http://192.168.230.1:8080
- 因爲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 包含正則表達式,則必須要有~
或者~*
標識。
查找順序和優先級
- 帶有
“=“
的精確匹配優先 - 沒有修飾符的精確匹配
- 正則表達式按照他們在配置文件中定義的順序
- 帶有
“^~”
修飾符的,開頭匹配 - 帶有
“~”
或“~*”
修飾符的,如果正則表達式與URI匹配 - 沒有修飾符的,如果指定字符串與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,歡迎大家加入。