什么是代理服務器
代理服務器,客戶機在發送請求時,不是直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求之后,再向主機發出,并接收目的主機返回的數據,存放在代理服務器的硬盤中,再發送給客戶機。
代理服務器的作用
- 提高訪問速度(熱門網站必配):通常代理服務器都設置一個較大的緩沖區,當有外界的信息通過時,同時也將其保存到緩沖區中,當其他用戶再訪問相同的信息時,則直接由緩沖區中取出信息,傳給用戶,以提高訪問速度。
- 隱藏真實身份(網站安全加強):上網者也可以通過代理服務器隱藏自己的真實地址信息,還可隱藏自己的IP,防止被黑客攻擊。
- 突破限制(盡情網上沖浪):有時候網絡供應商會對上網用戶的端口,目的網站,協議,游戲,即時通訊軟件等的限制,使用代理服務器都可以突破這些限制。
正向代理與反向代理
正向代理,好比你想買房,但是你的資金不夠,于是你去找王思聰借錢,肯定是被拒絕了;這個時候你打聽到你的一個好朋友小A和王思聰是同學,于是你找小A幫你跟王思聰借錢,借錢成功。小A在這個過程中就是代理,準確點是正向代理,小A替你借了錢,這個過程中,非常關鍵的是真正借錢的人是誰,王思聰是不知道的。
我們常說的代理也就是指正向代理,正向代理的過程,它隱藏了真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理服務器代替來請求,比如科學上網工具 Shadowsocks 扮演的就是典型的正向代理角色。

反向代理,好比你撥打10086,一個地區的 10086 客服成百上千個,你不需要關心在電話那頭的是哪一個,你關心的是你的問題能不能得到專業的解答;那么這里的 10086 總機號碼就是我們說的反向代理。客戶不知道真正提供服務的人是誰。
反向代理隱藏了真實的服務端,當我們訪問 www.baidu.com 的時候,背后可能有成千上萬臺服務器為我們服務,但具體是哪一臺,你不知道,www.baidu.com 就是我們的反向代理服務器,反向代理服務器會幫我們把請求轉發到提供真實計算的服務器那里去。

兩者的區別在于代理的對象不一樣,「正向代理」代理的對象是客戶端,「反向代理」代理的對象是服務端。
反向代理應用場景
當下很多大型 Web 網站都會使用到反向代理。用于防止外網對內網服務器的惡性攻擊;緩存以減少服務器的壓力和訪問安全控制;實現負載均衡。
實踐配置反向代理服務器 Nginx
Nginx作為當下最火的反向代理服務器,下面舉例使用nginx反向代理,多域名站點配置:
配置IP域名
172.16.100.108 www.a.com
172.16.100.108 www.b.com
- upstream www_a_com {
- server 172.16.100.108:8001;
- }
- upstream www_b_com {
- server 172.16.100.108:8002;
- }
- server {
- listen 80;
- server_name www.a.com;
- charset utf-8;
- autoindex off;
- location / {
- proxy_pass http://www_a_com;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
- server {
- listen 80;
- server_name www.b.com;
- charset utf-8;
- autoindex off;
- location / {
- proxy_pass http://www_b_com;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }