码迷,mamicode.com
首页 > 其他好文 > 详细

Nginx - 配置

时间:2016-06-03 19:37:43      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:

Nginx

标签 : nginx


Nginx

    nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, nginx served or proxied 25.64% busiest sites in April 2016. Here are some of the success stories: Netflix, Wordpress.com, FastMail.FM.
    The sources and documentation are distributed under the 2-clause BSD-like license.
    Commercial support is available from Nginx, Inc.

技术分享

Nginx是一款轻量级的Web服务器/反向代理服务器电子邮件(IMAP/POP3)代理服务器,由俄罗斯工程师Igor Sysoev开发,供俄国大型入口网站及搜索引擎Rambler使用.其源代码以BSD-like协议发布. 其特点是内存占用少,并发能力强, 因此被国内很多大型网站(如京东/淘宝)采用. 
(主页/介绍/文档).


编译安装

  • wget http://nginx.org/download/nginx-1.10.0.tar.gz
  • tar -zxvf nginx-1.10.0.tar.gz
  • ./configure --prefix=/usr/local/nginx

    configure阶段可能会遇到缺少依赖库的提示(如pcre/zlib),此时需要安装这些依赖才能继续:

    • yum install pcre pcre-devel
    • yum install zlib zlib-devel
  • make && make install 
    安装完成后可在/usr/local/nginx/目录下生成如下文件夹:

目录 描述
conf nginx配置文件
html 网页文件
logs nginx日志文件
sbin nginx可执行文件
  • /usr/local/nginx/sbin/nginx 
    启动, Nginx默认占用80端口,可在nginx.conf中更改.

Nginx信号

关于Linux信号相关知识, 可参考系列博客Linux信号实践, 在此, 我们仅介绍Nginx捕获的几个信号.

nginx can be controlled with signals.

  • Kill -信号名 PID
信号名 作用
TERM/INT fast shutdown
QUIT graceful shutdown
HUP changing configuration, keeping up with a changed time zone , starting new worker processes with a new configuration, graceful shutdown of old worker processes
USR1 re-opening log files
USR2 upgrading an executable file
WINCH graceful shutdown of worker processes

以上信号作用亦可通过编译出的nginx二进制文件实现:

To start nginx, run the executable file. Once nginx is started, it can be controlled by invoking the executable with the -s parameter. Use the following syntax: 
nginx -s signal


配置

  • nginx.config
