Nginx简单手册

Stella981
• 阅读 498

Nginx 变量

变量名

注解

$arg_name

请求中的的参数名,即“?”后面的arg_name=arg_value形式的arg_name

$args

 请求中的参数值

$binary_remote_addr 

 客户端地址的二进制形式, 固定长度为4个字节

 $body_bytes_sent

传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的“%B”参数保持兼容 

 $bytes_sent

 传输给客户端的字节数 (1.3.8, 1.2.5)

 $connection

 TCP连接的序列号 (1.3.8, 1.2.5)

$connection_requests 

 TCP连接当前的请求数量 (1.3.8, 1.2.5)

 $content_length

 “Content-Length” 请求头字段

 $content_type

 “Content-Type” 请求头字段

 $cookie_name

 cookie名称

 $document_root

 当前请求的文档根目录或别名

 $document_uri

 同 $uri

 $host

 优先级如下:HTTP请求行的主机名>”HOST”请求头字段>符合请求的服务器名

 $hostname

 主机名

$https 

 如果开启了SSL安全模式,值为“on”,否则为空字符串。

 $is_args

 如果请求中有参数,值为“?”,否则为空字符串。

 $limit_rate

 用于设置响应的速度限制,详见 limit_rate。

 $msec

 当前的Unix时间戳 (1.3.9, 1.2.6)

 $nginx_version

 nginx版本

 $pid

 工作进程的PID

$pipe 

 如果请求来自管道通信,值为“p”,否则为“.” (1.3.12, 1.2.7)

 $proxy_protocol_addr

 获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串。(1.5.12)

 $proxy_protocol_port

 获取代理访问服务器的客户端的端口,如果是直接访问,该值为空字符串(1.11.0)

 $query_string

 同 $args

 $realpath_root

 当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径。

 $remote_addr

 客户端地址

 $remote_port

 客户端端口

 $remote_user

 用于HTTP基础认证服务的用户名

 $request

 代表客户端的请求地址

 $request_body

 客户端的请求主体,此变量可在location中使用,将请求主体通过proxy_pass, fastcgi_pass, uwsgi_pass, 和 scgi_pass传递给下一级的代理服务器。

 $request_body_file

 将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off, uwsgi_pass_request_body off, or scgi_pass_request_body off 。

 $request_completion

 如果请求成功,值为”OK”,如果请求未完成或者请求不是一个范围请求的最后一部分,则为空。

 $request_filename

 当前连接请求的文件路径,由root或alias指令与URI请求生成。

 $request_id

 16随机字节(十六进制)生成的唯一请求标识符(1.11.0)

 $request_length

 请求的长度 (包括请求的地址, http请求头和请求主体) (1.3.12, 1.2.7)

 $request_method

 HTTP请求方法,通常为“GET”或“POST”

 $request_time

 处理客户端请求使用的时间 (1.3.9, 1.2.6); 从读取客户端的第一个字节开始计时。

 $request_uri

 这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:”/cnphp/test.php?arg=freemouse”。

 $scheme 

 请求使用的Web协议, “http” 或 “https”

 $sent_http_name

 可以设置任意http响应头字段; 变量名中的后半部分“name”可以替换成任意响应头字段,如需要设置响应头Content-length,那么将“-”替换为下划线,大写字母替换为小写,形如:$sent_http_content_length 4096即可。

 $server_addr

 服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中。

 $server_name

 服务器名,www.sxp.com

 $server_port

 接受请求服务器的端口

 $server_protocol

 服务器的HTTP版本, 通常为 “HTTP/1.0” 或 “HTTP/1.1” , “HTTP/2.0”

 $status

 HTTP响应代码 (1.3.2, 1.2.2)

 $tcpinfo_rtt、$tcpinfo_rttvar、$tcpinfo_snd_cwnd、$tcpinfo_rcv_space

 客户端TCP连接的具体信息

 $time_iso8601

 服务器时间的ISO 8610格式 (1.3.12, 1.2.7)

 $time_local

 服务器时间(LOG Format 格式) (1.3.12, 1.2.7)

 $uri

 请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如”/foo/bar.html”。

