Nginx
Nginx是一个http服务器。是一个使用c语言开发的高性能的http服务器及反向代理服务器。Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
1、 http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2、 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
*基于端口的,不同的端口a
*基于域名的,不同域名
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
1安装nginx
下载
下载地址:
安装
2.1 先安装nginx依赖的包
gcc:
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
yum install gcc-c++ //安装
如果出现 yum install gcc-c++ : command not found
先 yum -y update gcc
再 yum -y install gcc+ gcc-c++
PCRE:
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel //安装
如果 yum install -y pcre pcre-devel 报错
查看pcre包是否重复: rpm -qa | grep pcre
如果有重复的删除一个即可
# rpm -qa | grep pcre
pcre-8.32-15.el7_2.1.i686
pcre-8.32-15.el7_2.1.x86_64
# yum remove pcre-8.32-15.el7_2.1.i686
zlib:
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel //安装
如果 yum install -y zlib zlib-devel报错 //查看是否有重复的,删除一个即可
# rpm -qa | grep zlib // 查看是否重复
zlib-1.2.7-15.el7.i686
zlib-1.2.7-15.el7.x86_64
yum remove zlib-1.2.7-15.el7.i686 // 删除一个
openssl:
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel //安装
2.2 把nginx的源码上传到linux/root/software系统,并解压
#把解压nginx-1.16.1.tar.gz包
tar -zxvf nginx-1.16.1.tar.gz
#修改文件夹的名字
mv nginx-1.16.1 nginx
#把nginx拷贝到/usr/local/src里面
cp -r nginx /usr/local/src
2.3 完成上述,进入nginx文件夹
cd /usr/local/src/nginx
#在/usr下创建nginx目录
① mkdir /usr/nginx //创建文件夹目录
②./configure --prefix=/usr/nginx (指定安装目录编译)
③ make编译 :make
④编译安装 :make install
nginx目录说明:
conf 配置目录
html静态文件[cdn加速]
logs日志目录
sbin执行文件
2 nginx启动停止
1、启动:
进入nginx的sbin目录,./nginx就可以启动。如果访问不到,首先查看防火墙是否关闭。
2、关闭nginx
可以使用kill命令,但是不推荐使用。推荐使用:./nginx -s stop
3、刷新配置重启:
./nginx -s reload
3 配置详解
在/usr/nginx/conf目录下nginx.conf文件是nginx的配置文件。
1-端口和目录的配置
在nginx.conf文件中添加一个server节点,修改端口号就可以【自行添加。不影响原来的】
也就是一个nginx里面可以跑多个端口的项目,这个是tomcat是有本质的区别的
一个tomcat只能对应一个端口的多个项目服务
一个nginx可以对应多个端口下面的多个项目服务
2-注意点
一个tomcat里面一个端口可以使用多个项目
一个nginx里面可以使用多个端口,多个端口里面可以对应多个服务
如果一个nginx里面的server配置的端口相同,后面相同端口的配置会被忽略
3-通过域名虚拟机:
编辑nginx.conf 配置文件:
添加一个的操作范例:
在nginx主目录创建test/index.html
每次更新后,需要刷新配置:./nginx -s reload
修改客户端的host的配置
C:\Windows\System32\drivers\etc
正向代理
拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的~
正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,科学上网工具 Shadowsocks 扮演的就是典型的正向代理角色。
比如我想访问www.google.com,要想翻越这堵墙,你可以在国外用Shadowsocks来搭建一台代理服务器,代理帮我们请求www.google.com,代理再把请求响应结果再返回给我。
反向代理
还用借钱的例子,A想向C借钱,然后C借给他了,但是实际上这个钱可能C向B借的~至于钱到底是谁的,A是不知道的~
这里的C扮演着一个反向代理的角色,客户不知道真正提供服务的人是谁。
反向代理隐藏了真实的服务端,当我们访问www.baidu.com的时候,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了。www.baidu.com就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到提供真实服务的服务器那里去。Nginx就是性能非常好的反向代理服务器,它可以用来做负载均衡。
负载均衡
访问量越来越大,如何将压力分散到不同的机器上。
怎样将同一个域名的访问分散到两台或更多的机器上呢?这其实就是另一种负载均衡了,nginx自身就可以做到,只需要做个简单的配置就行。
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
2)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)
配置nginx里面的负载均衡[轮询的配置]
刷新nginx的配置 :./sbin/nginx -s reload
修改客户端主机的host
C:\Windows\System32\drivers\etc
配置nginx里面的负载均衡[weight权重的配置]
nginx.conf的配置
配置nginx里面的负载均衡[其它配置]
max_fails=2 fail_timeout=10s
max_fails 最大失败次数
fail_timeout 失败超时时间
刷新nginx的配置 :./sbin/nginx -s reload
配置nginx里面的负载均衡[ip_hash的配置]
现在有三个tomcat打开页面请求结果
此时看上去只是请求的tomcat1 但是一个登录过程 包含三次请求
所以最后重定向时不在登陆的tomcat里面。所有又返回到登陆页面
最后再刷新nginx配置。只会路由到某一个tomcat了。解决session共享的问题