linux下使用nginx实现虚拟主机和搭建基于反向代理的负载均衡

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43687990/article/details/102530052

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器

首先准备三台虚拟
node1 : IP为 :192.168.163.21
node2 : IP为:192.168.163.22
node3 : IP为: 192.168.163.23
node1中安装的有nginx,nginx的安装在我另一个博客中有说明:linux下安装nginx

什么是虚拟主机
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的
在这里插入图片描述
通过nginx可以实现虚拟主机的配置,nginx支持三种类型虚拟主机配置
1、基于ip的虚拟主机, (一块主机绑定多个ip地址)
2、基于域名的虚拟主机(servername)
3、基于端口的虚拟主机(listen如果不写ip端口模式)
在nginx.conf下进行配置

server
{
    listen 192.168.163.22:80;
    server_name localhost;
    root /data/www;
}
server
{
    listen 192.168.163.23:80;
    server_name localhost;
    root /data/www;
}

http{
server{
#表示一个虚拟主机
}
}

location映射:
location [ = | ~ | ~* | ^~ ] uri { … }
location URI {}:
对当前路径及子路径下的所有对象都生效;
location = URI {}: 注意URL最好为具体路径。
精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;
location ~ URI {}:
location ~* URI {}:
模式匹配URI,此处的URI可使用正则表达式,区分字符大小写,不区分字符大小写;
location ^~ URI {}:
不使用正则表达式
优先级:= > ^~ > |
> /|/dir/

/loghaha.html
/logheihei.html
^/log.*html$

nginx 收到请求头:判定ip,port,hosts决定server
nginx location匹配:用客户端的uri匹配location的uri
先普通
顺序无关
最大前缀
匹配规则简单
打断:
^~
完全匹配
再正则
不完全匹配
正则特殊性:一条URI可以和多条location匹配上
有顺序的
先匹配,先应用,即时退出匹配

根据请求头中的内容可以进行判断

		host:决策server负责处理
		uri:决策location
		反向代理:proxy_pass  ip:port[uri];

什么是反向代理?
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
在这里插入图片描述
经典的反向代理结构
在这里插入图片描述
虚拟主机
一个server{} 就是一个虚拟主机
基于域名的
反向代理:

  proxy_pass
 location /baidu {
            proxy_pass http://192.168.9.12[/];  //nginx收到客户端的uri是否传递到上游,由是否在上游域名后有uri设定,没有uri的情况下:传递
 }

反向代理配置nginx.conf:

server {
  location  /  {
	proxy_pass 被代理的url如http://192.168.163.23/;
  }
}

nginx实现负载均衡,在nginx.conf中添加upstream配置,配置如下:

upstream  名字 {
  server  IP:PORT;#被代理服务器ip和端口
  server  IP:PORT; #被代理服务器ip和端口
}

server {
  location  /  {
	proxy_pass http://名字[/]; #带不带最后的/根据uri去判断,上面有过说明
  }
}

下面给出完整的配置示例:

  upstream sxt {
	server 192.168.163.22:80;
	server 192.168.163.23:80;
    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html;
        }

	location /ooxx {
	   proxy_pass http://sxt/;
	}
	location /www {
	   proxy_pass https://www.baidu.com/;
	}
	
	location ~* ^/s {
	   proxy_pass https://www.baidu.com;
	}

当配置完成后,需要重新加载一下配置文件,进入nginx目录下的sbin下,使用如下命令重新加载 ./nginx -s reload
然后在浏览器上访问 http:192.168.163.21/ooxx 则会被负载到 192.168.163.22虚拟机和192.168.163.23上

猜你喜欢

转载自blog.csdn.net/qq_43687990/article/details/102530052