nginx配置详解之location模块

       在前几篇博文中我提到过的 nginx除了是一款的web服务器外  nginx还是一个小型的反向代理服务器  我们可以使用nginx将一些静态文件 例如css js images 存储在客户端本地  下次请求的时候直接从本地读取 加快页面响应速度 又比如 我们可以用做分发匹配 将请求php文件的分发给A机器  将请求py文件的请求分给B机器

还有其他很多 在此就不一一详述 但上述功能都需要location模块的配合  下面我就来详细介绍下location模块

       nginx的location模块 用来做模式匹配   官方文档 REFER:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

       语法规则: location [=|~|~*|^~] /uri/ { … }

        = 开头表示精确匹配
        ^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
        ~ 开头表示区分大小写的正则匹配

        ~*开头表示不区分大小写的正则匹配
        !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
        / 通用匹配,任何请求都会匹配到。
       多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
       首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

下面我将介绍几个常用的用法及配置

1.禁止访问  比如我不允许访问项目下的  .htaccess文件 可以这样设置

location ~ /\.ht {
    deny all;
}

deny all表示拒绝所有请求


2.将请求php文件的指令 推送给php-fpm

location ~ \.php$ {
        root           /xxx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

location中是可以使用nginx内置变量的 详见 http://blog.csdn.net/zhangsheng_1992/article/details/51727031


3.将请求转发给node服务器

    upstream sample {
       server 127.0.0.1:9000;
    }

    server{
       listen 80;
       server_name www.xxx.com;
       location / {
           proxy_redirect off;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header Host $http_host;
           proxy_set_header X-NginX-Proxy true;
           proxy_set_header Connection "";
           proxy_http_version 1.1;
           proxy_pass http://sample;
       }
     }
 

请求www.xxx.com的所有请求 将被转发到9000端口


4.反向代理静态文件 gif jpg jpeg png bmp swf js css


    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)${
      #使用Web缓存区cache_one
      proxy_cache cache_one ;
      #对不同HTTP状态码缓存设置不同的缓存时间
      proxy_cache_valid 200 304 12h ;
      proxy_cache_valid 301 302 1m ;
      proxy_cache_valid any 1m ;
      #设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据"域名,URI,
      #参数"组合成Key
      proxy_cache_key $host$uri$is_args$args;
    }


之前我又一篇文章介绍了下squid反向代理的 对比对比有什么不同 http://blog.csdn.net/zhangsheng_1992/article/details/44979165


5.url重写 请求/123456/xxxx  变为 /xxxx?id=123456

location /{ 
rewrite ^(.*)/equip(d+).html$ $1/index.php?m=content&c=index&a=lists&catid=$2 last; 
} 
之后我会有一片文章专门介绍nginx的rewrite 敬请关注


6.设定查看Nginx状态的地址

location /NginxStatus {
    stub_status on;
    access_log on;
    auth_basic "NginxStatus";
    auth_basic_user_file conf/htpasswd;
}

7防盗链

location ~* \.(gif|jpg|png|swf|flv)$ {

  valid_referers none blocked www.xxx.com xxx.com ;
  if ($invalid_referer) {
    rewrite ^/ http://www.xxx.com/retrun.html;
    #return 403;
  }
} 

不是www.xxx.com发出的图片请求一律拒绝


除此之外 日志格式  消息头转发 也可以在location模块内配置  有兴趣的去看我之前的博文 此处就不介绍了

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值