<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#运行服务的用户及用户组 </span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#user  nobody;</span>

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#工作进程数(一般设置为CPU数*核心数)</span>
worker_processes  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#全局错误日志(位置/级别) </span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#error_log  logs/<span class="hljs-keyword" style="box-sizing: border-box;">error</span>.log;</span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#error_log  logs/<span class="hljs-keyword" style="box-sizing: border-box;">error</span>.log  notice;</span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#error_log  logs/<span class="hljs-keyword" style="box-sizing: border-box;">error</span>.log  info;</span>

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#PID文件</span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#pid        logs/nginx.pid;</span>

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#工作模式及连接数上限</span>
events {

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># 采用epoll进行IO复用</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># use epoll;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># 单进程所允许的最大连接数</span>
    worker_connections  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1024</span>;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#                  '$status $body_bytes_sent "$http_referer" '</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#                  '"$http_user_agent" "$http_x_forwarded_for"';</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#access_log  logs/access.log  main;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#是否激活sendfile()函数</span>
    sendfile        on;
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#将HTTP响应头压缩到一个包中发送,仅在sendfile开启时才能使用</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#tcp_nopush     on;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#keepalive_timeout  0;</span>
    keepalive_timeout  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">65</span>;

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#开启gzip模块</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#gzip  on;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#设定虚拟主机,默认监听80端口,可配置多个</span>
    server {
        listen       <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>;
        server_name  localhost;

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#charset koi8-r;</span>

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#access_log  logs/host.access.log  main;</span>

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># 页面存放位置</span>
        location / {
            <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># 页面存放根目录</span>
            root   html;
            <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># 默认页面</span>
            index  index.html index.htm;
        }

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#error_page  404              /404.html;</span>

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># redirect server <span class="hljs-keyword" style="box-sizing: border-box;">error</span> pages to the static page /50x.html</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#</span>
        error_page   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">500</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">502</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">503</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">504</span>  /<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">50</span>x.html;
        location = /<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">50</span>x.html {
            root   html;
        }

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># proxy the PHP scripts to Apache listening on 127.0.0.1:80</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#location ~ \.php$ {</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    proxy_pass   http://127.0.0.1;</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#}</span>

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#location ~ \.php$ {</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    root           html;</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    fastcgi_pass   127.0.0.1:9000;</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    fastcgi_index  index.php;</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    include        fastcgi_params;</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#}</span>

        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># deny access to .htaccess files, <span class="hljs-keyword" style="box-sizing: border-box;">if</span> Apache's document root</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># concurs with nginx's one</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#location ~ /\.ht {</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    deny  all;</span>
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#}</span>
    }


    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># another virtual host using mix of IP-, name-, and port-based configuration</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#server {</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    listen       8000;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    listen       somename:8080;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    server_name  somename  alias  another.alias;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    location / {</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#        root   html;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#        index  index.html index.htm;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    }</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#}</span>


    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># HTTPS server</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#server {</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    listen       443 ssl;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    server_name  localhost;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    ssl_certificate      cert.pem;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    ssl_certificate_key  cert.key;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    ssl_session_cache    shared:SSL:1m;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    ssl_session_timeout  5m;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    ssl_ciphers  HIGH:!aNULL:!MD5;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    ssl_prefer_server_ciphers  on;</span>

    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    location / {</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#        root   html;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#        index  index.html index.htm;</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#    }</span>
    <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#}</span>
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li></ul>

Server

在Nginx内可配置虚拟主机, 只需在nginx.conf中添加一个server元素:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">server {
    listen <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">801</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    server_name www<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.feiqing</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.me</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    location / {
        root   /www<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.feiqing</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.me</span>/<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
        index  index<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.html</span> index<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.htm</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    }
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

Log

  • 自定义log_format
<code class="hljs nginx has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">log_format</span>  fq_log_format   <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$remote_addr</span> - <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$remote_user</span> [<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$time_local</span>] "<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$request</span>" '</span>
        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$status</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$body_bytes_sent</span> "<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$http_referer</span>" '</span>
        <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$http_user_agent</span>" "<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$http_x_forwarded_for</span>"'</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
  • servlet内引用
<code class="hljs vbscript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">access_log logs/www.feiqing.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">me</span>.access.<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">log</span> fq_log_format;
   启用<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">log</span>       <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">log</span>位置                     <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">log</span>格式</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
  • 示例 
    www.feiqing.me server单独配置一个log:
<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">server {
    listen <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">801</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    access_log logs/www<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.feiqing</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.me</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.access</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.log</span> main<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    server_name www<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.feiqing</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.me</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    location / {
        root   /www<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.feiqing</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.me</span>/<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
        index  index<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.html</span> index<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.htm</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    }
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

Location

<code class="hljs r has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Syntax:     location [ = | ~ | ~* | ^~ ] uri { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span> }
location @name { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span> }
Default:    —
Context:    server, location</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

Sets configuration depending on a request URI. 
Nginx允许自定义location块,通过指定的模式客户端请求的URI相匹配,Nginx可将网站根据URI进行划分,将网站的不同部分定位到不同的处理方式上:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">server {
    server_name     www<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.feiqing</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.me</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>
    location /admin/ {
        <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># The configuration you place here only applies to http://www.feiqing.me/admin/</span>
    }
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
  • location修饰符 
    location第一个可选参数是一个符号,用来定义Nginx的匹配模式:
