nginx的全局变量

变量

说明

$args

请求中的参数,如www.123.com/1.php?a=1&b=2的$args就是a=1&b=2

$content_length

HTTP请求信息里的"Content-Length"

$conten_type

HTTP请求信息里的"Content-Type"

$document_root

nginx虚拟主机配置文件中的root参数对应的值

$document_uri

当前请求中不包含指令的URI,如www.123.com/1.php?a=1&b=2的$document_uri就是1.php,不包含后面的参数

$host

主机头,也就是域名

$http_user_agent

客户端的详细信息,也就是浏览器的标识,用curl -A可以指定

$http_cookie

客户端的cookie信息

$limit_rate

如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0

$remote_addr

客户端的公网ip

$remote_port

客户端的port

$remote_user

如果nginx有配置认证,该变量代表客户端认证的用户名

$request_body_file

做反向代理时发给后端服务器的本地资源的名称

$request_method

请求资源的方式,GET/PUT/DELETE等

$request_filename

当前请求的资源文件的路径名称,相当于是$document_root/$document_uri的组合

$request_uri

请求的链接,包括$document_uri和$args

$scheme

请求的协议,如ftp,http,https

$server_protocol

客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等

$server_addr

服务器IP地址

$server_name

服务器的主机名

$server_port

服务器的端口号

$uri

和$document_uri相同

$http_referer

客户端请求时的referer,通俗讲就是该请求是通过哪个链接跳过来的,用curl -e可以指定

rewrite实战

域名跳转(域名重定向)

  1. 示例1(不带条件的):
  2. server{
  3. listen 80;
  4. server_name www.aminglinux.com;
  5. rewrite /(.*) http://www.aming.com/$1 permanent;
  6. .......
  7. }
  8. 示例2(带条件的):
  9. server{
  10. listen 80;
  11. server_name www.aminglinux.com aminglinux.com;
  12. if ($host != 'www.aminglinux.com')
  13. {
  14. rewrite /(.*) http://www.aminglinux.com/$1 permanent;
  15. }
  16. .......
  17. }
  18. 示例3http跳转到https):
  19. server{
  20. listen 80;
  21. server_name www.aminglinux.com;
  22. rewrite /(.*) https://www.aminglinux.com/$1 permanent;
  23. .......
  24. }
  25. 示例4(域名访问二级目录)
  26. server{
  27. listen 80;
  28. server_name bbs.aminglinux.com;
  29. rewrite /(.*) http://www.aminglinux.com/bbs/$1 last;
  30. .......
  31. }
  32. 示例5(静态请求分离)
  33. server{
  34. listen 80;
  35. server_name www.aminglinux.com;
  36. location ~* ^.+.(jpg|jpeg|gif|css|png|js)$
  37. {
  38. rewrite /(.*) http://img.aminglinux.com/$1 permanent;
  39. }
  40. .......
  41. }
  42. 或者:
  43. server{
  44. listen 80;
  45. server_name www.aminglinux.com;
  46. if ( $uri ~* 'jpg|jpeg|gif|css|png|js$')
  47. {
  48. rewrite /(.*) http://img.aminglinux.com/$1 permanent;
  49. }
  50. .......
  51. }

防盗链

  1. 示例6
  2. server{
  3. listen 80;
  4. server_name www.aminglinux.com;
  5. location ~* ^.+.(jpg|jpeg|gif|css|png|js|rar|zip|flv)$
  6. {
  7. valid_referers none blocked server_names *.aminglinux.com aminglinux.com *.aming.com aming.com;
  8. if ($invalid_referer)
  9. {
  10. rewrite /(.*) http://img.aminglinux.com/images/forbidden.png;
  11. }
  12. }
  13. .......
  14. }
  15. 说明:*这里是通配,跟正则里面的*不是一个意思,none指的是referer不存在的情况(curl -e 测试),
  16. blocked指的是referer头部的值被防火墙或者代理服务器删除或者伪装的情况,
  17. 该情况下,referer头部的值不以http://或者https://开头(curl -e 后面跟的referer不以http://或者https://开头)。
  18. 或者:
  19. location ~* ^.+.(jpg|jpeg|gif|css|png|js|rar|zip|flv)$
  20. {
  21. valid_referers none blocked server_names *.aminglinux.com *.aming.com aminglinux.com aming.com;
  22. if ($invalid_referer)
  23. {
  24. return 403;
  25. }
  26. }

伪静态

  1. 示例7(discuz伪静态):
  2. location / {
  3. rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
  4. rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
  5. rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
  6. rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
  7. rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
  8. rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;
  9. }

rewrite多个条件的并且

示例8: location /{

       set $rule 0;

       if ($document_uri !~ '^/abc') {

         set $rule "${rule}1";

       }

       if ($http_user_agent ~* 'ie6|firefox') {

         set $rule "${rule}2";

       }

       if ($rule = "012") {

         rewrite /(.*) /abc/$1 redirect;

       }

     }

nginx的localtion配置

安装第三方模块echo-nginx-module

nginx location语法规则:location [=|~|~*|^~] /uri/ { … }
nginx的location匹配的变量是$uri

符号

说明

=

表示精确匹配

^~

表示uri以指定字符或字符串开头

~

表示区分大小写的正则匹配

~*

表示不区分大小写的正则匹配

/

通用匹配,任何请求都会匹配到

规则优先级

  1. = 高于 ^~ 高于 ~* 等于 ~ 高于 /

