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

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

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

反向代理配置

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

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

反向代理,reverse proxy,是服務於非特定用戶(對於公開互聯網服務而言,一般是全部用戶)以訪問特定的服務。html

wKioL1emrgvB4OU1AADTP_RUfog382.png-wh_50 

正向代理中,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.從新在瀏覽器中刷新頁面

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

相關文章
相關標籤/搜索