Nginx高级配置-变量使用

              Nginx高级配置-变量使用

                                       作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

   nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用,变量可以分为内置变量和自定义变量,内置变量是由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的值。

 

一.查看Nginx的内置变量

1>.如下图所示,访问nginx的官网,并点击"documentation"

2>.在官方文档中找到模块相关,点击"Alphabetical index of variables"

 

3>.查看官网的变量,如下图所示,以"$"开头的变量都是内置变量

4>.常用的内置变量

$remote_addr;
  存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP。

$args;
  #变量中存放了URL中的指令,例如http://node101.yinzhengjie.org.cn/main/index.do?id=20190221&partner=search中的id=20190221&partner=search

$document_root;
  保存了针对当前资源的请求的系统根目录,如/apps/nginx/html。


$document_uri;
  保存了当前请求中不包含指令的URI,注意是不包含请求的指令,比如http://node101.yinzhengjie.org.cn/main/index.do?id=20190221&partner=search会被定义为/main/index.do。

$host;
  存放了请求的host名称。

$http_user_agent;
  客户端浏览器的详细信息

$http_cookie;
  客户端的cookie信息。

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

$remote_port;
  客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口。

$remote_user;
  已经经过Auth Basic Module验证的用户名。

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

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


$request_filename;
  当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径,如/apps/nginx/html/main/index.html

$request_uri;
  包含请求参数的原始URI,不包含主机名,如:/main/index.do?id=20190221&partner=search 。

$scheme;
  请求的协议,如ftp,https,http等。

$server_protocol;
  保存了客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等。

$server_addr;
  保存了服务器的IP地址。

$server_name;
  请求的服务器的主机名。

$server_port;
  请求的服务器的端口号。

5>.在服务端打印nginx内置变量并返回给客户端

[root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf.d/share.conf 
server {
    listen 80;
    server_name node101.yinzhengjie.org.cn;

    location / {
        root /yinzhengjie/data/web/nginx/static;
        index index.html;
    }

    location /nginx_status {
        stub_status;
        allow 172.30.1.108;
    deny all;
    }

    location /main {
    index index.html;
    default_type text/html;
        echo "remote_addr = $remote_addr";
        echo "******";
        echo "args = $args";
        echo "******";
        echo "document_root = $document_root";
        echo "******";
        echo "document_uri = $document_uri";
        echo "******";
        echo "host = $host";
        echo "******";
        echo "http_user_agent = $http_user_agent";
        echo "******";
        echo "http_cookie = $http_cookie"
        echo "******";
        limit_rate 10240;
        echo "limit_rate = $limit_rate";
        echo "******";
        echo "remote_prot = $remote_port";
        echo "******";
        echo "remote_user = $remote_user";
        echo "******";
        echo "request_body_file = $request_body_file";
        echo "******";
        echo "request_method = $request_method";
        echo "******";
        echo "request_filename = $request_filename";
        echo "******";
        echo "request_uri = $request_uri";
        echo "******";
        echo "scheme = $scheme";
        echo "******";
        echo "server_protocol = $server_protocol";
        echo "******";
        echo "server_addr = $server_addr";
        echo "******";
        echo "server_name = $server_name";
        echo "******";
        echo "server_port = $server_port";
        echo "******";
    }

}
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# nginx -t
nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# nginx -s reload
[root@node101.yinzhengjie.org.cn ~]# 

 

 

二.自定义Nginx的变量

1>.查看nginx的主配置文件

[root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf/nginx.conf
worker_processes  4;
worker_cpu_affinity 00000001 00000010 00000100 00001000; 

events {
    worker_connections  100000;
    use epoll;
    accept_mutex on;
    multi_accept on; 
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    gzip  on;
    charset utf-8;

    #最大缓存10000个文件,非活动数据超时时长60s
    open_file_cache max=10000 inactive=60s;
    #每间隔60s检查一下缓存数据有效性
    open_file_cache_valid 60s;
    #60秒内至少被命中访问5次才被标记为活动数据
    open_file_cache_min_uses 5;
    #缓存错误信息
    open_file_cache_errors on;

    #隐藏Nginx server版本。
    server_tokens off;

    #当文件大于等于给定大小时,同步(直接)写磁盘,而非写缓存。
    directio 4m;

    #上传文件相关参数
    client_max_body_size 10m;
    client_body_buffer_size 16k;
    client_body_temp_path /yinzhengjie/data/web/nginx/temp 1 2 2;
   

    #IE系列的浏览器禁用长连接,默认就是禁用了IE的长连接功能.
    keepalive_disable msie6;

    #开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置
客户端将不显示超时时间。    keepalive_timeout  65 60;

    #在一次长连接上所允许请求的资源的最大数量
    keepalive_requests 3;
    
    #导入其他路径的配置文件
    include /yinzhengjie/softwares/nginx/conf.d/*.conf;
}

[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# nginx -t
nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
[root@node101.yinzhengjie.org.cn ~]# 

2>..配置nginx的子配置文件

[root@node101.yinzhengjie.org.cn ~]# vim /yinzhengjie/softwares/nginx/conf.d/share.conf 
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# cat /yinzhengjie/softwares/nginx/conf.d/share.conf 
server {
    listen 80;
    server_name node101.yinzhengjie.org.cn;

    location / {
        root /yinzhengjie/data/web/nginx/static;
        index index.html;
    }

    location /nginx_status {
        stub_status;
        allow 172.30.1.108;
    deny all;
    }

    location /main {
    index index.html;
    default_type text/html;
        set $name jason;              #这里我使用了set关键字自定义了一个name变量
        set $nginx_name $server_name;      #这里我依旧使用了set关键字自定义了一个变量,只不过该变量名的值来自于内部变量的值。
        echo "姓名: $name";
        echo "************";
        echo "Nginx服务器名称: $nginx_name";
    }

}
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# nginx -t
nginx: the configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /yinzhengjie/softwares/nginx/conf/nginx.conf test is successful
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# 

3>.重新加载nginx的配置文件

[root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
root      9297     1  0 18:30 ?        00:00:00 nginx: master process nginx
nginx     9598  9297  0 19:38 ?        00:00:00 nginx: worker process
nginx     9599  9297  0 19:38 ?        00:00:00 nginx: worker process
nginx     9600  9297  0 19:38 ?        00:00:00 nginx: worker process
nginx     9601  9297  0 19:38 ?        00:00:00 nginx: worker process
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]#  nginx -s reload
[root@node101.yinzhengjie.org.cn ~]# 
[root@node101.yinzhengjie.org.cn ~]# ps -ef | grep nginx | grep -v grep
root      9297     1  0 18:30 ?        00:00:00 nginx: master process nginx
nginx     9635  9297  1 19:40 ?        00:00:00 nginx: worker process
nginx     9636  9297  1 19:40 ?        00:00:00 nginx: worker process
nginx     9637  9297  1 19:40 ?        00:00:00 nginx: worker process
nginx     9638  9297  1 19:40 ?        00:00:00 nginx: worker process
[root@node101.yinzhengjie.org.cn ~]# 

4>.浏览器访问"http://node101.yinzhengjie.org.cn/main",如下图所示。

 

posted @ 2019-12-15 23:27  尹正杰  阅读(16135)  评论(0编辑  收藏  举报