Loading... <h1 id="nginx专题-从编译安装到url重写" style="color: inherit;font-family: inherit;font-size: 2.6em;margin: 1.2em 0px 0.6em;line-height: 1.1">Nginx专题: 从编译安装到URL重写</h1> <ul class=" list-paddingleft-2"> <li> <p></p> </li> <ul class=" list-paddingleft-2"> <li> <p>前言</p> </li> <li> <p>环境介绍</p> </li> <li> <p>Nginx介绍</p> </li> <li> <p>编译安装Nginx</p> </li> <li> <p>配置文件解释</p> </li> <ul class=" list-paddingleft-2"> <li> <p>main和event{}的配置</p> </li> <li> <p>http{}的基本配置</p> </li> </ul> <li> <p>配置Nginx</p> </li> <ul class=" list-paddingleft-2"> <li> <p>搭建一个基本的Nginx Web服务器</p> </li> <li> <p>实现https</p> </li> <ul class=" list-paddingleft-2"> <li> <p>创建CA并签署Nginx证书</p> </li> <li> <p>修改配置文件</p> </li> <li> <p>测试https</p> </li> </ul> </ul> <li> <p>实现URL Rewrite将不同浏览器的请求响应不同页面</p> </li> <ul class=" list-paddingleft-2"> <li> <p>URL重写的相关配置选项</p> </li> <li> <p>分析日志查看相应用户代理的类型</p> </li> <li> <p>针对用户代理URL Rewrite</p> </li> </ul> <p></p> <li> <p>总结</p> </li> </ul> <ul class=" list-paddingleft-2" style="width: 1346.52px"></ul> </ul> <h2 id="前言" style="color: inherit;font-family: inherit;line-height: 1.1;margin: 1.2em 0px 0.6em;font-size: 2.15em">前言</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-size: 14px">本文主要实现使用</span><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">作为Web服务器, 并使用</span><code><span style="font-size: 14px">URL Rewrite</span></code><span style="font-size: 14px">实现将手机对Web站点的请求专门重写到一个专门为手机定制的Web页面中</span></p> </blockquote> <h2 id="环境介绍" style="color: inherit;font-family: inherit;line-height: 1.1;margin: 1.2em 0px 0.6em;font-size: 2.15em">环境介绍</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-size: 14px">笔者只有一台虚拟机, 桥接到室内的路由器便于手机进行访问, IP地址为192.168.1.103</span></p> </blockquote> <h2 id="nginx介绍" style="color: inherit;font-family: inherit;line-height: 1.1;margin: 1.2em 0px 0.6em;font-size: 2.15em">Nginx介绍</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><code><span style="font-size: 14px">engine x</span></code><span style="font-size: 14px">发音同</span><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">, 作者是</span><span style="font-size: 14px">Igor Sysoev</span><span style="font-size: 14px">,是目前世界上占有率第三的Web服务器软件. </span><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">是一款轻量级的Web服务器,可实现反向代理,</span><code><span style="font-size: 14px">URL rewrite</span></code><span style="font-size: 14px">等功能。</span><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">拥有消耗内存小、可支持高并发连接达5W个、还支持热部署、高性能的网络IO模型等特性。淘宝还基于</span><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">进行二次研发出</span><code><span style="font-size: 14px">Tengine</span></code></p> </blockquote> <h2 id="编译安装nginx" style="color: inherit;font-family: inherit;line-height: 1.1;margin: 1.2em 0px 0.6em;font-size: 2.15em">编译安装Nginx</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-size: 14px">需要安装</span><code><span style="font-size: 14px">Development Tools</span></code><span style="font-size: 14px">和</span><code><span style="font-size: 14px">Server Platform Development</span></code><span style="font-size: 14px">包组和</span><code><span style="font-size: 14px">zlib-devel, pcre-devel, openssl-devel</span></code><span style="font-size: 14px">等包</span></p> </blockquote> <pre class="prettyprint hljs-light"><code class="hljs cpp">[root@server1 ~]<span class="hljs-preprocessor"># yum groupinstall <span class="hljs-string" style="line-height: 1.6">"Development Tools"</span> <span class="hljs-string" style="line-height: 1.6">"Server Platform Development"</span> #安装包组</span><br />[root@server1 ~]<span class="hljs-preprocessor"># yum install pcre-devel openssl-devel zlib-devel -y #安装相应软件</span><br />[root@server1 ~]<span class="hljs-preprocessor"># tar xf nginx-<span class="hljs-number">1.6</span><span class="hljs-number">.1</span>.tar.gz -C /usr/src/ #解压nginx源码包到/usr/src/目录中</span><br />[root@server1 ~]<span class="hljs-preprocessor"># cd /usr/src/</span><br />[root@server1 src]<span class="hljs-preprocessor"># cd nginx-<span class="hljs-number">1.6</span><span class="hljs-number">.1</span>/</span><br />[root@server1 nginx-<span class="hljs-number">1.6</span><span class="hljs-number">.1</span>]<span class="hljs-preprocessor"># groupadd -r nginx #创建组</span><br />[root@server1 nginx-<span class="hljs-number">1.6</span><span class="hljs-number">.1</span>]<span class="hljs-preprocessor"># useradd -r -g nginx nginx #创建用户</span><br />[root@server1 nginx-<span class="hljs-number">1.6</span><span class="hljs-number">.1</span>]<span class="hljs-preprocessor"># ./configure --prefix=/usr/src/nginx --sbin-path=/sbin/ --conf-path=/etc/nginx/nginx.conf --with-http_ssl_module --user=nginx --group=nginx --with-http_gzip_static_module</span><br /> <span class="hljs-preprocessor">#关于编译选项的参数含义,请查阅官方文档</span><br />[root@server1 nginx-<span class="hljs-number">1.6</span><span class="hljs-number">.1</span>]<span class="hljs-preprocessor"># make && make install</span><br /></code></pre> <h2 id="配置文件解释" style="color: inherit;font-family: inherit;line-height: 1.1;margin: 1.2em 0px 0.6em;font-size: 2.15em">配置文件解释</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 1.1em;font-size: 1em;line-height: 1.6"><span style="font-size: 14px">关于</span><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">的一些工作原理我们这里不做解释,但是我们解释一下</span><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">的配置文件中常用选项的意思 <br /></span><code><span style="font-size: 14px">nginx的主配置文件是nginx.conf,配置文件的位置随着编译的配置选项而定,我们这里是/etc/nginx/nginx.conf文件</span></code></p> <p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><code><span style="font-size: 14px">Nginx</span></code><span style="font-size: 14px">作为web服务器时主配置文件一般分为三段, main和event{}, http{}、我们分别进行介绍</span></p> </blockquote> <h3 id="main和event的配置" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.7em">main和event{}的配置</h3> <pre class="prettyprint hljs-light"><code class="hljs applescript">运行相关的配置<br /> user User_Name [Group_name]; <span class="hljs-comment">#运行Nginx进程的用户和组. 默认为nobody</span><br /> error_log /path/<span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span>/error_log; <span class="hljs-comment">#是否启用错误日志,并指定错误日志的存放位置, 可指定为相对路径</span><br /> error_log /path/<span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span>/error_log notice; <span class="hljs-comment">#指定错误日志的记录的级别</span><br /> pid /path/<span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span>/pidfile; <span class="hljs-comment">#指定守护进程pid文件的位置 </span><br /><br />性能相关的配置<br /> worker_processes <span class="hljs-type" style="line-height: 1.6">number</span>; <span class="hljs-comment">#运行的worker进程的个数, 默认为1 </span><br /> worker_cpu_affinity cpumask ...; <span class="hljs-comment">#定义worker进程和cpu的绑定, 这里不做过多介绍, 不了解的可自行查找</span><br /> time_resolution interval ; 计数器的解析度,记录日志时时间的精确性<br /> worker_priority <span class="hljs-type" style="line-height: 1.6">number</span>; <span class="hljs-comment">#worker进程的优先级</span><br /><br />事件相关的配置<br /> accept_mutex <span class="hljs-function_start" style="line-height: 1.6"><span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">on</span></span>|off; <span class="hljs-comment">#master进程调度用户请求至worker进程的算法,轮询和随机. on表示轮询</span><br /> use [epoll|rtsing|select|poll]; <span class="hljs-comment">#指明使用的事件驱动模型</span><br /> worker_connections <span class="hljs-type" style="line-height: 1.6">number</span>; 指明一个worker进程能够接受的最大请求书<br /><br /></code></pre> <h3 id="http的基本配置" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.7em">http{}的基本配置</h3> <pre class="prettyprint hljs-light"><code class="hljs cpp"> <span class="hljs-number">1.</span> server{}: 定义一个虚拟主机<br /> 示例:<br /> server {<br /> listen <span class="hljs-number">80</span>;<br /> server_name www.anyisalin.com;<br /> root <span class="hljs-string">"/htdocs/www"</span><br /> }<br /> <span class="hljs-number">2.</span> listen<br /> 语法: listen address[:port];<br /> 示例:<br /> listen <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>:<span class="hljs-number">8000</span>;<br /> listen <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>;<br /> listen <span class="hljs-number">8000</span>;<br /> listen *:<span class="hljs-number">8000</span>;<br /> listen localhost:<span class="hljs-number">8000</span>; <br /> <span class="hljs-number">3.</span> server_name <br /> 语法: server_name name...;<br /> 支持通配符:<br /> 匹配顺序:<br /> <span class="hljs-number">1.</span> 精确匹配 <br /> <span class="hljs-number">2.</span> 从左向右匹配通配符 *.anyisalin.com<br /> <span class="hljs-number">3.</span> 从右向左匹配通配符 anyisalin.*<br /> <span class="hljs-number">4.</span> 匹配正则表达式 ~^*\.anyisalin\.com$<br /> <span class="hljs-number">5.</span> default_server <br /><br /> <span class="hljs-number">4.</span> root<br /> 语法: root path;<br /><br /> <span class="hljs-number">5.</span> location<br /> 语法: location [=] [~] [~*] [^~] URL {...}<br /> 功能:根据用户请求的URI来匹配定义的location<br /> =: 精确匹配检查<br /> ~: 正则表达式匹配<br /> ~*: 正则表达式匹配, 不区分大小写<br /> ^~: URI的前半部分匹配, 不支持正则表达式<br /><br /> 示例:<br /> server {<br /> listen <span class="hljs-number">80</span>;<br /> server_name www.anyisalin.com;<br /> location / {<br /> root <span class="hljs-string">"/htdocs/www"</span>;<br /> } <br /> location /imgs/ {<br /> root <span class="hljs-string">"/htdocs/imgs"</span><br /> }<br /> location ~* \.php$ {<br /> root <span class="hljs-string">"/htdocs/php"</span><br /> }<br /> }<br /><br /></code></pre> <h2 id="配置nginx" style="color: inherit;font-family: inherit;line-height: 1.1;margin: 1.2em 0px 0.6em;font-size: 2.15em">配置Nginx</h2> <h3 id="搭建一个基本的nginx-web服务器" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.7em">搭建一个基本的Nginx Web服务器</h3> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">编辑<code>Nginx</code>配置文件效果如下</strong></p> <pre class="prettyprint hljs-light"><code class="hljs nginx"> <span class="hljs-title" style="line-height: 1.6;font-weight: bold">server</span> {<br /> <span class="hljs-title" style="line-height: 1.6;font-weight: bold">listen</span> <span class="hljs-number">80</span>;<br /> <span class="hljs-title" style="line-height: 1.6;font-weight: bold">server_name</span> www.anyisalin.com;<br /><br /> <span class="hljs-title" style="line-height: 1.6;font-weight: bold">location</span> / {<br /> <span class="hljs-title" style="line-height: 1.6;font-weight: bold">root</span> /htdocs/html;<br /> <span class="hljs-title" style="line-height: 1.6;font-weight: bold">index</span> index.html index.htm;<br /> <span class="hljs-title" style="line-height: 1.6;font-weight: bold">error_page</span> <span class="hljs-number">404</span> =<span class="hljs-number">200</span> <span class="hljs-number">404</span>.html;<br /> }<br /> }<br /><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">创建对应网页文件</strong></p> <pre class="prettyprint hljs-light"><code class="hljs autoit">[root<span class="hljs-constant">@server1</span> /]<span class="hljs-preprocessor"># mkdir htdocs/html -pv #创建文件夹</span><br /> mkdir: created directory `htdocs<span class="hljs-string">'<br /> mkdir: created directory `htdocs/html'</span><br />[root<span class="hljs-constant">@server1</span> /]<span class="hljs-preprocessor"># cd htdocs/html/</span><br />[root<span class="hljs-constant">@server1</span> html]<span class="hljs-preprocessor"># echo <span class="hljs-string" style="line-height: 1.6">"<h1>www.anyisalin.com</h1>"</span> >> index.html #创建网页文件</span><br />[root<span class="hljs-constant">@server1</span> html]<span class="hljs-preprocessor"># echo <span class="hljs-string" style="line-height: 1.6">"Sorry, Page Not Found"</span> > 404.html #创建404页面</span><br />[root<span class="hljs-constant">@server1</span> html]<span class="hljs-preprocessor"># nginx -t #检查配置文件语法</span><br /> nginx: the configuration file /etc/nginx/nginx.conf syntax is ok<br /> nginx: configuration file /etc/nginx/nginx.conf test is successful<br />[root<span class="hljs-constant">@server1</span> html]<span class="hljs-preprocessor"># nginx #启动nginx</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><strong style="line-height: 1.6">测试页面访问正常</strong></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161141-61.png" title="1459754450249394.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161141-36.png" title="1459754456574251.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"></p> <h3 id="实现https" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.7em">实现https</h3> <h4 id="创建ca并签署nginx证书" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.25em">创建CA并签署Nginx证书</h4> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-size: 14px">这里对于openssl的操作不做解释, 有兴趣可以看我以前的文章: </span><span style="font-size: 14px">AnyISalIn的文章</span></p> </blockquote> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>创建私有CA并自签证书</code></p> <pre class="prettyprint hljs-light"><code class="hljs applescript">[root@server1 html]<span class="hljs-comment"># cd /etc/pki/CA</span><br />[root@server1 CA]<span class="hljs-comment"># (umask 077; openssl genrsa -out private/cakey.pem 2048)</span><br />[root@server1 CA]<span class="hljs-comment"># openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300</span><br /> You are <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">about</span> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span> be asked <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span> enter information <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">that</span> will be incorporated<br /> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">into</span> your certificate request.<br /> What you are <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">about</span> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span> enter <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">is</span> what <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">is</span> called a Distinguished Name <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">or</span> a DN.<br /> There are quite a few fields <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">but</span> you can leave <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">some</span> blank<br /> For <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">some</span> fields there will be a default value,<br /> If you enter '.', <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">the</span> field will be left blank.<br /> <span class="hljs-comment">-----</span><br /> Country Name (<span class="hljs-number">2</span> letter code) [XX]:CN<br /> State <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">or</span> Province Name (full <span class="hljs-property" style="line-height: 1.6">name</span>) []:AH<br /> Locality Name (eg, city) [Default City]:HF<br /> Organization Name (eg, company) [Default Company Ltd]:AnyISalIn LTD<br /> Organizational Unit Name (eg, section) []:ops<br /> Common Name (eg, your <span class="hljs-property" style="line-height: 1.6">name</span> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">or</span> your server's hostname) []:www.anyisalin.com<br /> Email Address []:webadmin.anyisalin.com<br /><br />[root@server1 CA]<span class="hljs-comment"># touch serial index.txt</span><br />[root@server1 CA]<span class="hljs-comment"># echo 01 > serial</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>创建nginx证书</code></p> <pre class="prettyprint hljs-light"><code class="hljs vbnet">[root@server1 CA]<span class="hljs-preprocessor"># cd /etc/nginx/</span><br />[root@server1 nginx]<span class="hljs-preprocessor"># mkdir ssl</span><br />[root@server1 nginx]<span class="hljs-preprocessor"># cd ssl/</span><br />[root@server1 ssl]<span class="hljs-preprocessor"># (umask 077; openssl genrsa -out nginx.key 1024)</span><br />Generating RSA <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">private</span> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">key</span>, <span class="hljs-number">1024</span> bit <span class="hljs-built_in" style="line-height: 1.6;font-weight: bold">long</span> modulus<br />..++++++<br />.............................................................................................++++++<br />e <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">is</span> <span class="hljs-number">65537</span> (<span class="hljs-number">0x10001</span>)<br />[root@server1 ssl]<span class="hljs-preprocessor"># openssl req -new -key nginx.key -out nginx.csr</span><br />You are about <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span> be asked <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span> enter information that will be incorporated<br /><span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">into</span> your certificate request.<br />What you are about <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span> enter <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">is</span> what <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">is</span> called a Distinguished Name <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">or</span> a DN.<br />There are quite a few fields but you can leave some blank<br /><span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">For</span> some fields there will be a <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">default</span> value,<br /><span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">If</span> you enter <span class="hljs-comment">'.', the field will be left blank.</span><br />-----<br />Country Name (<span class="hljs-number">2</span> letter code) [XX]:CN<br />State <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">or</span> Province Name (full name) []:AH<br />Locality Name (eg, city) [<span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">Default</span> City]:HF<br />Organization Name (eg, company) [<span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">Default</span> Company Ltd]:AnyISalIn LTD<br />Organizational Unit Name (eg, section) []:ops <br />Common Name (eg, your name <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">or</span> your server<span class="hljs-comment">'s hostname) []:www.anyisalin.com</span><br />Email Address []:webadmin.anyisalin.com<br /><br />Please enter the following <span class="hljs-comment">'extra' attributes</span><br /><span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">to</span> be sent <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">with</span> your certificate request<br />A challenge password []:<br />An <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">optional</span> company name []:<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>签署证书</code></p> <pre class="prettyprint hljs-light"><code class="hljs cpp">[root@server1 ssl]<span class="hljs-preprocessor"># openssl ca -in nginx.csr -out nginx.crt -days <span class="hljs-number">365</span></span><br />Using configuration from /etc/pki/tls/openssl.cnf<br />Check that the request matches the signature<br />Signature ok<br />Certificate Details:<br /> Serial Number: <span class="hljs-number">1</span> (<span class="hljs-number">0x1</span>)<br /> Validity<br /> Not Before: Apr <span class="hljs-number">4</span> <span class="hljs-number">13</span>:<span class="hljs-number">57</span>:<span class="hljs-number">02</span> <span class="hljs-number">2016</span> GMT<br /> Not After : Apr <span class="hljs-number">4</span> <span class="hljs-number">13</span>:<span class="hljs-number">57</span>:<span class="hljs-number">02</span> <span class="hljs-number">2017</span> GMT<br /> Subject:<br /> countryName = CN<br /> stateOrProvinceName = AH<br /> organizationName = AnyISalIn LTD<br /> organizationalUnitName = ops<br /> commonName = www.anyisalin.com<br /> emailAddress = webadmin.anyisalin.com<br /> X509v3 extensions:<br /> X509v3 Basic Constraints: <br /> CA:FALSE<br /> Netscape Comment: <br /> OpenSSL Generated Certificate<br /> X509v3 Subject Key Identifier: <br /> A3:<span class="hljs-number">68</span>:<span class="hljs-number">8</span>D:FD:<span class="hljs-number">49</span>:FD:<span class="hljs-number">08</span>:<span class="hljs-number">1</span>B:E3:<span class="hljs-number">09</span>:<span class="hljs-number">45</span>:<span class="hljs-number">9F</span>:<span class="hljs-number">3</span>B:<span class="hljs-number">48</span>:<span class="hljs-number">35</span>:<span class="hljs-number">1</span>E:<span class="hljs-number">0F</span>:<span class="hljs-number">38</span>:C4:<span class="hljs-number">92</span><br /> X509v3 Authority Key Identifier: <br /> keyid:<span class="hljs-number">26</span>:<span class="hljs-number">2</span>E:FE:F6:<span class="hljs-number">52</span>:<span class="hljs-number">41</span>:DC:<span class="hljs-number">2F</span>:C6:C1:<span class="hljs-number">4F</span>:<span class="hljs-number">19</span>:A0:BE:F6:<span class="hljs-number">14</span>:<span class="hljs-number">99</span>:<span class="hljs-number">93</span>:<span class="hljs-number">54</span>:<span class="hljs-number">4</span>B<br /><br />Certificate is to be certified until Apr <span class="hljs-number">4</span> <span class="hljs-number">13</span>:<span class="hljs-number">57</span>:<span class="hljs-number">02</span> <span class="hljs-number">2017</span> GMT (<span class="hljs-number">365</span> days)<br />Sign the certificate? [y/n]:y<br /><br /><br /><span class="hljs-number">1</span> out of <span class="hljs-number">1</span> certificate requests certified, commit? [y/n]y<br />Write out database with <span class="hljs-number">1</span> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">new</span> entries<br />Data Base Updated<br /><br /></code></pre> <h4 id="修改配置文件" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.25em">修改配置文件</h4> <pre class="prettyprint hljs-light"><code class="hljs dust"><span class="xml" style="line-height: 1.6"> server </span><span class="hljs-expression" style="line-height: 1.6">{<br /> <span class="hljs-variable" style="line-height: 1.6">listen</span> 443 <span class="hljs-variable" style="line-height: 1.6">ssl</span>;<br /> <span class="hljs-variable" style="line-height: 1.6">server</span>_<span class="hljs-variable" style="line-height: 1.6">name</span> <span class="hljs-variable" style="line-height: 1.6">www.anyisalin.com</span>;<br /> <span class="hljs-variable" style="line-height: 1.6">ssl</span>_<span class="hljs-variable" style="line-height: 1.6">certificate</span> <span class="hljs-end-block" style="line-height: 1.6">/etc</span><span class="hljs-end-block" style="line-height: 1.6">/nginx</span><span class="hljs-end-block" style="line-height: 1.6">/ssl</span><span class="hljs-end-block" style="line-height: 1.6">/nginx.crt</span>;<br /> <span class="hljs-variable" style="line-height: 1.6">ssl</span>_<span class="hljs-variable" style="line-height: 1.6">certificate</span>_<span class="hljs-variable" style="line-height: 1.6">key</span> <span class="hljs-end-block" style="line-height: 1.6">/etc</span><span class="hljs-end-block" style="line-height: 1.6">/nginx</span><span class="hljs-end-block" style="line-height: 1.6">/ssl</span><span class="hljs-end-block" style="line-height: 1.6">/nginx.key</span>;<br /><br /><br /> <span class="hljs-variable" style="line-height: 1.6">location</span> <span class="hljs-end-block" style="line-height: 1.6">/ </span>{<br /> <span class="hljs-variable" style="line-height: 1.6">root</span> <span class="hljs-end-block" style="line-height: 1.6">/htdocs</span><span class="hljs-end-block" style="line-height: 1.6">/html</span>;<br /> <span class="hljs-variable" style="line-height: 1.6">index</span> <span class="hljs-variable" style="line-height: 1.6">index.html</span> <span class="hljs-variable" style="line-height: 1.6">index.htm</span>;<br /> <span class="hljs-variable" style="line-height: 1.6">error</span>_<span class="hljs-variable" style="line-height: 1.6">page</span> 404 =200 404<span class="hljs-variable" style="line-height: 1.6">.html</span>;<br /> }</span><span class="xml" style="line-height: 1.6"><br /> }</span><br /></code></pre> <h4 id="测试https" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.25em">测试https</h4> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>重载服务进行测试</code></p> <pre class="prettyprint hljs-light"><code class="hljs applescript">[root@server1 ssl]<span class="hljs-comment"># nginx -t</span><br />nginx: <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">the</span> configuration <span class="hljs-type" style="line-height: 1.6">file</span> /etc/nginx/nginx.conf syntax <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">is</span> ok<br />nginx: configuration <span class="hljs-type" style="line-height: 1.6">file</span> /etc/nginx/nginx.conf test <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">is</span> successful<br />[root@server1 ssl]<span class="hljs-comment"># nginx -s reload</span><br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>未导入证书前</code></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161141-22.png" title="1459754467825548.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>导入证书后,因为chrome自身问题认为证书不可靠,但是已经成功</code></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161142-26.png" title="1459754472524748.png" alt="blob.png" /></p> <h3 id="实现url-rewrite将不同浏览器的请求响应不同页面" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.7em">实现URL Rewrite将不同浏览器的请求响应不同页面</h3> <h4 id="url重写的相关配置选项" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.25em">URL重写的相关配置选项</h4> <pre class="prettyprint hljs-light"><code class="hljs crystal"> 语法:rewrite regex replacement flag;<br /><br /> 例如:<br /> rewrite ^<span class="hljs-regexp">/images/</span>(.*\.jpg)<span class="hljs-variable" style="line-height: 1.6">$ </span> /img/abc/<span class="hljs-variable" style="line-height: 1.6">$1</span> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">break</span>;<br /><br /> 效果: <br /> <span class="hljs-symbol" style="line-height: 1.6">http:</span>/<span class="hljs-regexp">/www.anyisalin.com/images</span><span class="hljs-regexp">/1.jpg --> http:/</span><span class="hljs-regexp">/www.anyisalin.com/img</span><span class="hljs-regexp">/abc/</span><span class="hljs-number">1</span>.jpg<br /><br /> flag:<br /> <span class="hljs-symbol" style="line-height: 1.6">last:</span> 被重写完后不会继续匹配下面的rewrite规则, 由<span class="hljs-constant">User_agent</span>重新发起对新<span class="hljs-constant">URL</span>的请求, 但是会重新匹配rewrite规则<br /> <span class="hljs-keyword" style="line-height: 1.6;font-weight: bold">break</span>:被重写后不会继续匹配下面的rewrite规则, 由<span class="hljs-constant">User_agent</span>重新发起对新<span class="hljs-constant">URL</span>的请求, 但是不会继续匹配<br /> redirect:以<span class="hljs-number">302</span>(临时重定向)返回新的<span class="hljs-constant">URL</span><br /> permanent:以<span class="hljs-number">301</span>(永久重定向)返回新的<span class="hljs-constant">URL</span><br /></code></pre> <h4 id="分析日志查看相应用户代理的类型" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.25em">分析日志查看相应用户代理的类型</h4> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161142-16-1.png" title="1459754478173334.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161142-98.png" title="1459754484169968.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"></p> <h4 id="针对用户代理url-rewrite" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.25em">针对用户代理URL Rewrite</h4> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>修改location为如下配置</code></p> <pre class="prettyprint hljs-light"><code class="hljs xquery">location / {<br />root /htdocs/html;<br />index index.html index.htm;<br />error_page <span class="hljs-number">404</span> =<span class="hljs-number">200</span> <span class="hljs-number">404</span>.html;<br /><br /> if (<span class="hljs-variable" style="line-height: 1.6">$http</span>_user_agent ~* Android) { #匹配到User_Agent包含Android跳转到/Moblie中<br /> rewrite ^(.*)$ /Moblie/<span class="hljs-variable" style="line-height: 1.6">$1</span> break;<br /> }<br /><br /> if (<span class="hljs-variable" style="line-height: 1.6">$http</span>_user_agent ~* Chrome) { #匹配到User_Agent包含chrome跳转到/Chrome中<br /> rewrite ^(.*)$ /Chrome/<span class="hljs-variable" style="line-height: 1.6">$1</span> break;<br /> }<br /><br /> if (<span class="hljs-variable" style="line-height: 1.6">$http</span>_user_agent ~* MSIE) { #匹配到User_Agent包含MSIE跳转到/IE中<br /> rewrite ^(.*)$ /IE/<span class="hljs-variable" style="line-height: 1.6">$1</span> break;<br /> } <br /><br />}<br /></code></pre> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>创建对应的网页文件</code></p> <pre class="prettyprint hljs-light"><code class="hljs groovy">[root<span class="hljs-annotation">@server</span>1 <span class="hljs-regexp">/]# mkdir /</span>htdocs<span class="hljs-regexp">/html/</span>{Chrome,IE,Moblie}<br />[root<span class="hljs-annotation">@server</span>1 <span class="hljs-regexp">/]# echo "Welecom Moblie" > /</span>htdocs<span class="hljs-regexp">/html/</span>Moblie/index.html <br />[root<span class="hljs-annotation">@server</span>1 <span class="hljs-regexp">/]# echo "Welecom Chrome" > /</span>htdocs<span class="hljs-regexp">/html/</span>Chrome/index.html <br />[root<span class="hljs-annotation">@server</span>1 <span class="hljs-regexp">/]# echo "Welecom IE" > /</span>htdocs<span class="hljs-regexp">/html/</span>IE/index.html<br /></code></pre> <h4 id="测试" style="color: inherit;font-family: inherit;line-height: 1.6;margin: 1.2em 0px 0.6em;font-size: 1.25em">测试</h4> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>手机</code></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161142-24.png" title="1459754492221435.png" alt="blob.png" /></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><code>chrome</code></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161143-66.png" title="1459754503380698.png" alt="blob.png" /> <br /><code>IE</code></p> <p style="margin-top: 0px;margin-bottom: 1.1em;line-height: 1.6"><img src="//cto.wang/usr/uploads/2016/07/20160703161143-43.png" title="1459754514892593.png" alt="blob.png" /></p> <h2 id="总结" style="color: inherit;font-family: inherit;line-height: 1.1;margin: 1.2em 0px 0.6em;font-size: 2.15em">总结</h2> <blockquote><p style="margin-top: 0px;margin-bottom: 0px;font-size: 1em;line-height: 1.6"><span style="font-size: 14px">这次主要简单介绍了一下Nginx作为Web服务器的简单使用方法,和针对不同用户代理进行跳转,过几天我还会写Nginx作为代理服务器的相关文章,敬请期待! <br />作者:AnyISalIn QQ: 1449472454 <br />感谢:MageEdu</span></p> </blockquote> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信