这里是修真院前端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析前端知识/技能,本篇分享的是:
【Nginx反向代理和jetty服务器配置】
大家好,我是IT修真院深圳分院第01期学员,一枚正直纯洁善良的web程序员。
今天给大家分享一下,修真院官网JAVA(职业)任务3,深度思考中的知识点——Nginx反向代理。
1.介绍
Nginx是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
2.涉及
2.1 代理服务器
一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端。 一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源。 Web代理(proxy)服务器是网络的中间实体。 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。HTTP的代理服务器即是Web服务器又是Web客户端。
2.2 正向代理
是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
2.3 反向代理
在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。
两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。
2.4 为什么要用反向代理
便于服务器分布扩展。在实际中单个服务器处理客户端请求能力有一个极限,当请求量过大,则服务器忙不过来,因此使用多个服务器来共同分担用户的请求处理,这些服务器提供相同的服务,对于用户来说没有差别。那么就需要一个负载均衡设备来分发用户的请求到空闲的服务器上,然后服务器返回结果到负载均衡设备上,负载均衡再将其返回给用户。这样当增加/移除某台服务器时,只需要修改负载均衡的服务器列表,而不会影响服务。
安全。避免ip和端口直接暴露在internet,使主机免于被开采安全漏洞,代理服务器数量有限,安全防护更方便。
2.5 nginx反向代理配置
编辑nginx.conf文件:
a
上图是在服务器上解压安装nginx的tar包后,安装目录下的conf/nginx.conf文件,红色部分为自定义配置,其中log_format表示nginx日志格式配置,userformat是自定义的日志格式名,后面的是一些日志输出参数,从左到右依次表示:客户端地址,客户端名称,服务器本地时间,请求信息,请求状态码,主体内容大小,请求处理时间,响应延时,从哪一个地址跳转过来,请求代理,XXF头。任务3要求统计访问次数和响应延时,使用awk命令处理配置路径下的8081_access.log文件获取需要的信息。
server内容表示虚拟主机配置,可配置多个。内容依次为:端口,本地地址,日志配置(日志路径、格式),反向代理配置(location表示子域,proxy_pass表示代理的服务器地址),这里面需要注意的一点是:proxy_pass有的人需要在后面加“/”才能成功,而有的不需要也能成功,这一点我还没有搞清楚原因。
2.6 jetty服务器配置
接下来就是配置web服务器了,可以使用jetty、tomcat或resin安装配置,我用的是jetty,精巧方便。
下载jetty的tar.gz包在服务器上选择一个位置解压,我的位置是/opt/jetty,解压后进入目录,这个目录就是${jetty.home}目录(因为jetty建议${jetty.home}和${jetty.base}分离,便于配置管理和版本升级),找到start.jar包,另外新建一个目录,比如我的/opt/web/jettybase,这个目录作为${jetty.base},在此目录下运行${jetty.home}中找到的start.jar包,并加入可选的模块(比如:java -jar /opt/jetty/start.jar --add-to-start=deploy,http,logging-log4j,模块可在${jetty.home}下的modules文件夹中自行选择所需),然后ls命令查看目录下的文件,找到start.ini文件进行编辑,设定运行端口和项目目录,如下图:
b
c
如此,jetty就安装完成了,将项目代码打包后上传到${jetty.base}的webapps目录下,就可以运行了,启动jetty在${jetty.home}的bin文件夹下,运行jetty.sh,然后在浏览器输入服务器ip+端口号+项目包名,如果一切正常的话,就可以看到你的项目主页,输入服务器ip+nginx配置的端口号,也可以进入项目主页。
如果你嫌启动jetty太麻烦,可以将jetty配置为系统服务:
新建目录比如/opt/jetty/temp,运行以下命令:
cp /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/bin/jetty.sh /etc/init.d/jetty
echo "JETTY_HOME=/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT" > /etc/default/jetty
echo "JETTY_BASE=/opt/web/mybase" >> /etc/default/jetty
echo "TMPDIR=/opt/jetty/temp" >> /etc/default/jetty
然后运行service jetty status进行测试,如果正常的话,会出现以下内容:
Checking arguments to Jetty:
START_INI = /opt/web/mybase/start.ini
JETTY_HOME = /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT
JETTY_BASE = /opt/web/mybase
JETTY_CONF = /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/etc/jetty.conf
JETTY_PID = /var/run/jetty.pid
JETTY_START = /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/start.jar
JETTY_LOGS = /opt/web/mybase/logs
CLASSPATH =
JAVA = /usr/bin/java
JAVA_OPTIONS = -Djetty.state=/opt/web/mybase/jetty.state
........
我运行的时候报错:在默认路径下找不到java。原因是我服务器安装的jdk路径与jetty的默认寻找路径不一致,因此需要手动将java路径写入/etc/default/jetty:
d
再次运行,成功!
再次进入/opt/web/jettybase/目录,找到resource文件夹进入,有一个log4j.xml文件,这是jetty运行的日志配置文件,可以自行按需要配置,我的配置如下:
e
以上就是任务3服务器nginx和jetty配置的内容。
3.常见问题
实际使用
4.解决方案
5.编码实战
6.扩展思考
nginx优点
1)更快:单次请求得到响应更快,高峰情况下,比其他web服务器如Apache更快响应请求。这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。而在高并发服务器中,轮询I/O是非常耗时间的操作。
2)高扩展性,跨平台,高可靠性:nginx由多个不同功能、不同层次、不同类型且耦合度极低的模块组成,这些模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备极其优秀的性能,充分利用Nginx的高并发特性,因此,许多高流量的网站都倾向于开发符合自己业务特性的定制模块。
3)低内存消耗,高并发连接:一般情况下,10 000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,单机支持10万以上的并发连接。
4)热部署,BSD协议:master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。BSD许可协议允许用户免费使用Nginx,允许用户在自己的项目中直接使用或修改Nginx源码,然后发布,这吸引了无数开发者继续为Nginx贡献自己的智慧。
拥有无数个官方功能模块、第三方功能模块使得Nginx能够满足绝大部分应用场景,这些功能模块间可以叠加以实现更加强大、复杂的功能,有些模块还支持Nginx与Perl、Lua等脚本语言集成工作,大大提高了开发效率。
7.参考文献
Nginx是什么,有什么优点?为什么选择Nginx做web服务器软件?
8.更多讨论
安装nginx tar.gz包配置linux系统服务
鸣谢
感谢大家观看
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。