修饰符 描述
@ 指定一个命名的location,一般只用于内部重定向请求
= 精确匹配模式: URI的定位必须与指定的模式精确匹配
(无) 一般匹配模式: URI的定位必须以指定模式开始, 不可以使用正则表达式
~ 区分大小写的正则匹配模式: 客户端请求URI与指定正则表达式匹配必须区分大小写
~* 不区分大小写的正则匹配模式
^~ 类似于(无)模式的行为, URI的定位必须以指定模式开始, 不同的是, 如果模式匹配, 那么Nginx就停止搜索其他模式
!~/!~* 分别为区分大小写不匹配和不区分大小写不匹配的正则
/ 通用匹配, 任何请求都会匹配到
  • 有多个location配置情况下的匹配顺序:

    1. 带有=修饰符的location: 如果指定pattern与URI 精确匹配, 则Nginx使用该location设置.
    2. 没有修饰符的location: 如果指定pattern与URI 精确匹配,则使用之.
    3. 带有^~修饰符的location: 如果指定pattern与URI 开始匹配, 则使用之.
    4. 带有~/~*修饰符的location: 如果指定pattern与URI 匹配, 则使用之.
    5. 没有修饰符的location: 如果指定pattern与URI 开始匹配, 则使用之.
    6. 通用匹配/.
  • 示例:

<code class="hljs javascript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">location ~* ^<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/\w*admin\w*/</span> {
    root   /<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">var</span>/www/regexp/;
    index  index.html;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

关于location详细内容可参考Nginx-ngx_http_core_module模块文档.


Rewrite

Rewrite用于实现URI重写, URI重写可以让我们在改变网站结构时,无需修改原先暴露出去的URL, 并且在一定程度上提高网站安全性;

The ngx_http_rewrite_module module is used to change request URI using regular expressions, return redirects, and conditionally select configurations.

Nginx的Rewrite的实现依赖于PCRE(Perl Compatible Regular Expressions:Perl兼容正则表达式)库, 因此在编译Nginx前, 需要确保系统中已经包含该依赖.

注意: 正则表达式的元字符{}会与nginx.conf中block定界符{ ... }有冲突, 如果需要在nginx.conf内写一个包含花括号的正则表达式,需要将表达式放在单引号/双引号之间.

  • Rewrite指令执行顺序: 
    • 执行serverrewrite指令;
    • 执行location匹配;
    • 执行选定location中的rewrite指令;

如果其中某步URI被重写,则重新循环执行1-3步,直到找到真实存在的文件. 但循环次数不能超过10次, 否则Nginx返回500-Internal Server Error.


指令

if 指令

<code class="hljs r has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Syntax:     <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (condition) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span> }
Default:    —
Context:    server, location</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
  • The specified condition is evaluated. If true, this module directives specified inside the braces are executed, and the request is assigned the configuration inside the if directive. Configurations inside the if directives are inherited from the previous configuration level.

if条件可以是如下内容:

condition 描述
一个变量名 只有该变量是空字符串或者以0开始的字符串, 才为false
使用=/!= 比较一个变量和字符串
使用~/~* 变量与正则表达式进行匹配的变量
使用-f/!-f 检查一个文件是否存在
使用-d/!-d 检查一个目录是否存在
使用-e/!-e 检查一个文件、目录、符号链接是否存在
使用-x/!-x 检查一个文件是否可执行
  • 示例
<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">location ~* ^<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/\w*admin\w*/</span> {
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$request_method</span> = GET) {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">405</span>;
    }

    root   /var/www/regexp/;
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.html;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
  • 其他
<code class="hljs bash has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$http_user_agent</span> ~ MSIE) {
    rewrite ^(.*)$ /msie/<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;
}

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$http_cookie</span> ~* <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"id=([^;]+)(?:;|$)"</span>) {
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">set</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$id</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$1</span>;
}

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$request_method</span> = POST) {
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">405</span>;
}

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$slow</span>) {
    limit_rate <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>k;
}

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$invalid_referer</span>) {
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">403</span>;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>

break 指令

<code class="hljs http has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-attribute" style="box-sizing: border-box;">Syntax</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">    break;</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Default</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">   —</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Context</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">   server, location, if</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
  • Stops processing the current set of ngx_http_rewrite_module directives(停止执行当前虚拟主机的后续rewrite指令).

return 指令

<code class="hljs vbnet has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Syntax: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> code [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">text</span>];
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> code URL;
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> URL;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Default</span>:    —
Context:    server, location, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
  • Stops processing and returns the specified code to a client. The non-standard code 444 closes a connection without sending a response header(停止处理并返回指定状态码给客户端,非标准状态码444表示关闭连接且不给客户端发送响应头).

