Linux與雲計算——第二階段Linux服務器架設 第七章:網站WEB服務器架設—Nginx(下)

Linux與雲計算——第二階段Linux服務器架設

第七章:網站WEB服務器架設—Nginx(下)

反向代理配置

[1]  普通代理和反向代理

普通代理,forward proxy,是服務於特定用戶(比如說一個公司內 / 一個局域網內的客戶)以訪問非特定的服務;

反向代理,reverse proxy,是服務於非特定用戶(對於公開互聯網服務而言,通常是所有用戶)以訪問特定的服務。

wKioL1emrgvB4OU1AADTP_RUfog382.png-wh_50 

正向代理中,proxy和client同屬一個LAN,對server透明;

反向代理中,proxy和server同屬一個LAN,對client透明。

實際上proxy在兩種代理中做的事都是代爲收發請求和響應,不過從結構上來看正好左右互換了下,所以把後出現的那種代理方式叫成了反向代理。

[2] 反向代理: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。

1、將配置文件進行如下修改,增加一個本地的錯誤報告服務器:

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;

}

2、然後在網頁目錄中創建對應的目錄的錯誤文件

[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.重新在瀏覽器中刷新頁面

wKiom1emrjCCCYgGAAAhKS2mZT4684.png-wh_50 

2.7 Nginx+PHP-FPM

安裝PHP-FPM ( PHP FastCGI Process Manager ) 以便Nginx中使用PHP腳本

[1] 安裝PHPPHP-FPM.

[root@server ~]# yum -y install php php-mbstring php-pear php-fpm

[2] 配置PHP-FPMNginx.

[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

[3] 創建一個測試頁面並驗證.

[root@client ~]# echo "<?php phpinfo() ?>" > /usr/share/nginx/html/info.php


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