Linux服务之nginx服务篇三(反向代理、负载均衡)
一、Nginx实现反向代理
概念
反向代理:在收到客户端请求之后,会修目标IP地址和端口
正向代理:在收到客户端请求之后,会修源IP地址和端口
上游服务器:代理服务器后端的哪些真正给客户端提供服务的节点,这样的服务器称之为上游服务器
下游服务器:客户端就是下游节点
模块:nginx_http_proxy_module
指令:
proxy_pass:指定上游服务器的ip和端口
proxy_set_header:指定在重新封装请求报文的时候,添加一个新的首部
部署步骤:
0.检查环境
1.安装服务
yum -y install nginx httpd php
2.配置httpd端口
vim /etc/httpd/conf/httpd.conf
###########
Listen 45678
############
3.启动httpd
systemctl start httpd
systemctl enable httpd
netstat -anp|grep httpd
4.修改Nginx配置文件
vim /etc/nginx/nginx.conf
########
删除默认的80端口server #切记最后需要加一个}。
###############
cd /etc/nginx/conf.d
vim pass.conf
###########
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:45678;
}
}
###########
5.启动nginx
nginx -t #进行语法检测
systemctl restart nginx
systemctl enable nginx
netstat -anp|grep nginx
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port=80/tcp --permanent
6.浏览器验证
7.验证php
echo "<?php phpinfo(); ?>" > /var/www/html/index.php
8.浏览器验证
9.配置nginx网站
mkdir /nginx
echo "123" > /nginx/index.html
vim /etc/nginx/conf.d/pass.conf
###################
server {
listen 80;
location ~* \.php$ {
proxy_pass http://127.0.0.1:45678;
}
location / {
root /nginx;
}
}
################
10.重启nginx
nginx -t
systemctl restart nginx
11.浏览器验证
IP/index.html
IP/index.php
补充一:
location如下:
location /admin {
proxy_pass http://www.ken.com/;
proxy_pass http://www.ken.com;
}
请求的url 是http://www.ken.com/admin/a.html
如果代理方式是 proxy_pass http://www.ken.com/; 那么去www.ken.com的根目录下找a.html,/代表完全代理。
如果代理方式是 proxy_pass http://www.ken.com; 那么去www.ken.com的根目录下的admin找a.html
补充二:
如果location中使用了模式匹配(正则),那么,location中的url会直接补充到代理节点的后面.
此时,上游服务器的的后面不能有任何内容,包括 / location ~ \.php$ {
proxy_pass http://www.ken.com; [正则表达式proxy_pass转发的地址后面什么都不能加] <<< 正确写法
proxy_pass http://www.ken.com:80; <<< 正确写法
proxy_pass http://www.ken.com/; <<< 错误写法
proxy_pass http://www.ken.com/img; <<< 错误写法
} 此时,如果请求的url是 http://www.baidu.com/book/stu/a.php ,就会代理成 http://www.ken.com/book/stu/a.php
补充三:
在location中如果有重定向的话,那么就用重定向后的uri替换掉代理节点中的uri
location / {
rewrite /(.*)$ /index.php?name=$1 break;
proxy_pass http://www.baidu.com:80/img;
} 此时,如果请求的url是 http://www.ken.com/bajie ,就会代理成 www.baidu.com/index.php?name=bajie
二、nginx实现负载均衡
概念:
1、概念
调度器:分发用户的请求到一个后端节点
上游服务器(真实服务器):每个真正用来处理用户请求的节点都是一个上游服务器
CIP:(client IP)客户端的IP地址
RIP:(real IP)真实服务器的IP地址
VIP:(virtual IP)虚拟IP,用户所看到的是也是虚拟IP
2、指令
指令:upstream
作用:定义一个上游服务器组
格式
upstream name {
server 上游服务器1 参数 参数;
server 上游服务器1 参数 参数;
server 上游服务器1 参数 参数;
}
3、参数
weight=#:设置服务器的权重(数字越大,权重越高)
backup:设置服务器处于备用状态(其他节点出现故障,备用节点才开始工作)
down:设置让一个节点处于离线状态(经常用在维护一个节点的情况下)
max_fails=number:设置连续几次转发失败就认为该节点出现故障,然后就不再向该节点转发用户请求了
fail_timeout=time:和上个参数组合使用,作用是设置等待上游服务器响应超时时间
实验:a.com、b.com、c.com
1.安装服务
yum -y install nginx
2.建立路径
mkdir -p /work/html_a
mkdir -p /work/html_b
echo "aaaaaaaaa" > /work/html_a/index.html
echo "bbbbbbbb" > /work/html_b/index.html
3.编辑配置文件
cd /etc/nginx/conf.d
vim ab.conf
###########################
server {
listen 80;
server_name a.com;
location / {
root /work/html_a;
}
}
server {
listen 80;
server_name b.com;
location / {
root /work/html_b;
}
}
server {
listen 80;
server_name c.com;
location / {
proxy_pass http://abc;
}
}
upstream abc {
server 127.0.0.1:81;
server 127.0.0.1:82;
}
server {
listen 81;
server_name a.com;
location / {
root /work/html_a;
}
}
server {
listen 82;
server_name b.com;
location / {
root /work/html_b;
}
}
########################
4.查错
nginx -t
5.重启服务
systemctl restart nginx
6.添加防火墙端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
7.设置域名静态解析
echo "192.168.10.100 a.com" >> /etc/hosts
echo "192.168.10.100 b.com" >> /etc/hosts
echo "192.168.10.100 c.com" >> /etc/hosts
8.验证
curl a.com
curl b.com
curl c.com
三、反向代理和负载均衡的区别
1、反向代理proxy_pass后跟的是一个具体的IP地址,负载均衡proxy_pass后跟的是集群名;
2、反向代理代理到的是某一个特点的服务器,而负载均衡器是根据算法调度到集群中的某个节点上;
3、反向代理和负载均衡都可以使用模式匹配(正则)。
四、nginx启动错误
利用nginx进行反向代理的时候,我们会配置proxy_pass。在启动nginx的时候,会报如下错误:
nginx: [emerg] host not found in upstream "xxx.com" in /usr/local/nginx/conf/vhost/yq.nginx.com.conf:19
其实nginx配置语法上没有错误的,只是系统无法解析这个域名,所以报错.
解决办法就是添加dns到/etc/resolv.conf 或者是/etc/hosts,让其能够解析到IP。类似windows下的hosts文件的修改。
具体步骤如下:
vim /etc/hosts //修改hosts文件,在hosts文件里面加上一句: 127.0.0.1 localhost.localdomain xxx.com
Linux服务之nginx服务篇三(反向代理、负载均衡)的更多相关文章
- 【05】Nginx:TCP / 正向 / 反向代理 / 负载均衡
写在前面的话 在我们日常的工作中,不可能所有的服务都是简单的 HTML 静态网页,nginx 作为轻量级的 WEB 服务器,其实我们将它用于更多的地方还是作为我们网站的入口.不管你是后端接口,还是前端 ...
- nginx之rewrite重写,反向代理,负载均衡
rewrite重写(伪静态): 在地址栏输入xx.com/user-xxx.html, 实际上访问的就是xxx.com/user.php?id=xxx rewrite就这么简单 附上ecshop re ...
- 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
- 反向代理负载均衡之nginx
一.集群 1.1 什么是集群 集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高可用性 ...
- 十.nginx反向代理负载均衡服务实践部署
期中集群架构-第十章-nginx反向代理负载均衡章节章节====================================================================== 0 ...
- Nginx 反向代理 负载均衡 虚拟主机配置
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- nginx 详解反向代理负载均衡
什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求 均匀转发给多台内部Web服务器 ...
- Nginx 反向代理 负载均衡 虚拟主机
Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...
- 【转】Nginx 反向代理 负载均衡 虚拟主机配置
原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...
- Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向
原文发表于cu:2016-08-25 参考文档: Nginx 反向代理.负载均衡.页面缓存.URL重写等:http://freeloda.blog.51cto.com/2033581/1288553 ...
随机推荐
- 剑指offer--孩子们的游戏(圆圈中最后剩下的数字)
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指定一个数m ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos6.5-14
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos6.5-14 欢迎加QQ群:1026880196 进行交流学习 制作OpenSta ...
- 多图详解 TCP 连接管理,太全了!!!
TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...
- kubectl简介
kubectl简介 kubectl是操作k8s集群的命令行工具,安装在k8s的master节点,kubectl在$HOME/.kube目录中查找一个名为config的文件, 你可以通过设置Kubeco ...
- php中怎么使用call_user_func动态调用方法
php中可使用call_user_func进行方法的动态调用,可以动态调用普通函数.类方法以及带参数的类方法1.定义一个普通函数getCurrentDate,用于获取今天日期.call_user_fu ...
- 【golang】golang 相关问题?
1.golang 官网下载很慢: 中科大镜像:http://mirrors.ustc.edu.cn/golang/ 2.go get 下载依赖很慢的问题: https://goproxy.io/zh/ ...
- ubuntu 1804 配置阿里源
以防出错,先备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑元列表文件sudo vim /etc/apt/sources.list ...
- hdu2155 小黑的镇魂曲(dp)
题意: 小黑的镇魂曲 Problem Description 这个事情发生在某一天,当小黑和SSJ正在约会的时候,邪恶的Guner抓走了SSJ, ...
- 分子动力学模拟软件VMD的安装与使用
技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...
- Vulnerability: Cross Site Request Forgery (CSRF)
CSRF跨站请求伪造 这是一种网络攻击方式,也被称为one-click attack或者session riding 攻击原理 CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web ...