该指令用于直接向客户端返回响应状态码,从0.8.42版本起,return支持响应URL重定向(对于301/302/303/307),或者文本响应(对于其他状态码).

注意: 对于302/307, 返回的URL中应包含"http://"/"https://".对于文本或者URL重定向可以包含变量.

<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$http_user_agent</span> ~ Chrome) {
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">302</span> http:<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//www.baidu.com;</span>
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

set 指令

<code class="hljs http has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-attribute" style="box-sizing: border-box;">Syntax</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">    set $variable value;</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Default</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">   —</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Context</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">   server, location, if</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
  • Sets a value for the specified variable. The value can contain text, variables, and their combination.

rewrite 指令

<code class="hljs http has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-attribute" style="box-sizing: border-box;">Syntax</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">    rewrite regex replacement [flag];</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Default</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">   —</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Context</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">   server, location, if</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
  • If the specified regular expression matches a request URI, URI is changed as specified in the replacement string(如果一个URI匹配指定的正则表达式, URI就按照replacement形式重写). The rewrite directives are executed sequentially in order of their appearance in the configuration file. It is possible to terminate further processing of the directives using flags(rewrite按配置文件中出现的顺序执行, 但flags标志可以停止继续处理). If a replacement string starts with “http://” or “https://”, the processing stops and the redirect is returned to a client.

注意: 接收到的URI不包含host地址(如example.com), 也不包含URL中的请求参数(如?arg1=value1&arg2=value).


实例-伪静态化

使用Rewrite功能将JavaWeb中的动态URL(xx.do?arg1=xx&arg2=xx)以静态URL替换(xx-xx-xx.html).

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">server {
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">listen</span>       <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">800</span>;
        server_name  localhost;

        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#charset koi8-r;</span>

        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#access_log  logs/host.access.log  main;</span>

        location / {
            root   html;
            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>  <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.html <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.htm;
        }

        location ~* (<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/javis/teacher</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/).*(.html)$ {
        rewrite /javis</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/teacher/</span>(\w+)-(\w+)-(\w+)\.html /javis/teacher/<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$1</span>.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">do</span>?name=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$2</span>&password=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$3</span>;
        }

        location ~* \.(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">do</span>|jsp|jspx)?$ {
            proxy_set_header X-Forwarded-For <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$remote_addr</span>;
            proxy_pass http:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10.45</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">156.170</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>;
        }

    }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li></ul>

location ~* (/javis/teacher/).*(.html)$ { ... }会拦截所有/javis/teacher/ 目录下以.html结尾的静态URL,将其重写为.do结尾的动态URL(/javis/teacher/login-new_name-password.html -> /javis/teacher/login.do?name=new_name&password=password ), 然后location ~* \.(do|jsp|jspx)?$ { ... }提供反向代理功能,将所有以.do结尾的URL转发到http://10.45.156.170:80地址, 由Java的后端Server提供真正的服务(反向代理相关知识可参考我的下一篇Nginx博客).


Gzip

Gzip(GNU-ZIP)是一种压缩技术,经压缩后的页面可能只有原大小的30%,大大减小了网络传输开销,浏览器加载网页的速度也会提升不少,但这项技术需要浏览器的配合(在服务端对网页进行压缩, 在浏览器对其解压并解析),由于现代浏览都支持很多种解压缩的方式(如Chrome:Accept-Encoding:gzip, deflate, sdch), 因此浏览器方面不需要我们担心. 
Nginx的gzip模块是内置的, 由ngx_http_gzip_module 模块实现, 可在nginx.conf中配置使用:

The ngx_http_gzip_module module is a filter that compresses responses using the “gzip” method. This often helps to reduce the size of transmitted data by half or even more.


指令

Context: http, server, location, Gzip一共有9个指令可以设置:

