<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[将不同的HTTP User Agent请求转发到特定的后端服务器]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Mon, 28 May 2012 02:39:21 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	假设我这里有大量图像、CSS、javascript等静态文件，分别放在后端服务器&nbsp;&nbsp;192.168.1.5 和 192.168.1.6上，那么我如何利用nginx的反向代理功能将不同的 http_user_agent 请求发送到指定的服务器上呢？如 "Mozilla" 转发到 192.168.1.5 ，MSIE&nbsp;&nbsp;转发到 192.168.1.6 。<br/><br/>Nginx web 服务器支持if条件表达式，由此来跳转或者使用不同的配置变量。在本文中需要使用 $http_user_agent 变量，它标记了用户浏览器的类别，版本以及操作系统的一些信息，语法如下：<br/><br/><div class="code"><br/>if ( condition )&#123;<br/>&nbsp;&nbsp;do_something<br/>&#125;<br/>if ( $http_user_agent = &quot;wget&quot; )&#123;<br/>&nbsp;&nbsp; do_something<br/>&#125;<br/>if ( $http_user_agent ~ MSIE )&#123;<br/>&nbsp;&nbsp; return 403;<br/>&#125;<br/><br/></div><br/><br/>if指令会就检查后面表达式的值是否为真（true）,如果为真，则执行后面大括号中的内容。以下是一些条件表达式的比较方法：<br/>1、变量的完整比较可以使用=或!=操作符<br/>2、 部分匹配可以使用正则表达式来表示，~或~*<br/>3、~表示区分大小写<br/>4、~*表示不区分大小写（firefox与FireFox是一样的）<br/>5、!~与!~* 是取反操作，也就是不匹配的意思<br/>6、检查文件是否存在使用 -f 或 !-f 操作符<br/>7、检查目录是否存在使用-d或!-d操作符<br/>8、检查文件，目录或符号连接是否存在使用-e或!-e操作符<br/>9、检查文件是否可执行使用-x或!-x操作符<br/>10、正则表达式的部分匹配可以使用括号，匹配的部分在后面可以用$1~$9变量代替，这些和apache一致。<br/><br/>例子：<br/>编辑 /usr/local/nginx/conf/nginx.conf 文件<br/><br/><div class="code"><br/>#vi /usr/local/nginx/conf/nginx.conf<br/></div><br/><br/>设置upstream服务器:<br/><div class="code"><br/>upstream myproxybackend&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.1.1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.1.2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.1.3;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.1.4;<br/>&#125;<br/> <br/>upstream msiebackend&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.1.6;<br/>&#125;<br/> <br/>upstream mozillabackend&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.1.5;<br/>&#125;<br/></div><br/><br/>更新虚拟主机配置文件<br/><div class="code"><br/>server &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp;logs/access.log;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_log&nbsp;&nbsp; logs/error.log;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index.html;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;202.54.1.5:80 default;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/nginx/html;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name example.com www.example.com 0.example.com;<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp; ## PROXY - Web<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location / &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;&nbsp;http://myproxybackend;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($http_user_agent ~ MSIE ) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;&nbsp;http://msiebackend;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($http_user_agent ~ Mozilla ) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;&nbsp;http://mozillabackend;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;<br/># many more...<br/># many more...<br/>&#125;<br/></div><br/><br/>最后重启/重新载入nginx<br/><div class="code"><br/>#/usr/local/nginx/sbin/nginx -s reload<br/><br/></div><br/><br/>Tags - <a href="http://www.dzhope.com/tags/nginx/" rel="tag">nginx</a> , <a href="http://www.dzhope.com/tags/agent/" rel="tag">agent</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] 将不同的HTTP User Agent请求转发到特定的后端服务器]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>