文章目录
- 一、Nginx虚拟主机
- 1、虚拟主机介绍
- 2、Nginx安装部署详解
- 3、虚拟主机配置
- 3.1、基于域名
- 3.2、基于IP
- 3.3、基于端口
- 二、Nginx代理
- 1、代理简介
- 2、Nginx Proxy 配置
- 3、Nginx反向代理配置
- 三、Nginx负载均衡
- 1、Nginx负载均衡简介
- 2、Nginx负载均衡算法
- 2.1、热备
- 2.2、轮询
- 2.3、IP哈希
- 2.4、拓展实例(基于七层及四层配置)
- 2.4.1、七层负载均衡的配置
- 2.4.2、四层负载均衡的配置
一、Nginx虚拟主机
1、虚拟主机介绍
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响。
nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置。
1、基于域名的虚拟主机 。(server_name来区分虚拟主机——应用:外部网站)
2、基于ip的虚拟主机 。(一块主机绑定多个ip地址)
3、基于端口的虚拟主机 。(端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台)
2、Nginx安装部署详解
3、虚拟主机配置
3.1、基于域名
[xiaobai@nginx] vim /etc/nginx/conf.d/nginx.conf
#将nginx主配置文件/etc/nginx/nginx.conf中的server模块注释掉,在conf.d目录下自己创建
#要确定http模块中有include /etc/nginx/conf.d/*.conf这句话
server {
listen 80;
server_name web.xiaobai.com;
location / {
root /var/www/nginx/;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.little.com;
location / {
root /little/html;
index index.html index.htm;
}
}
[xiaobai@nginx] mkdir -p /little/html
[xiaobai@nginx] mkdir -p /var/www/nginx/html
[xiaobai@nginx] vim /var/www/nginx/index.html
xiaobai
[xiaobai@nginx] vim /little/html/index.html
little
[xiaobai@nginx] nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[xiaobai@nginx] systemctl start nginx
客户端配置解析,在 C:\Windows\System32\drivers\etc\hosts 文件中添加两行
192.168.226.128 web.xiaobai.com
192.168.226.128 www.little.com
如果有域名的同学不需要执行上述解析,只需要将自己的域名绑定到对应的服务器即可
不要忘记关闭nginx机器上的防火墙。
3.2、基于IP
[xiaobai@nginx] ip a
inet 192.168.226.128/24 brd 192.168.226.255 scope global noprefixroute dynamic ens33
[xiaobai@nginx] ip a add dev ens33 192.168.226.100/24
[xiaobai@nginx] ip a
inet 192.168.226.128/24 brd 192.168.226.255 scope global noprefixroute dynamic ens33
inet 192.168.226.100/24 scope global secondary ens33
[xiaobai@nginx] mv /etc/nginx/conf.d/nginx.conf /etc/nginx/conf.d/nginx.conf.bak
[xiaobai@nginx] vim /etc/nginx/conf.d/nginx.conf
server {
listen 80;
server_name 192.168.226.128;
location / {
root /var/www/nginx/;
index index.html index.htm;
}
}
server {
listen 80;
server_name 192.168.226.100;
location / {
root /little/html/;
index index.html index.htm;
}
}
[xiaobai@nginx] vim /var/www/nginx/index.html
192.168.226.128
[xiaobai@nginx] vim /little/html/index.html
192.168.226.100
[xiaobai@nginx] nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[xiaobai@nginx] systemctl restart nginx
[xiaobai@nginx] ip a del dev ens33 192.168.226.100/24
#删除ip
3.3、基于端口
[xiaobai@nginx] mv /etc/nginx/conf.d/nginx.conf /etc/nginx/conf.d/nginx.conf.bak2
[xiaobai@nginx] vim /etc/nginx/conf.d/nginx.conf
server {
listen 80;
server_name web.xiaobai.com;
location / {
root /var/www/nginx/;
index index.html index.htm;
}
}
server {
listen 8080;
server_name www.little.com;
location / {
root /little/html/;
index index.html index.htm;
}
}
[xiaobai@nginx] vim /var/www/nginx/index.html
xiaobai
[xiaobai@nginx] vim /little/html/index.html
little
[xiaobai@nginx] nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[xiaobai@nginx] systemctl restart nginx
#之前已经解析过了,直接域名+端口访问就行
二、Nginx代理
1、代理简介
代理可分为正向代理和反向代理
反向代理产生的背景:
在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。
反向代理服务的实现:
需要有一个负载均衡设备(即反向代理服务器)来分发用户的请求,将用户请求分发到空闲的服务器上。服务器返回自己的服务到负载均衡。负载均衡设备将服务器的服务返回用户。
正向代理:
正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端。
反向代理:
反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;我们请求www.baidu.com时这www.baidu.com就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的请求分转发到真实提供服务的各台服务器。Nginx就是性
能非常好的反向代理服务器,用来做负载均衡。
反向代理中,proxy和server同属一个LAN
反向代理中代理的对象是服务端,proxy和server同属一个LAN,对client透明。
正向代理中代理的对象是客户端,proxy和client同属一个LAN,对server透明。
2、Nginx Proxy 配置
代理模块
ngx_http_proxy_module #代理模块
代理配置信息
#代理
Syntax: proxy_pass URL; #代理的后端服务器URL
Default: —
Context: location, if in location, limit_except
#头信息
Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host; #设置真实客户端地址
proxy_set_header Connection close;
Context: http, server, location
#超时
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s; #链接超时
Context: http, server, location
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
Syntax: proxy_send_timeout time; #nginx进程向fastcgi进程发送request的整个过程的超时时间
Default: proxy_send_timeout 60s;
Context: http, server, location
3、Nginx反向代理配置
配置nginx_server的配置
nginx_server的ip:192.168.202.128
已经编译安装好,检查nginx是否启动是否可以访问
cat /etc/nginx/conf.d/a.conf
server {
listen 80;
server_name localhost;
location / {
root /home/www/xiaobai;
index xiaobai.html;
}
} #nginx_server的配置信息
nginx -t #检查nginx配置文件
nginx -s reload #加载nginx配置文件
cat /home/www/xiaobai/xiaobai.html
你好!小白!
配置nginx_proxy的配置
nginx_proxy的ip:192.168.202.129
配置nginx的yum源直接yum安装
启动编辑nginx的配置文件(编辑之前,删除/注释掉之前的配置): vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.202.128:80;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
}
nginx -t #检查nginx配置文件
nginx -s reload #加载nginx配置文件
proxy_pass :真实服务器的地址,可以是ip也可以是域名和url地址
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP :启用客户端真实地址(否则日志中显示的是代理在访问网站)
proxy_set_header X-Forwarded-For:记录代理地址
proxy_connect_timeout:后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout:后端服务器数据回传时间就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout :nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收 到1个字节, 连接关闭。像长连接
以上就做好了反向代理
三、Nginx负载均衡
1、Nginx负载均衡简介
Nginx负载均衡有一个upstream的配置,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2种写法。
#upstream写在nginx的配置文件中,要在http模块之内
upstream xiaobai {
server 192.168.226.129:80;
server 192.168.226.130:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://xiaobai; #上面已经定义了upstream的名字叫xiaobai,这里可以直接写xiaobai
}
}
2、Nginx负载均衡算法
upstream 支持4种负载均衡调度算法:
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器。
- ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器可以保证来自同一ip的请求被打到固定的机器上,解决session问题。
- url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。
- fair:这是比上面两个更加智能的负载均衡算法,可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法必须下载Nginx的 upstream_fair模块。
2.1、热备
#热备
upstream xiaobai {
server 192.168.226.129:80;
server 192.168.226.130:80;
server 192.168.226.131:80 backup;
}
#这时只有两台服务器提供服务,分别是129和130,131做热备,如果129或130有一个宕机了,131会自动顶上
2.2、轮询
#轮询
upstream xiaobai {
server 192.168.226.129:80;
server 192.168.226.130:80;
}
#nginx默认就是轮询其权重都默认为1
#服务器处理顺序为129,130,129,130...
#加权轮询
upstream xiaobai {
server 192.168.226.129:80 weight=1;
server 192.168.226.130:80 weight=2;
}
#跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。
#服务器处理顺序为129,130,130,129,130,130...
2.3、IP哈希
#ip_hash
upstream xiaobai {
server 192.168.226.129:80;
server 192.168.226.130:80;
ip_hash;
}
#让相同的客户端访问第一次访问的服务器ip
2.4、拓展实例(基于七层及四层配置)
nginx负载均衡配置状态参数
- down,表示当前的server暂时不参与负载均衡。
- backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
- max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回错误。
- fail_timeout,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。
#还可以这样配置
upstream xiaobai {
server 192.168.226.129:80 weight=2 max_fails=2 fail_timeout=2;
server 192.168.226.130:80 weight=1 max_fails=2 fail_timeout=1;
}
2.4.1、七层负载均衡的配置
upstream xiaobai {
server 192.168.226.129:80 weight=2 max_fails=2 fail_timeout=2s;
server 192.168.226.130:80 weight=2 max_fails=2 fail_timeout=2s;
}
server {
listen 80;
server_name www.xiaobai.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
proxy_pass http://testweb;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#在自己的宿主机上做好解析
#在192.168.226.129机器和192.168.226.130机器上安装nginx并做如下配置
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
2.4.2、四层负载均衡的配置
nginx在1.9.0的时候,增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡。
stream {
upstream xiaobai {
server 192.168.226.129:80;
server 192.168.226.130:80;
}
server {
listen 80;
proxy_connect_timeout 10s;
proxy_timeout 30s;
proxy_pass myweb;
}
}