普通代理,forward proxy,是服務於特定用戶(好比說一個公司內 / 一個局域網內的客戶)以訪問非特定的服務;php
反向代理,reverse proxy,是服務於非特定用戶(對於公開互聯網服務而言,一般是全部用戶)以訪問特定的服務。html
正向代理中,proxy和client同屬一個LAN,對server透明;前端
反向代理中,proxy和server同屬一個LAN,對client透明。linux
實際上proxy在兩種代理中作的事都是代爲收發請求和響應,不過從結構上來看正好左右互換了下,因此把後出現的那種代理方式叫成了反向代理。nginx
[2] 反向代理:Web服務器的經紀人web
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。後端
[3] 反向代理的做用瀏覽器
保護網站安全:任何來自Internet的請求都必須先通過代理服務器;緩存
經過配置緩存功能加速Web請求:能夠緩存真實Web服務器上的某些靜態資源,減輕真實Web服務器的負載壓力;安全
實現負載均衡:充當負載均衡服務器均衡地分發請求,平衡集羣中各個服務器的負載壓力;
[4] 實驗環境準備
WEB1:後端網頁服務器1,IP地址爲192.168.96.200,主機名爲web01.example.com,啓動httpd服務,並提供WEB頁面web1的內容。
WEB2:後端網頁服務器2,IP地址爲192.168.96.201,主機名爲web01.example.com,啓動httpd服務,並提供WEB頁面web2的內容。
Nginx:前端負載均衡器和反向代理服務器,IP地址爲192.168.96.100,主機名爲server.example.com。
全部實驗用機使用CentOS7.2版本,預先Selinux配置爲disable狀態並關閉了防火牆服務。
[5] Nginx反向代理和負載均衡服務器配置模式
Nginx的upstream目前支持5種方式的分配
1 輪詢(默認)
每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。
2 weight
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。
例如:
upstream bakend {
server 192.168.100.104 weight=10;
server 192.168.100.105 weight=10;
}
3 ip_hash
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠
解決session的問題。
例如:
upstream bakend {
ip_hash;
server 192.168.100.104:80;
server 192.168.100.105:80;
}
4 fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
例如:
upstream bakend {
server 192.168.100.104:80;
server 192.168.100.105:80;
fair;
}
5 url_hash(第三方)
按訪問url的hash結果來分配請求,使每一個url定向到同一個後端服務器,後端服務
器爲緩存時比較有效。
例如:
upstream backend {
server 192.168.100.104:3128;
server 192.168.100.105:3128;
hash $request_uri;
hash_method crc32;
每一個設備的狀態設置爲:
1. down 表示單前的server暫時不參與負載
2. weight 默認爲1.weight越大,負載的權重就越大,根據服務器性能而定
3. max_fails :容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
4. fail_timeout:max_fails次失敗後,暫停的時間。
5. backup: 其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。
Nginx支持同時設置多組的負載均衡,用來給不用的server來使用。
[6] 配置反向代理和負載均衡
upstream webservers {
server 192.168.96.200:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.96.201:80 weight=4 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://webservers;
proxy_set_header X-Real-IP $remote_addr;
}
}
注,upstream是定義在server{ }以外的,不能定義在server{ }內部。定義好upstream以後,用proxy_pass引用一下便可。
[7] 給Nginx配置備份服務器
但你們想一下,若是不幸的是全部服務器都不能提供服務了怎麼辦,用戶打開頁面就會出現出錯頁面,那麼會帶來用戶體驗的下降,因此咱們能不能像配置LVS是配置sorry_server呢,答案是能夠的,但這裏不是配置sorry_server而是配置backup。
一、將配置文件進行以下修改,增長一個本地的錯誤報告服務器:
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html/errorpage;
index index.html;
}
upstream backend {
server 192.168.1.100:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.1.101:80 weight=4 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8080 backup;
}
二、而後在網頁目錄中建立對應的目錄的錯誤文件
[root@proxy nginx]# mkdir -pv /usr/share/nginx/html/errorpage
mkdir: created directory ‘/usr/share/nginx/html/errorpage’
[root@proxy nginx]# echo "sorry" > /usr/share/nginx/html/errorpage/index.html
[root@proxy nginx]# cat /usr/share/nginx/html/errorpage/index.html
Sorry
1.在WEB1上和WEB2上中止HTTP服務
Systemctl stop httpd
2.從新在瀏覽器中刷新頁面
安裝PHP-FPM ( PHP FastCGI Process Manager ) 以便在Nginx中使用PHP腳本
[root@server ~]# yum -y install php php-mbstring php-pear php-fpm
[root@server ~]# vi /etc/php-fpm.d/www.conf
# line 39: 修改
user = nginx
# line 41: 修改
group = nginx
[root@server ~]# systemctl start php-fpm
[root@server ~]# systemctl enable php-fpm
[root@server ~]# vi /etc/nginx/nginx.conf
# 添加到 "server" 部分
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
[root@server ~]# systemctl restart nginx
[root@client ~]# echo "<?php phpinfo() ?>" > /usr/share/nginx/html/info.php