指令 描述
gzip on | off; Enables or disables gzipping of responses.
gzip_buffers number size; Sets the number and size of buffers used to compress a response. By default, the buffer size is equal to one memory page. This is either 4K or 8K, depending on a platform.
gzip_comp_level level; Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9(推荐压缩级别为6).
gzip_disable regex ...; Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.
gzip_min_length length; Sets the minimum length of a response that will be gzipped. The length is determined only from the“Content-Length” response header field.
gzip_http_version 1.0 | 1.1; Sets the minimum HTTP version of a request required to compress a response(default 1.1).
gzip_types mime-type ...; Enables gzipping of responses for the specified MIME types in addition to “text/html”. The special value “*” matches any MIME type (0.8.29). Responses with the “text/html” type are always compressed.
gzip_vary on | off; Enables or disables inserting the “Vary: Accept-Encoding” response header field if the directives gzip, gzip_static, or gunzip are active.
gzip_proxied [flag]; Enables or disables gzipping of responses for proxied requests depending on the request and response. The fact that the request is proxied is determined by the presence of the “Via” request header field. The directive accepts multiple parameters -> details

实例-常用Gzip配置

<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">http {
    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">## ...</span>

    gzip  <span class="hljs-function_start" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">on</span></span>;
    gzip_min_length <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1024</span>;
    gzip_buffers <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>k;
    gzip_comp_level <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>;
    gzip_types <span class="hljs-type" style="box-sizing: border-box;">text</span>/plain <span class="hljs-type" style="box-sizing: border-box;">application</span>/x-javascript <span class="hljs-type" style="box-sizing: border-box;">application</span>/javascript <span class="hljs-type" style="box-sizing: border-box;">application</span>/xml <span class="hljs-type" style="box-sizing: border-box;">text</span>/css ;
    gzip_vary <span class="hljs-function_start" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">on</span></span>;

    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">## ...</span>
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>

为了使Nginx能够在全局范围内使用gzip,故将其放在http全局模块中.如果需要对各个虚拟主机区别对待,可在对应的server块中添加自己的gzip指令.

通过以上Nginx服务器访问一个网页(前提: Content-Length > 1024), 会看到静态资源文件的Response中新增了如下三个响应头:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-constant" style="box-sizing: border-box;">Content</span>-<span class="hljs-constant" style="box-sizing: border-box;">Encoding</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:gzip</span>
<span class="hljs-constant" style="box-sizing: border-box;">Transfer</span>-<span class="hljs-constant" style="box-sizing: border-box;">Encoding</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:chunked</span>
<span class="hljs-constant" style="box-sizing: border-box;">Vary</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:Accept-Encoding</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

注意: 
1. 由于图片/视频/音频之类文件压缩比率很小, 且压缩过程非常耗费CPU资源, 因此这类资源推荐不对其压缩. 
2. 较小的文件压缩后很有可能会比原文件还大, 因此这类资源也推荐不对其压缩.


Expires

对于网站图片,尤其是新闻网站,图片一旦发布,改动的可能非常小.因此我们希望用户在第一访问之后,图片直接缓存在浏览器,而不再向服务端发送请求(不同于HTTP-304-Not Modified), 且能够自定义缓存配置.这就用到了Nginx的expires功能.

<code class="hljs vbnet has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Syntax: expires [modified] time;
expires epoch | max | <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Default</span>:    
expires <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>;
Context:    http, server, location, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> location</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
  • Enables or disables adding or modifying the “Expires” and “Cache-Control” response header fields provided that the response code equals 200, 201, 204, 206, 301, 302, 303, 304, or 307. A parameter can be a positive or negative time. 
     注意: 要确保服务器时间准确,如果服务器时间落后于实际时间,可导致缓存失效.

实例-图片缓存

  • 配置图片缓存时间为一天:
<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">location ~* (jpg|png|jpeg|gif)<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>{
    expires <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>d;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

通过以上Nginx服务器访问一个图片(如nginx.png),会看到图片的Response中添加了如下两个响应头:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-constant" style="box-sizing: border-box;">Cache</span>-<span class="hljs-constant" style="box-sizing: border-box;">Control</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:max-age=</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">86400</span> 
<span class="hljs-constant" style="box-sizing: border-box;">Expires</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:Fri</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span> <span class="hljs-constant" style="box-sizing: border-box;">May</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2016</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">26</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11</span> <span class="hljs-constant" style="box-sizing: border-box;">GMT</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

再次刷新该URL, 在浏览器(如Chrome)中会看到这张图片来自本地缓存: 
技术分享


Nginx - 配置

标签:

原文地址:http://blog.csdn.net/yulei2008_/article/details/51566423

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!