您好,登錄后才能下訂單哦!
這篇文章主要介紹了通過nginx實現方向代理過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
nginx 實現方向代理
1.什么是nginx
Nginx是由俄國人編寫的十分輕量級的HTTP服務器,是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等
2.什么是代理
代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求之后,再向主機發出,并接收目的主機返回的數據,存放在代理服務器的硬盤中,再發送給客戶機。
例如:我們身邊的要租房子的人
3.沒有代理的情景
在沒有代理的情況下,客戶端和nginx服務端,都是客戶端,都是客戶端之間請求服務端,服務端則直接響應客戶端
4.企業場景在互聯網請求里面,客戶端往往無法直接向服務端發起請求,那么就需要實現客戶端和服務通信。
5.nginx代理服務常見模式
nginx 作為代理服務,按照應用場景進行總結,代理分為正向代理,反向代理
6.正向代理
正向代理:客戶端 <一> 代理 一>服務端:
正向代理簡單地打個租房的比方:
A(租客)B(中介)C(房東) A(客戶端)想租C(服務端)的房子,但是A(客戶端)并不認識C(服務端)租不到。 B(代理)認識C(服務端)能租這個房子所以你找了B(代理)幫忙租到了這個房子。 ps:這個過程中C(服務端)不認識A(客戶端)只認識B(代理) C(服務端)并不知道A(客戶端)租了房子,只知道房子租給了B(代理)
---------------------------------------------------
正向代理,架設在客戶機與目標主機之間,只用于代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,并將本來要直接發送到Web服務器上的http請求發送到代理服務器中。
7.反向代理
反向代理:客戶端 一>代理 <一> 服務端 反向代理也用一個租房的例子: A(客戶端)想租一個房子,B(代理)就把這個房子租給了他。 這時候實際上C(服務端)才是房東。 B(代理)是中介把這個房子租給了A(客戶端)。 這個過程中A(客戶端)并不知道這個房子到底誰才是房東 他都有可能認為這個房子就是B(代理)的
--------------------------------------------------------
反向代理服務器架設在服務器端,通過緩沖經常被請求的頁面來緩解服務器的工作量,將客戶機請求轉發給內部網絡上的目標服務器;并將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器與目標主機一起對外表現為一個服務器。
8.反向代理主要應用
現在許多大型web網站都用到反向代理。除了可以防止外網對內網服務器的惡性攻擊、緩存以減少服務器的壓力和訪問安全控制之外,還可以進行負載均衡,將用戶請求分配給多個服務器。
9.nginx 代理可支持的代理協議
http 屬于七層的應用層 代理 超文本傳輸協議 https 代理 http/https協議 TCP 屬于四層傳輸層 代理tcp/dupxiey websocket 用于開發 代理http1.1長鏈接 通訊協議 GRPC 代理go語言遠程調用 POP/IMAP 代理郵件收發協議 RTMP 代理 流媒體,直播
10.web01配置代理
[root@web01 php]# vim /etc/nginx/conf.d/blog.drz.com.conf server { listen 80; server_name blog.drz.com; root /code/wordpress; index index.php index.html; access_log /var/log/nginx/blog.drz.com_access.log main; location ~\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 代理wordpress [root@lb01 ~]# vim /etc/nginx/conf.d/daili.conf 編輯wordpress的代理 server { listen 80; server_name blog.drz.com; location / { proxy_pass http://10.0.0.7; proxy_set_header HOST $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 60s; proxy_buffering on; proxy_buffer_size 8k; proxy_buffers 8 8k; } } root@lb01 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@lb01 ~]# nginx -s reload
11.添加發往后端服務器的請求頭信息
# 用戶請求的時候HOST的值是www.oldboy.com, 那么代理服務會像后端傳遞請求的還是www.oldboy.com proxy_set_header Host $http_host; # 將$remote_addr的值放進變量X-Real-IP中,$remote_addr的值為客戶端的ip proxy_set_header X-Real-IP $remote_addr; # 客戶端通過代理服務訪問后端服務, 后端服務通過該變量會記錄真實客戶端地址 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
12.代理到后端的TCP連接、響應、返回等超時時間
//nginx代理與后端服務器連接超時時間(代理連接超時) Syntax: proxy_connect_timeout time; Default: proxy_connect_timeout 60s; Context: http, server, location //nginx代理等待后端服務器的響應時間 Syntax: proxy_read_timeout time; Default: proxy_read_timeout 60s; Context: http, server, location //后端服務器數據回傳給nginx代理超時時間 Syntax: proxy_send_timeout time; Default: proxy_send_timeout 60s; Context: http, server, location
13.為什么要使用代理
1)提高訪問速度 由于目標主機返回的數據會存放在代理服務器的硬盤中,因此下一次客戶再訪問相同的站點數據時,會直接從代理服務器的硬盤中讀取,起到了緩存的作用,尤其對于熱門站點能明顯提高請求速度。
2)防火墻作用 由于所有的客戶機請求都必須通過代理服務器訪問遠程站點,因此可在代理服務器上設限,過濾某些不安全信息。
3)通過代理服務器訪問不能訪問的目標站點 互聯網上有許多開發的代理服務器,客戶機在訪問受限時,可通過不受限的代理服務器訪問目標站點,通俗說,我們使用的翻墻瀏覽器就是利用了代理服務器,雖然不能出國,但也可直接訪問外網。
14.總結
正向代理代理的對象是客戶端,為客戶端服務反向代理代理的對象是服務端,為服務端服務
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。