上周在公司快下班的时候偶尔间听同事们聊起了Nginx,自己也有好长时间没有接触到了,Nginx在当下也是如火如荼,很多大型企业也是利用了Nginx集群来实现负载均衡,因本人目前的工作单位接手的是政府项目,所以在架构上面都是前辈们搭起来的SSM框架,在并发上貌似没看见什么处理。很多的博客都有关于Nginx的运用但是说法不一版本很多,不可否认Nginx在市场上还是比较常见的,废话不多说开始我们的配置。
一、有哪些知名企业运用了Nginx负载均衡技术
阿里巴巴都在用Nginx我想不用多说什么了。
二、 关于Nginx的意义
Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。也是由于其的特性,其应用非常广。
1 反向代理
1.1 概念
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
举个例子,比如我想访问 http://www.test.com/showTables,但www.test.com上并不存在showTables页面,于是他是偷偷从另外一台服务器上取回来,然后作为自己的内容返回用户,但用户并不知情。这里所提到的 www.test.com 这个域名对应的服务器就设置了反向代理功能。
2.1首先看一下正向代理
结论就是,反向代理服务器对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理服务器将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
传统的用户界面操作时,往往是用户将请求直接发送给了web服务器,服务器处理完用户请求反馈一个ModelAndView对象给用户,当我们配置了Ngxin代理服务器时候,此时的代理服务器将监听用户的端口(这些会配置在nginx.conf里,后面会有详细配置方法),用户的请求将直接发送到Nginx上,再由Nginx去发给服务器,这就是所谓的反向代理,到这里可能会有疑问,为什么用户去访问服务器不就行了为什么还要由一个Nginx去做代理?下图一目了然:
2.2当访问量庞大的时候,如:双11的淘宝,每天中午支付宝刷钱吃饭等等类似于大型的数据量向服务器访问的时候,对服务器而言是一个颤抖的处理过程
这个时候我们就可以配置一台或者多台服务器,利用Nginx的反向代理去向服务器发送请求,大大的去减缓了服务器的压力,可均匀的分配请求也可以对某一个服务器增大请求量,这就叫做:负载均衡。
三、搭建Nginx
由于是自己的demo,并且我也没有买服务器,就利用自己的笔记本完成简单的搭建步骤,实现方向代理,首先要到官网去下载ngxin版本,下载地址:http://nginx.org/
这就是他的下载主页面和别的网站不同的是基本上没有华丽呼哨的前端渲染只有实际功能,一大偏英文不要慌,Chrome搞定(右键翻译中文)
点击下载点击下载稳定版
下载完成以后会有如下的文件
四、启动Nginx
启动Nginx有两种方法可以利用点击启动项启动也可以用doc窗口下启动
在doc窗口下首先跳转路径
cd D:\software\nginx
start nginx : 启动nginx服务
进入nginx下面后
start nginx.exe
//nginx的一些doc命令
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确
会发现有个黑窗口一闪而过,点击查看当前进程是否成功启动了nginx服务
当存在于进程之中以后,首先测试访问Nginx自带的welcome页面。在地址栏输入"localhost:80"
当出现如上图的样子恭喜你第一步的启动成功,接下来才是最关键的一步----
五、配置主文件
最重要也是最核心的一步!就是配置Nginx.conf,找到conf文件夹下面的.conf文件
建议下载一个txt编辑文本软件,这样打开来里面的文本格式会凸显出来用传统的txt文档打开在一行或者很乱十分影响操作。我会写下详细的注释便于你们查看意义
配置server和location
六、与项目合并使用
以上是主要配置的介绍,下面讲解如何运用在实际项目中,因为我做的是demo,所以我打开自己的一个项目并部署tomcat
部署完tomcat以后启动项目,进行访问
可以看见当我在地址栏输入"localhost:8080"以后就直接访问了我的项目登录主页,接下来利用nginx反向代理来访问端口号为8080的主界面。将nginx.conf里面的server修改配置。
首先打开nginx服务,而后修改nginx里面的配置
一定要注意是先修改文件再启动,否则启动无效,修改完conf文件后一定要点击保存按钮,保存完毕以后,再启动ngxin服务,首先可以在doc窗口下看是否进程正在启动
cd 进入nginx 目录下,输入一下命令:
tasklist /fi "imagename eq nginx.exe"
若出现上面所述的进程说明之前你没有关闭,如果要关闭最好是去任务管理器里面进行关闭,将两个进程结束,而后重新启动,在地址栏输入Nginx监听的端口号
localhost:9090
点击回车
惊奇的发现,通过9090也可以访问到此地址栏,而并非改了项目部署的端口号,这就说明是利用了反向代理来访问到了,这也就是Nginx的工作所在。
七、.常见错误
如果启动失败 可以看下logs目录下 error.log 文件里的错误信息。
我在第一次安装的时遇到两个错误,也是最容易碰到的问题,在这里列出来方便大家碰到相同的问题时快速解决。
1.端口占用问题
我的配置文件里服务侦听的是 80 端口,由于机器上部署了IIS,80端口被默认站点占用,把站点关闭就可以了,这个问题在错误日志里记录是这样的。
2018/05/15 10:44:12 [emerg] 8800#5988: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
碰到类似的错误,请确认端口是否被占用或被防火墙屏蔽
2.Nginx所在目录有中文
错误日志大致输出一下内容
2018/05/15 11:55:55 [emerg] 5664#8528: CreateFile() “E:\软件\nginx-1.7.8/conf/nginx.conf” failed (1113: No mapping for the Unicode character exists in the target multi-byte code page)
- 启用缓存时报错
2018/05/15 17:26:50 [emerg] 17068#20356: shared zone “cache_one” has no equal addresses: 02CF0000 vs 02A20000
2018/05/15 17:26:50 [alert] 11536#11228: worker process 17068 exited with code 1
- 我一直没有找到解决的方法,有人说重启服务,或者缓存设置大一点就可以了,我试了一下没有用的,官网 原文是这样讲的,只能认为windwos下无解了。
-
The cache and other modules which require shared memory support do
-
not work in Windows Vista and later due to address space layout
-
randomization being enabled in these Windows versions.
4.缺少nginx.pid文件
nginx: [error] CreateFile() “E:\nginx\nginx-1.9.3/logs/nginx.pid” failed
nginx: [error] CreateFile() “E:\nginx\nginx-1.9.3/logs/nginx.pid” failed
nginx: [error] Open() “E:\nginx\nginx-1.9.3/logs/nginx.pid” failed
解决方法:
使用命令创建/logs/nginx.pid文件:
nginx -c conf/nginx.conf
5.bash: nginx: command not found
有可能是你再linux命令行环境下运行了windows命令,
如果你之前是允许 nginx -s reload报错, 试下 ./nginx -s reload
或者 用windows系统自带命令行工具运行
6.windows下nginx访问web目录提示403 Forbidden
在windows下 http服务器nginx时,访问web目录提示403 Forbidden,首先需要了解nginx出现403错误是什么意思:
403 Forbidden表示你在请求一个资源文件但是nginx不允许你查看,403 Forbidden 只是一个HTTP状态码,像404,200一样不是技术上的错误。
找到nginx.conf:
将user nobody 改为user root;重启ng,仍无效果。
后发现nginx默认是不支持浏览目录的。
找到 autoindex off 更改为on。 重启ng,正常访问。
另外Linux下,nginx.conf配置文件最上面的那个“# user nobody”要改成“user ftpuser”,不然访问可能会出现403错误
八、总结
今天利用周末好好复习复习也写下这篇文章为以后打下基础,也正好给自己一个小结。
前两天看到一个朋友圈是这么说的:
有人说工资多少不是关键,快乐最重要,教人不要太追名逐利
亿万富翁并不一定会快乐 普通老百姓却能活的开开心心
狮子的快乐超过猪 猪的快乐超过老鼠 狮子当久了可以选择当两天猪玩玩 猪当久了发现没得选 还是猪 所以当你没得选的时候那就不叫选择 那叫蝇营狗苟 浑浑噩噩 逆来顺受 苟且偷生
我们是接触社会的年轻人 做不到简单快乐,不具备父母口中清心寡欲 奔驰和夏利你会根本不用考虑的选择前者,所以做人不要去骗自己。
想拿高薪就要逆流而上而不是停留在程序员身份上麻木的积累代码量,所以在写这篇文章特此立下自己的flag,当前的薪水远远不够自己的要求,一年后的今天我要努力让工资翻一倍ヾ(◍°∇°◍)ノ゙。当然,自己并没有想过要把技术研究的多精湛,底层原理了解的多透彻。之前也有过深思熟虑,还是要朝业务方面多发展,所以一些并发线程什么的我们还是慢慢来了解吧!