Nginx运算符

nginx if 不允许嵌套,变量与括号之间都需要有空格,否则nginx认为是一条命令

符号

注解

=

比较运算符,并非 "=="

&&

逻辑与

or

逻辑或

Nginx 模块

nginx 将每个功能都分成不同的模块加载,具有很强的扩展性。

下面为常用的模块和内置模块

模块名

注释

ngx_http_core_module

nginx核心模块,例如location, error_page和内置变量等等

ngx_http_access_module

允许/限制客户端的访问

ngx_http_fastcgi_module

nginx是否支持FastCGI模式

ngx_http_grpc_module

将请求发送到grpc服务器

ngx_http_gzip_module

静态文件压缩模块

ngx_http_proxy_module

反向代理模块

ngx_http_log_module

日志模块

ngx_http_rewrite_module

重写模块

ngx_http_ssl_module

配置https模块

Nginx 命令

列出常用nginx命令

参数

注解

-? -h

帮助信息

-c file

指定配置文件启动

-g directives

设置配置文件外的全局指令

-p prefix

设置前缀路径

-q suppress

在检测配置文件期间屏蔽非错误信息

-s signal

给一个 nginx 主进程发送信号:stop(停止), quit(优雅退出), reopen(重新打开日志文件), reload(重新加载配置文件)

-t  -T

检测配置文件是否有语法错误,然后退出

-v

显示版本信息并退出

-V

显示版本和配置选项信息,然后退出

Nginx 配置简单案例

SSL案例

server {
    listen 443;
    server_name nginx.org;
    ssl on;
    root /var/www/nginx.org;
    index index.html index.htm;
    ssl_certificate  cert/nginx.pem;
    ssl_certificate_key cert/nginx.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        index index.html index.htm;
    }
}

配置反向代理

server {
    listen 80;
    server_name  www.sxp.com;
 
    access_log  logs/nginx.access.log  main;
    error_log  logs/nginx.error.log;
    root   html;
    index  index.html index.htm index.php;

    location / {
        proxy_pass  http://nginx.org;
 
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
   }
}

配置负载均衡

upstream server {  
    server 127.0.0.1:8080 weight=3;  
    server 127.1.1.1:8081;  
}   

server {
    listen 80;
    server_name  www.baidu.cim;
 
    access_log  logs/nginx.access.log  main;
    error_log  logs/nginx.error.log;
    root   html;
    index  index.html index.htm index.php;

    location / {
        proxy_pass  http://server;
 
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
   }
}

本文目的为方便自己查阅。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
OpenResty之使用 Nginx 内置绑定变量
Nginx作为一个成熟、久经考验的负载均衡软件,与其提供丰富、完整的内置变量是分不开的,它极大增加了对Nginx网络行为的控制细度。这些变量大部分都是在请求进入时解析的,并把他们缓存到请求cycle中,方便下一次获取使用。首先来看看Nginx对外都开放了那些API。$arg\_name:请求中的name参数$args:请求中的参数
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
SpringBoot2 学习10 Controller接收参数的方式
地址传值@PathVariable获取路径参数。即url/{id}这种形式。?传值@RequestParam获取查询参数。即url?name这种形式用注解@RequestParam绑定请求参数到方法入参当请求参数username不存在时会有异常发生,可以通过设置属性requiredfalse解决,例如:@R
Easter79 Easter79
3年前
SpringBoot2 学习10 Controller接收参数的方式
地址传值@PathVariable获取路径参数。即url/{id}这种形式。?传值@RequestParam获取查询参数。即url?name这种形式用注解@RequestParam绑定请求参数到方法入参当请求参数username不存在时会有异常发生,可以通过设置属性requiredfalse解决,例如:@R
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这