一.什么是Nginx:
Nginx是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。
二.Nginx作用:
反向代理,集群,虚拟服务器,负载均衡,动静分离,解决跨域问题等
三.安装Nginx:
1.链接 https://nginx.org/en/download.html,如下
2.linux和windows版本下载完后解压(windows版本解压即可)
以linux为例,解压后得到
3.进入文件夹后可以看到目录
4.执行
./configure
5.如果出现错误如下,则
(1)安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
(2)安装PCRE,链接https://sourceforge.net/projects/pcre/files/pcre/
下载PRCE安装包并解压,例如下图
进入解压后的文件夹,找到configure并执行
cd prce-8.43.tar.gz
./configure
安装并查看prce版本
make && make install
pcre-config --version
6.再次进入nginx-1.14.2文件夹,执行
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.43
7.再执行make(注意上面那行代码,这里默认会去找/usr/local/src/ 下的prce-8.43文件夹),然后make install完成安装。
8.查看nginx版本(上面指定的目录)
/usr/local/webserver/nginx/sbin/nginx -v
例如
9.启动nginx,进入第6步中--prefix所指定的文件夹中,再进入sbin文价夹中,执行./nginx
(在nginx文件夹中重启是./nginx -s reopen)
10.查看nginx是否启动,例如
nginx默认端口是80,所以直接访问ip地址,例如下图所示,即可知nginx启动成功
四.使用Nginx
1.静态资源文件夹里的文件可以直接在外部访问,例如
2.实现反向代理(可以不暴露真实IP地址)
修改nginx.conf配置文件
注意:上面那个箭头指向的地址,必须在主机hosts文件中设置地址映射(域名解析),如下图
重新加载配置文件
./nginx -s reload
测试:
如果反向代理没有成功,可以查看log日志,找到并进入logs文件夹,输入
cat error.log
例如下图
如果发现正常启动成功,却没有成功配置反向代理。可以看看是否是自己修改了正确的配置文件(注意,nginx解压后的conf文件夹中有一个配置文件,而nginx启动目录下的文件夹中有一个nginx.conf配置文件,还有一个nginx.conf.default配置文件,可以试着将三个配置文件都修改试试,如果是按照上面安装步骤,应该是只修改的是/usr/local/webserver/nginx/conf中的nginx.conf)
3.实现集群(使用nginx实现负载均衡)
负载均衡算法:
轮询机制:在配置文件http中添加 (请求会轮流转发到129和130两个服务器的tomcat服务器)
upstream backserver { server 192.168.2.129:8080; server 192.168.2.130:8080; }
注意:proxy_pass指向的是backserver ,如http://backserver
权重(比例分配):
upstream backserver { server 192.168.2.129:8080 weight=10; //129访问10次,130访问一次 server 192.168.2.130:8080 weight=1; }
IP绑定:(随机绑定一个,而且绑定后一个ip地址就固定访问一个服务器了,可以解决session共享问题,可一旦该服务器挂了,会出现数据丢失)
upstream backserver { ip_hash; server 192.168.2.129:8080; server 192.168.2.130:8080; }
4.Nginx宕机容错机制
通过上述安装的Nginx默认是开启宕机容错机制的,比如说上面集群中server 192.168.2.129:8080挂掉,它会自动找130的服务器
如果想要添加宕机容错规则的话,可以在配置文件中的proxy_pass下面添加
proxy_connect_timeout 5; #最大连接时间 proxy_send_timeout 5; #最大发送时间 proxy_read_timeout 5; #最大读取时间