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

相关文章
相关标签/搜索