项目笔记-ssmtaotao商城-nginx配置_反向代理_负载均衡
什么是nginx
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定
应用场景
1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况
linux下安装nginx
环境要求
1、需要安装gcc的环境。yum install gcc-c++
2、第三方的开发包。
PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的**和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
安装步骤
第一步:把nginx的源码包上传到linux系统
第二步:解压缩
[[email protected] ~]# tar zxf nginx-1.8.0.tar.gz
第三步:使用configure命令创建一makeFile文件。
./configure
–prefix=/usr/local/nginx
–pid-path=/var/run/nginx/nginx.pid
–lock-path=/var/lock/nginx.lock
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–with-http_gzip_static_module
–http-client-body-temp-path=/var/temp/nginx/client
–http-proxy-temp-path=/var/temp/nginx/proxy
–http-fastcgi-temp-path=/var/temp/nginx/fastcgi
–http-uwsgi-temp-path=/var/temp/nginx/uwsgi
–http-scgi-temp-path=/var/temp/nginx/scgi
注意:启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
[[email protected] sbin]# mkdir /var/temp/nginx/client -p
第四步:make
第五步:make install
启动nginx及基本命令
进入sbin目录
[[email protected] sbin]# ./nginx
关闭nginx:
[[email protected] sbin]# ./nginx -s stop
推荐使用:
[[email protected] sbin]# ./nginx -s quit
重启nginx:
1、先关闭后启动。
2、刷新配置文件:
[[email protected] sbin]# ./nginx -s reload
** 注意关闭防火墙 **
使用nginx
1.配置虚拟主机
如何区分不同的网站:
1、域名不同
2、端口不同
Nginx的配置文件:
/usr/local/nginx/conf/nginx.conf 中
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
}
** 一个server节点就是一个虚拟主机 **
** root Html是nginx安装目录下的html目录(静态页面存放的位置,也可以使用绝对路径) **
配置多个虚拟主机
server {
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-81;
index index.html index.htm;
}
}
重新加载配置文件
[[email protected] nginx]# sbin/nginx -s reload
5.2. 通过域名区分虚拟主机
5.2.1. 什么是域名
域名就是网站。
www.baidu.com
www.taobao.com
www.jd.com
Tcp/ip
Dns服务器:把域名解析为ip地址。保存的就是域名和ip的映射关系。
一级域名:
Baidu.com
Taobao.com
Jd.com
二级域名:
www.baidu.com
Image.baidu.com
Item.baidu.com
三级域名:
1.Image.baidu.com
Aaa.image.baidu.com
一个域名对应一个ip地址,一个ip地址可以被多个域名绑定。
本地测试可以修改hosts文件。
修改window的hosts文件:(C:\Windows\System32\drivers\etc)
可以配置域名和ip的映射关系,如果hosts文件中配置了域名和ip的对应关系,不需要走dns服务器。
绑定多个域名
server {
listen 80;
server_name www.taobao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-taobao;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.baidu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-baidu;
index index.html index.htm;
}
}
域名的配置:
192.168.25.148 www.taobao.com
192.168.25.148 www.baidu.com
nginx反向代理
概念图:反向代理服务器不提供服务
** 搜狐 和新浪域名在本地hosts中被绑定到自己的IP了 **
nginx配置:
复制一个server节点,将root改成proxy_pass
配置upstream
upstream tomcat1 {
server 192.168.25.148:8080;
}
server {
listen 80;
server_name www.sina.com.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat1;
index index.html index.htm;
}
}
upstream tomcat2 {
server 192.168.25.148:8081;
}
server {
listen 80;
server_name www.sohu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcat2;
index index.html index.htm;
}
}
第四步:nginx重新加载配置文件
反向代理个人理解
用户通过域名访问我 -->nginx作为反向代理服务器接收到请求(多个域名都绑定到nginx服务器上)–>nginx通过配置的servername找到相应的代理路径转发请求–>用户实际获得的服务由具体的服务器提供(nginx不提供服务只转发请求)
负载均衡
如果由多个服务器同时提供一个服务 则将多个服务器同时添加到upstream中 并且可以根据具体服务器性能配置权重 权重越高则承受的压力越大. 默认权重都是1
upstream tomcat2 {
server 192.168.25.148:8081;
server 192.168.25.148:8082 weight=2;
}
负载均衡实现高可用
nginx并发量官方数据是5万 实际3到4万.nginx挂了的话整个系统都不能用了,所以需要配置主备.
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(VIP = Virtual IP Address,虚拟IP地址,该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的
两台主备机都安装keepalived
具体实现:参考安装手册.
易混淆点
在nginx配置那块,虚拟多个服务器是一台机器上模拟出多个服务器,配置多个端口(80和81)是为了体现端口不同,网站不同. 而实际中如果代做网站都想要80端口(因为浏览器访问默认80端口)而nginx可以配置共享80端口,通过域名(配置中体现为servername)和配置的root区分不同的网站(其实就是放在root配置的文件夹中的内容).
而反向代理那块,是指将所有的系统域名都绑定到nginx反向代理服务器ip上,实际提供服务的那一群服务器作为内网.反向代理服务器在转发到"内网".
文献
欢迎指正
参考资料:黑马 taotao商城第10天nginx