扩展多个web应用
原因: 单台web服务器能抗住的访问是有限的,配置多台web服务器能提升更高的访问速度,能够接受更多的用户请求。
优点:
- 提高冗余
- 提高性能
实现方法:
1.准备web02服务器
2.安装nginx和php环境
[root@web01 ~]# scp /etc/yum.repos.d/nginx.repo root@172.16.1.8:/etc/yum.repos.d/nginx.repo
[root@web01 ~]# scp php.zip root@172.16.1.8:~
[root@web02 ~]# unzip php.zip
#解压web01推送过来的压缩包
[root@web02 ~]# yum localinstall php/*.rpm
#通过本地方式安装所有的rpm
[root@web02 ~]# yum install nginx -y
3.拷贝web01上的nginx配置、php配置
[root@web01 ~]# scp -rp /etc/nginx root@172.16.1.8:/etc/
[root@web01 ~]# scp -rp /etc/php-fpm.d/www.conf root@172.16.1.8:/etc/php-fpm.d/www.conf
[root@web01 ~]# scp -rp /etc/php.ini root@172.16.1.8:/etc/php.ini
4.将web01代码推送到web02
[root@web01 ~]# scp -rp /code root@172.16.1.8:/
5.依次启动服务
[root@web02 ~]# groupadd -g 666 www
[root@web02 ~]# useradd -u 666 -g 666 www
[root@web02 ~]# systemctl restart nginx php-fpm
[root@web02 ~]# systemctl enable nginx php-fpm
[root@web02 ~]# chown -R www.www /code/
会产生的问题:
静态资源不一致
web空间不足
容量不足
解决方案:
引入nfs
操作步骤:
1.安装一台NFS服务器,配置并共享一个目录。
思路:任何一个服务,都是 安装 配置 启动。
#安装配置
[root@nfs ~]# yum install nfs-utils -y
[root@nfs ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
#初始化环境
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u666 -g666 www
[root@nfs ~]# rm -rf /data/
[root@nfs ~]# mkdir /data/blog -p
[root@nfs ~]# chown -R www.www /data/blog/
#重启
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enable nfs
2.找到网站静态资源存放的路径,然后进行NFS的共享。( 不是必须的 )
地址:http://blog.oldxu.com/wp-content/uploads/2020/04/timg.jpeg
路径:/code/wordpress/wp-content/uploads/2020/04/timg.jpeg
需要共享的目录:/code/wordpress/wp-content/uploads/
在所有的web节点执行如下操作:
[root@web02 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/
3.测试,web02上传。web01查看,如果没有问题,说明共享存储对接完成。
负载均衡
-
DNS轮询,需要依赖web节 点是公网IP,
配置DNS的A记录
b l0g.0 Ldxu. com
10.0.0.7
10.0.0.8
10.0.0.9
1.需要所有的web节点具备公网IP地址
2.公网独立IP需要费用,而且不便宜。
3.所有的web节点有公网IP,不安全。
4.DNS轮询机制。没有健康检查功能。( 体验差) -
优点
1.所有的web节点不在需要有公网IP
2.节省成本
3.保证安全
4.能够对后端的web节点进行健康检查机制 -
负载均衡有对应的调度算法
轮询
加权轮询
最少连接数调度算法
nginx代理
代理是客户端与服务端的中间人。
nginx代理服务常见模式
正向代理
客户端<–>代理->服务端
正向代理代理的对象是客户端,为客户端服务
(常用于为客户端提供科学上网的方式)
反向代理
用于公司集群架构中,
客户端->代理<–>服务端
反向代理代理的对象是服务端,为服务端服务
(常用于)
nginx反向代理模式
反向代理模式 | Nginx反向代理模块 |
---|---|
http、websocket、 https | ngx_ http_ proxx_ module |
fastcgi | ngx_ http_fastcgi_ module |
wusgi | ngx_http_uwsgi_ module |
grpc | ngx_http_v2_module |
配置反向代理
- 代理服务器安装nginx
- 配置后端web节点web.oldxu.com:8080
server {
listen 8080;
server_name web.oldxu.com;
root /web;
location / {
index index.html;
}
}
- 配置nginx反向代理,代理后端的web节点
server {
listen 80;
server_name web.oldxu.com;
location / {
proxy_pass http://10.0.0.7:8080;
}
}
如果把上面的实验的后端web_server的端口为80端口,代理服务器的端口也改成80,这时用户返回的结果可能会不符合我们的预期。
这是因为我们的代理服务器并没有指定代理访问的域名,导致代理服务器只知道访问10.0.0.7的80端口,但是并不知道访问哪个域名,因此就会出错,这个时候我们只需要在10.0.0.5的配置文件中加入;
proxy_set_Heater Host $http_host;
就可以解析域名了。
我们通过抓包工具会发现,代理服务器传输数据时会封装成http1.0的包,但是我们直接传输确实http1.1,为了传输的更高效,我们最好使用http1.1为好,解决方法:
proxy_ http._version 1.1;
如何透传真实的ip方便我们做访问控制?
proxy_set_header X- Forwarded- For $proxy_add_x_forwarded_for;
nginx代理相关的参数:
proxy_pass http://172.16.1.7:80; 域名
proxy_http_version 1.1; http版本
proxy_set_header Host $http_host; 真实域名
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 真实ip
proxy_connect_timeout 30; 连接超时时间 单位:s
proxy_send_timeout 60; 后端服务器回传给nginx代理服务器的超时时间 单位:s
proxy_read_timeout 60; 响应超时时间 单位:s
proxy_ buffering on; 边传边收
proxy_buffer_size 32k; header头的缓存区大小
proxy_buffers 4128k; nginx的缓存区大小
nginx的代理接受的用户连接有限 最多只能使用65535个端口,最多能支撑50000的连接。技能代理一台后端webserver。多台webserver组成的集群需要使用nginx负载均衡来实现。
我们可以把所有的参数放到一个文件中,在配置文件中使用include命令将参数传递进去,进而达到网站的优化功能。