背景
公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。
但是慢慢的,使用我们平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。
于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。
我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。
Nginx的作用?
主要的作用就是反向代理和负载均衡,还可以实现动静分离
反向代理
正向代理
就是代理客户端的,比如我们不能访问外网,但是当我们给电脑上面的装VPN我们就可以可以访问的外网,例如我们访问我们先去访问香港的服务器,然后通过香港的服务器再去访问外网的服务器这就是正向代理。
反向代理
反向代理就是代理服务器端,比如我们都是通过www.baidu.com来访问百度,但是百度肯定不止一台服务器所以就有一台域名为www.baidu.com的服务器去代理所有的服务器,然后我们可以访问百度的资源,这就是反向代理。
负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,lp hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。
轮询
加权轮询
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题
动静分离
动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、 html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
安装Nginx
windows安装
网址:http://nginx.org/en/download.html
下载安装包解压即可,访问默认的80端口出现以下页面即成功。
在 linux(Ubuntu apt-get安装)下安装
使用sudo apt-get install nginx
命令进行安装
查看nginx是否安装成功nginx -v
输入service nginx start
启动nginx
然后输入localhost出现以下界面即成功
nginx文件安装完成之后的文件位置:
作用 | 路径 |
---|---|
主程序 | /usr/sbin/nginx |
存放配置文件 | /etc/nginx |
存放静态文件 | /usr/share/nginx |
存放日志 | /usr/share/nginx |
配置文件
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。
windows
linux
使用sudo nginx -t
就可以看到配置文件在哪里
然后在
① cd /etc/nginx
② vi nginx.conf
即可去修改配置文件
关闭nginx
如果使用cmd命令窗口启动nginx,关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx:
(1) nginx所在文件夹输入nginx命令nginx -s stop
(快速停止nginx)或nginx -s quit
(完整有序的停止nginx)(linux与windows一样)
(2) 使用taskkill:taskkill /f /t /im nginx.exe
- 1.
taskkill
是用来终止进程的, - 2.
/f
是强制终止 . - 3.
/t
终止指定的进程和任何由此启动的子进程。 - 4.
/im
示指定的进程名称﹒
Nginx常见命令(linux)
作用 | 命令 |
---|---|
查看状态 | sudo systemctl status nginx.service |
开启 nginx 服务 | sudo systemctl start nginx.service |
重启服务 | sudo systemctl restart nginx.service |
查看所有服务 | sudo systemctl list-units --type=service |
卸载nginx | apt-get --purge autoremove nginx |
重新加载配置文件(修改配置文件过后) | nginx -s reload |
查看nginx进程 | ps aux丨grep nginx |
如果连接不上检查端口是否开放