规则示例

  1. location = "/12.jpg" { ... }
  2. 如:
  3. www.aminglinux.com/12.jpg 匹配
  4. www.aminglinux.com/abc/12.jpg 不匹配
  5. location ^~ "/abc/" { ... }
  6. 如:
  7. www.aminglinux.com/abc/123.html 匹配
  8. www.aminglinux.com/a/abc/123.jpg 不匹配
  9. location ~ "png" { ... }
  10. 如:
  11. www.aminglinux.com/aaa/bbb/ccc/123.png 匹配
  12. www.aminglinux.com/aaa/png/123.html 匹配
  13. location ~* "png" { ... }
  14. 如:
  15. www.aminglinux.com/aaa/bbb/ccc/123.PNG 匹配
  16. www.aminglinux.com/aaa/png/123.html 匹配
  17. location /admin/ { ... }
  18. 如:
  19. www.aminglinux.com/admin/aaa/1.php 匹配
  20. www.aminglinux.com/123/admin/1.php 不匹配

小常识

有些资料上介绍location支持不匹配 !~,

如: location !~ 'png'{ ... }

这是错误的,location不支持 !~

如果有这样的需求,可以通过if来实现,

如: if ($uri !~ 'png') { ... }

注意:location优先级小于if

nginx第五天的更多相关文章

  1. zabbix 与 nginx (五)

    zabbix监控nginx的大概流程为:   1:被监控端的nginx开启stub_status模块 2:通过脚本的方式获取nginx的状态值 3:修改被监控端的配置文件,Userparameter= ...

  2. LINUX测试环境部署nginx(五)

    安装配置nginx 安装编译环境:yum -y install pcre-devel openssl openssl-devel 拷贝nginx压缩文件到目标目录后,解压tar -zxvf nginx ...

  3. nginx(五)nginx与php的安装配置

    经过前面学习,对nginx有个大概的了解,来配置LNMP;只要是在系统安装过程中选择安装比较齐全的包,基本上系统都能满足安装要求,下面是我一个一个测试的,基本上全部安装所需的库文件,放心安装: [ro ...

  4. nginx的五种负载算法模式

    nginx 负载均衡5种配置方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight  指定轮询几率,weight和访问比率成正比 ...

  5. 我眼中的 Nginx(五):Nginx — 子请求设计之道

    张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的 ...

  6. nginx实践(五)之代理服务(正向代理与反向代理介绍)

    正向代理 正向代理代理是为客户端服务,代理负责DNS解析域名到对应ip,并进行访问服务端,返回响应给客户端 反向代理 客户端自己负责请求DNS解析域名到对应ip,服务端通过代理分发流量,进行负载均衡 ...

  7. nginx介绍(五) - 高可用

    前言 即便想 nginx 这么牛B的服务器, 也不能保证他不挂啊, 就算不是机器出故障, 比如, 停电了, 那么机器挂了, 很正常啊. 这时候, 没有分发服务器, 网站就不能正常访问了, 咋搞? 网站 ...

  8. Nginx(五)-- 配置文件之Rewrite

    Rewrite支持URL重写 1.常用指令以及语法 1) if指令    if语法: if 空格 (condition) {}     条件:     1. “=” 来判断相等,用于字符的比较     ...

  9. zabbix日常监控项nginx(五)

    1.开启nginx监控 2.编写脚本来进行数据采集 3.设置用户自定义参数 4.重启zabbix-agent 5.添加item.创建图形.创建触发器 6.创建模板 注:第一次使用可以按需求制定好模板, ...

  10. nginx实战五

    nginx用户认证 https://coding.net/u/aminglinux/p/nginx/git/blob/master/access/auth.md 当访问一些私密资源时,最好配置用户认证 ...

随机推荐

  1. C#编程 XML文档

    XML 指可扩展标记语言,XML 被设计用来传输和存储数据.XML 被设计用来结构化.存储以及传输信息. xml文档展示 <?xml version="1.0" encodi ...

  2. python高级 之(零) --- 重点难点

    生成式子 列表生成式 字典生成式 深浅拷贝 list0 = [12,24,34,32,[64,23]] # 浅拷贝:浅拷贝只是将最外层容器拷贝一份放在堆里面,内层的容器不会被拷贝还是使用原来的地址 l ...

  3. 简单nginx代理配置

    nginx.conf: # For more information on configuration, see:# * Official English Documentation: http:// ...

  4. Centos 安装Pycharm 并移动到桌面。

    版权声明:版权所有.未经同意不得转发,装载 https://blog.csdn.net/limingyue0312/article/details/81805826 1.下载pycharm软件包 网页 ...

  5. Intel Driver and Support Assistant 安装失败

    Intel Driver and Support Assistant 以下简称 Intel DSA. Intel DSA 依赖 Microsoft Visual C++ 2015-2019 Redis ...

  6. python中迭代器和生成器的详细解释

    https://www.cnblogs.com/wilber2013/p/4652531.html

  7. python_线程读写操作<一>

    线程读写操作 import threading,random,queue q = queue.Queue() alist=[] def shengchan(): for i in range(10): ...

  8. 手写一个python迭代器

    分析 我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器. 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法. 在一个类的实例对象想要变成迭代器,就 ...

  9. spark教程(六)-Python 编程与 spark-submit 命令

    hadoop 是 java 开发的,原生支持 java:spark 是 scala 开发的,原生支持 scala: spark 还支持 java.python.R,本文只介绍 python spark ...

  10. js注册实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...