﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-业精于勤荒于嬉，行成于思毁于随-随笔分类-中间件相关问题积累</title><link>http://www.blogjava.net/produ/category/55039.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 18 May 2016 09:43:44 GMT</lastBuildDate><pubDate>Wed, 18 May 2016 09:43:44 GMT</pubDate><ttl>60</ttl><item><title>nginx：菜鸟手册</title><link>http://www.blogjava.net/produ/archive/2015/12/01/430580.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 01 Dec 2015 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/12/01/430580.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430580.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/12/01/430580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430580.html</trackback:ping><description><![CDATA[<div>以下讲记述的，是为nginx入门级新人和打算学习nginx的人而准备的。</div><div></div><div><br />首先，nginx（读作：engine x）是一个反向代理服务器。这里顺便阐述一下相关的概念，来帮助概念不清楚的朋友来获得最佳的学习体验。</div><div></div><div>服务器可以按照不同标准划分为很多种，那么这里讨论的就是其中的一种，代理服务器。代理服务器可以再次细分，分为正向代理服务器和反向代理服务器，这两者是相对于目标服务器而言的。当我们（O）希望访问某一台服务器（T，是具体的服务器），但是由于种种原因，我们不能去直接的访问T，但是我们可以直接访问另一台服务器（P），而P却可以访问T，那么正好，我们拜托P去访问T，将获得的信息返回给我们，这个过程中，我们始终知道要访问的那一台服务器，所以，这个代理过程称为正向代理；那么与之相对，如果我们知道要访问的站点，但是该站点可能同时部署在多个服务器上，不过最终我们获得了目标站点的内容，这个过程中，我们不知道具体访问过哪一台服务器，所以，这个代理过程称为反向代理。</div><div></div><div><br />那么nginx就是近些年来使用率不断攀升的代理服务器，你可以查看一下中间件的使用情况，这里给出一个调查，<a href="http://w3techs.com/technologies/cross/web_server/ranking" title="点我查看">点我查看</a><br /><br /><div>好了，我们开始吧。我不管你什么系统，但是我假定你已经安装好了nginx，排除那些系统上操作的差异，我们来感受一下最基本的操作。</div><div></div><div>nginx的<strong>启动</strong>，<strong>停止</strong>，<strong>重新加载配置文件</strong></div><div>在控制台中定位到nginx所在的目录，使用nginx -s signal操作nginx，signal可以是以下参数<br /><div><ul><li>stop &#8212; 立刻停止（不会等待当前工作结束）</li><li>quit &#8212; 延迟停止（会等待当前工作结束）</li><li>reload &#8212; 重新加载配置文件（会优先检查新配置文件的格式，通过校验则启用新配置，不通过则沿用旧配置）</li><li>reopen &#8212; 重新打开日志文件</li></ul></div><div>好了，知道了基本操作之后，我们就看一下配置文件，看懂了配置文件，我们就能让nginx按照我们的需要来运作。打开nginx.cnf文件</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#user&nbsp;&nbsp;nobody;<br />#我左边有个&#8220;#&#8221;号，这说明这一行都是注释<br />#下面的这个，看起来像一对键值对，这么理解也可以，官方给出的解释是&#8220;简单指令&#8221;<br />worker_processes&nbsp;&nbsp;1;<br /><br />#error_log&nbsp;&nbsp;logs/error.log;<br />#error_log&nbsp;&nbsp;logs/error.log&nbsp;&nbsp;notice;<br />#error_log&nbsp;&nbsp;logs/error.log&nbsp;&nbsp;info;<br /><br />#pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs/nginx.pid;<br /><br />#与简单指令相对，下面的event以及一对花括号，称作&#8220;块指令&#8221;；含有其他指令的&#8220;块指令&#8221;，我们称作&#8220;上下文&#8221;<br />#同时，我们把不被包含在任何其他上下文中的上下文称作主上下文<br />#所以，&#8220;events&#8221;和&#8220;http&#8221;就是主上下文，&#8220;server&#8221;和&#8220;location&#8221;就不是主上下文<br />events&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;worker_connections&nbsp;&nbsp;1024;<br />}<br /><br />http&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mime.types;<br />&nbsp;&nbsp;&nbsp;&nbsp;default_type&nbsp;&nbsp;application/octet-stream;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#log_format&nbsp;&nbsp;main&nbsp;&nbsp;'$remote_addr&nbsp;-&nbsp;$remote_user&nbsp;[$time_local]&nbsp;"$request"&nbsp;'<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$status&nbsp;$body_bytes_sent&nbsp;"$http_referer"&nbsp;'<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'"$http_user_agent"&nbsp;"$http_x_forwarded_for"';<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#access_log&nbsp;&nbsp;logs/access.log&nbsp;&nbsp;main;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;sendfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;<br />&nbsp;&nbsp;&nbsp;&nbsp;#tcp_nopush&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#keepalive_timeout&nbsp;&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;keepalive_timeout&nbsp;&nbsp;65;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#gzip&nbsp;&nbsp;on;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;#好了，我们需要配置一个服务器最基本的功能，给出请求相应结果<br />&nbsp;&nbsp;&nbsp;&nbsp;#看到下面这个server上下文，它看上去但是也的确是用来配制服务器的<br />&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这个server上下文监听的端口以及域名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;localhost;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#charset&nbsp;koi8-r;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#access_log&nbsp;&nbsp;logs/host.access.log&nbsp;&nbsp;main;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这里就是路由规则了，location加空格再加匹配项，这里的匹配项是&#8220;/&#8221;，也就是说所有以&#8220;/&#8221;开头的请求都符合这个路由规则<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#但是需要注意一点，nginx在匹配路由的时候有一个最长前缀匹配规则，看到下一个路由规则<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这里的root指的是响应资源所在的目录，这是指明，资源在nginx目录下的index目录里<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#index指令会响应指定的页面，按次序进行查找，找到了就返回<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;&nbsp;index.html&nbsp;index.htm;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这location的匹配项是&#8220;/demo&#8221;，那么当一个请求是&#8220;/demo/get&#8221;的时候，这个请求会匹配之前的&#8220;/&#8221;和这里的&#8220;/demo&#8221;，但是<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#nginx会选择前缀较长的匹配项来匹配，所以nginx会使用/demo路由的相应内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/demo&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这里又重新设定了root的值，表示用nginx目录demo目录下的资源响应<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果root在主上下文之外设定，那么相当于一个全局的设定，在其他上下文中没有被覆盖的话，则使用全局设定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;demo;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#截止到为目前的配置，nginx都是用来响应静态的资源，比如我们访问localhost/demo/show.html，那么nginx会返回nginx目录下<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#demo目录下show.html的内容，所以，我们经常会把nginx当做一个静态内容缓存来使用，来缓解后续服务器的响应压力<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#对于location来说，常用的还有正则匹配<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#静态资源配置，当然也可以来响应动态请求，不过这里有一点需要注意，当使用正则匹配时，如果请求匹配了当前的路由规则，那么<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#会以正则的匹配内容为主并返回，不会使用非正则的匹配项内容返回，以&#8220;~&#8221;开头，就表示匹配项是一个正则表达式，当然，还有其<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#他不同规则的前缀都表示正则，后续再展开<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;~&nbsp;.*\.(css|js)(.*)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;Host&nbsp;$host;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_cache_valid&nbsp;200&nbsp;302&nbsp;1h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_cache_valid&nbsp;301&nbsp;1d;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_cache_valid&nbsp;any&nbsp;1m;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires&nbsp;7d;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#对于代理服务器来说，最基本的功能代理是必不可少的，而且配置也非常简单<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#端口转发配置，做出如下配置之后，符合匹配项的请求会原封不动的转发到otherhost域名下<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/proxy{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;http://otherhost;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#下面的配置显而易见，是错误页面的配置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#error_page&nbsp;&nbsp;404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/404.html;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;redirect&nbsp;server&nbsp;error&nbsp;pages&nbsp;to&nbsp;the&nbsp;static&nbsp;page&nbsp;/50x.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_page&nbsp;&nbsp;&nbsp;500&nbsp;502&nbsp;503&nbsp;504&nbsp;&nbsp;/50x.html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;=&nbsp;/50x.html&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><div>有了这套最基本的配置，就可以试着开启nginx，感受一下它的功能</div></div></div><img src ="http://www.blogjava.net/produ/aggbug/430580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-12-01 17:32 <a href="http://www.blogjava.net/produ/archive/2015/12/01/430580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>