nginx工作在7层:web server(静态内容 static contents)web reverse proxy(反向代理http,https,mail),cache(带缓存功能)
proxy(反向代理http,https,mail),cache(带缓存功能)
varnish,squid (cache),web,http headers
haproxy:基于应用层和tcp层的反向代理,http revers proxy
keeplived:HA
ats:apache traffic server
响应码
1XX
2XX:成功响应码
200
3XX:重定向
301
302
304
4XX:客户端错误
5XX:服务器端错误
keepalive: (在http 1.0就支持长连接渲染也叫保持连接) 这个功能作用是,我们在请求一个web站点的时候,有许多web object(图片 js 等),每次请求资源,都需要三次握手,四次断开,所有就有keepalive,当一个资源传输资源结束后TCP连接不断开,能够同一个TCP通道上面允许用户继续发起请求;
keepalive不能无限制的一直连接着,有下面2个限定断开方式
keepalive 时间:timeout
keepalive 数量:
web I/O模型
同步
阻塞
非阻塞
I/O复用
select(),
poll()
prefork:基于select()
并发编程)处理并发用户请求:
单进程模型:串行方式模式
多进程模型:prefox,一个进程响应一个用户请求,并发使用多个进程实现
多线程模型:worker,一个进程生成多个线程,一个线程响应一个用户请求;并发使用多个线程实现:n进程,n*m个线程
线程(事件)模型:event。一个线程响应多个用户请求,基于事件驱动机制来维持多个用户请求
nginx的特性:
基本功能:
实现与服务静态文件(静态资源的web服务器),能缓存打开的文件描述符
反向代理服务器,缓存、负载均衡、健康状态检测
支持FastCGI
模块化机制,非DSO机制,支持多种过滤器gzip,SSI和图像的模块完成图形大小调整等
支持SSL
扩展功能:
基于名称和IP做虚拟主机
支持keeplive
支持平滑配置更新或程序版本升级
定制访问日志,支持使用日志缓存以提高性能
支持URL rewrite
支持路径别名
支持基于IP及用户的认证:
支持速率限制,并发数限制等
nginx的基本架构
一个master 生成一个或多个worker
事件驱动:kqueue,epoll,/dev/poll
消息通知:select,poll,rt rignals
支持sendfile,sendfile64
文件AIO(异步I/O)
支持mmap
nginx:非阻塞、事件驱动,一个master多个worker,一个worker响应多个用户请求
nginx的模块类别
核心模块
标准http模块
可选的http模块
邮件模块
第三方扩展模块
安装方法:
编译安装
rpm包安装
epel源
Nginx的配置文件
main配置段(核心配置)
http{
}
mail{
}
配置参数需要以分号结尾,语法格式:
参数名 值1[值2...];
还支持使用变量
模块内置变量
用户自定义变量
set var_name value
Modules
Contents[hide] |
Installing Modules
Nginx modules must be selected during compile, run-time selection of modules is not currently supported.
A full summary of the compile-time options, including optional modules, can be found in the provided configure script by running ./configure --help
Nginx core module
This module is required.
Name | Description |
---|---|
Core | Configure error logging, processes, permissions, epoll/kqueue/select/poll events, etc. |
Standard HTTP modules 标准模块默认被安装了,如果不需要安装--without
These modules are automatically compiled in unless explicitly disabled with configure
.
Name | Description | Version | configure argument to disable |
---|---|---|---|
HTTP Core | Control ports, locations, error pages, aliases, and other essentials. | --without-http | |
Access | Allow/deny based on IP address. | --without-http_access_module | |
Auth Basic | Basic HTTP authentication. | --without-http_auth_basic_module | |
Auto Index | Generates automatic directory listings. | --without-http_autoindex_module | |
Browser | Interpret "User-Agent" string. | 0.4.3 | --without-http_browser_module |
Charset | Recode web pages. | --without-http_charset_module | |
Empty GIF | Serve a 1x1 image from memory. | 0.3.10 | --without-http_empty_gif_module |
FastCGI | FastCGI Support. | --without-http_fastcgi_module | |
Geo | Set config variables using key/value pairs of IP addresses. | 0.1.17 | --without-http_geo_module |
Gzip | Gzip responses. | --without-http_gzip_module | |
Headers | Set arbitrary HTTP response headers. | ||
Index | Controls which files are to be used as index. | ||
Limit Requests | Limit frequency of requests from a client. | 0.7.20 | --without-http_limit_req_module |
Limit Conn | Limit concurrent active connections based on a variable. | --without-http_limit_conn_module | |
Log | Customize access logs. | ||
Map | Set config variables using arbitrary key/value pairs. | 0.3.16 | --without-http_map_module |
Memcached | Memcached support. | --without-http_memcached_module | |
Proxy | Proxy to upstream servers. | --without-http_proxy_module | |
Referer | Filter requests based on Referer header. |
--without-http_referer_module | |
Rewrite | Request rewriting using regular expressions. | --without-http_rewrite_module | |
SCGI | SCGI protocol support. | 0.8.42 | --without-http_scgi_module |
Split Clients | Splits clients based on some conditions | 0.8.37 | --without-http_split_clients_module |
SSI | Server-side includes. | --without-http_ssi_module | |
Upstream | For load-balancing. | --without-http_upstream_ip_hash_module (ip_hash directive only) --without-http_upstream_least_conn_module (least_conn directive only) --without-http_upstream_keepalive_module (keepalive directive only) |
|
User ID | Issue identifying cookies. | --without-http_userid_module | |
uWSGI | uWSGI protocol support. | 0.8.40 | --without-http_uwsgi_module |
X-Accel | X-Sendfile-like module. |
Optional HTTP modules 选项模块默认没被安装,需要安装--with-xxx安装进入nginx
The following modules must be enabled at compile-time with the specified option to configure
.
Name | Description | Version | configure argument to enable |
---|---|---|---|
Addition | Append text to pages. | --with-http_addition_module | |
Auth Request | Implements client authorization based on the result of a subrequest. | 1.5.4 | --with-http_auth_request_module |
Degradation | Allow to return 204 or 444 code for some locations on low memory condition. | 0.8.25 | --with-http_degradation_module |
Embedded Perl | Use Perl in Nginx config files. | 0.3.21 | --with-http_perl_module |
FLV | Flash Streaming Video | 0.4.7 | --with-http_flv_module |
GeoIP | Creates variables with information from the MaxMind GeoIP binary files. | 0.8.6, 0.7.63 | --with-http_geoip_module |
Google Perftools | Google Performance Tools support. | 0.6.29 | --with-google_perftools_module |
Gzip Precompression | Serves precompressed versions of static files. | 0.6.23 | --with-http_gzip_static_module |
Gunzip | On-the-fly decompressing of gzipped responses. | 1.3.6 | --with-http_gunzip_module |
Image Filter | Transform images with Libgd | 0.7.54 | --with-http_image_filter_module |
MP4 | Enables mp4 streaming with seeking ability. | 1.1.3, 1.0.7 | --with-http_mp4_module |
Random Index | Randomize directory indexes. | 0.7.15 | --with-http_random_index_module |
Real IP | For using nginx as backend | 0.3.8 | --with-http_realip_module |
Secure Link | Protect pages with a secret key. | 0.7.18 | --with-http_secure_link_module |
SPDY | SPDY protocol support. | 1.3.15 | --with-http_spdy_module |
SSL | HTTPS/SSL support. | --with-http_ssl_module | |
Stub Status | View server statistics. | 0.1.18 | --with-http_stub_status_module |
Substitution | Replace text in pages | --with-http_sub_module | |
WebDAV | WebDAV pass-through support. | 0.3.38 | --with-http_dav_module |
XSLT | Post-process pages with XSLT. | 0.7.8 | --with-http_xslt_module |
Mail modules
Name | Description | configure argument |
---|---|---|
Mail Core | Core parameters for mail module. | --with-mail |
POP3 | POP3 settings. | --without-mail_pop3_module |
IMAP | IMAP settings. | --without-mail_imap_module |
SMTP | SMTP settings. | --without-mail_smtp_module |
Auth HTTP | Use Nginx to authenticate mail services. | |
Proxy | Nginx can proxy IMAP, POP3, and SMTP protocols. | |
SSL | This module ensures SSL/TLS support for POP3/IMAP/SMTP. | --with-mail_ssl_module |
Obsoleted articles
Most of the links above points to official up-to-date documentation provided by Nginx, Inc. For historical reasons there is a list of obsoleted wiki articles.
WARNING: these articles may contain outdated, incomplete or even incorrect information.
Please always refer to the official documentation avaiable at http://nginx.org.
Third party modules and Patches
Please see the catalog of 3rd party modules.
References
开始安装
PCRE库(Nginx的rewrite模块和HTTP核心模块会用到PCRE正则表达式语法)
yum install pcre pcre-devel
./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/tmp/nginx.pid --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/client --http-proxy-temp-path=/var/tmp/proxy --http-fastcgi-temp-path=/var/tmp/fastcgi --http-uwsgi-temp-path=/var/tmp/uwsgi --http-scgi-temp-path=/var/tmp/scgi --with-pcre | tee /opt/nginx_install
###
--http-client-body-temp-path 处理http请求时,http的包体需要暂时存储放在目录文件中(放到磁盘中);为什么要这么放,如果2000个并发,都需要上传文件,每个文件假如200M,这时候就超过内存使用量了,这时候我就需要暂时存在磁盘上(工作模式nginx 全部接收完后,在全部返回给上游服务器)
--http-proxy-temp-path nginx作为反向代理服务器;后端实体工作机(上游服务器)包体需要存放的临时文件时使用的目录(工作模式nginx 全部接收完后,在全部返回给用户)
Nginx基本核心配置的类别
用于调试、定位问题
正常运行的必备配置
优化性能的配置
事件类的配置
worker进程应该以普通用户身份运行。nginx用户,nginx组
http的方法:GET,HEAD,POST,PUT,DELETE OPTIONS TRACE
nginx的配置:
核心配置
1 正常运行的必备配置
1 user username [groupname]; 指定运行worker进程的用户和组
2 pid 路劲; 指定nginx的pid文件路劲
3 worker_rlimit_nofile; 指定一个worker进程打开的最大文件数(也就是一个worker并发数)
4 worker_rlimit_sigpending; 设定每个用户能够发往woker进程的信号的数量
2 优化性能相关的配置
1 worker_processes 4; worker进程的个数(通常其数值应为为CPU物理核心数减1)
2 worker_cpu_affinity 0000 0001 0010 0100 (CPU掩码); CPU倾源性;让worker进程必须运行在某颗CPU,这样的好处可以避免上下文切换,不会在其他CPU上面挑来跳去的(0000表示绑定第一个cpu上面; 0001表示绑定第二个cpu上面 0011表示使用CPU第0颗和第一颗)
3 ssl_engine device; 有些服务器自带ssl加速硬件,在存在ssl硬件加速器的服务器上面,执行使用的ssl硬件加速设备
4 timer_resolution 100ms; 每次内核事件调用返回时;都会使用gettimeofday()来更新nginx缓存时钟;但是gettimeofday()调用代价太大,timer_resolution表示就是不管你调用多少次,我多长时间返回一次(timer_resolution用于定义每隔多久才会由gettimeday()更新一次缓存时钟;x86-64系统上,gettimeday()代价已经很小,可以忽略此配置)
5 worker_priority -10; worker进程的优先级(-20到19之间的值,值越小越优先调用)
3 事件相关的配置
1 accept_mutex [on|off]; 是否打开nginx的负载均衡锁(默认开启);此锁能够让多个worker进行轮流地、序列化地与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不将请求调度至worker
2 lock_file /path/to/lock_file; 锁文件
3 accept_mutex_delay #ms; 使用accept锁以后,只有一个worker能取得锁,一个worker进程为取得accept锁的等待时长,即用户建立等待的时间,如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能在一次请求锁(默认500ms)
4 multi_accept [on|off] 是否允许一次性地响应多个用户请求,默认为off
5 use [epoll|rtsig|select|poll] 指定使用那种模型,建议让nginx自动选择
6 worker_commections #; 每个worker能够并发响应的最大请求数,如果为代理服务器的话,worker_rlimit_nofile=worker_commections*2
3 用于调试、定位问题:只调试nginx时使用
1 daemon on|off; 关闭提供守护进程的模式,是否让nignx运行于后台;调试时应该为off,使得所有信息直接输出在控制台,默认为on
2 master_process on|off; 是否以master/worker模式运行nginx,默认为on,调试时可以设置为off以方便追踪
3 error_log /path/error_log level; (错误日志是全局的,在核心配置中,访问日志是在虚拟主机中配置)错误日志文件及其级别,调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能,默认通常为error级别
nginx的http web功能
1 nginx必须使用虚拟机来配置站点:每个虚拟主机使用一个server{ }段来配置
server {
}
2 非虚拟主机的配置和公共选项,需要定义在server之外,http之内,也就是说http的配置对所有里面的server都有效(配置虚拟主机的相关参数,一个http中可以有多个server)
http{
directive value;
....
server{
}
server{
}
......
}
1 server{ } 定义一个虚拟主机:nginx支持使用基于主机名或IP的虚拟主机
2 listen 支持3种方式
1 listen address[:port] 2 listen prot(所有地址) 3 listen unix:socket_file_path
3 default_server: 定义此server为http中默认的server;如果所有的server中任何一个listen使用此参数,那么第一个server即为默认server
4 rcvbuf=SIZE: 接收缓存大小 sndbuf=SIZE: 发送缓存大小 ssl:https server:必须以ssl连接
5 server_name [...]; server_name可以跟多个主机名,名称可以使用通配符和正则表达式(通常以~开头):当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较:比较方式
(1) 先做精确匹配:www.1212.com (2) 左侧通配符匹配*.1212.com (3) 右侧通配符匹配:www.* (4) 正则表达式匹配:~^.*\.2121\.com$
6 server_name_hash_bucket_size 32|64|128 为了实现快速主机查找,nginx使用hash表来保存主机名
7 location 两种使用格式 location [ =|~|~*|^~] uri { ... } 和 location @name { ... } 功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理(写在server里面或者单独location写在外面).比如:当用户请求 http://www.baidu.com/img/a.png,这时候/img/a.png会匹配location 中的uri做相应的处理
=:精确匹配
~:正则表达式模式匹配,匹配时区分字符大小写
~*:正则表达式模式匹配,匹配时忽略字符大小写
^~:只需要前半部分与uri匹配即可,不检查正则表达式
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
http://www.bbb.com/ configuration A
http://www.bbb.com/img configuration B
http://www.bbb.com/documents/a.sh configuration C
匹配优先级:
字符字面量最精确匹配、正则表达式检索(如果有多个正则能匹配时,由第一个匹配到的所处理),如果没有正则表达式按字符字面量
location 指令:
文件路径定义
1.root path
location ^~/img {
root /web; #需要使用http://192.168.111.128/img/a.html访问; 访问的是web目录下面有个img目录下的文件
}
设置web资源路径,用于指定请求的根文档目录,从跟开始匹配
root:root/URI
2.alias path
指定路径别名,只能用于location中,从最后一个/开始匹配
alias:alias/
location ^~/img {
alias /web; #需要使用http://192.168.111.128/img/a.html访问; 其实就是web的别名就是img
}
3.index file....
定义默认页面,可以跟多个值。自左向右匹配
4.error_page code ... [=[response]] uri
error_page 404 /404.html; #错误代码为404的时候,就返回404页面
error_page 404 =200 /404.html; #错误代码为404的时候,就返回404页面,并且返回200的状态码,日子里面能看到响应是200了
当对于某个请求发回错误时,如果匹配上了error_page指令中设定的code,则从定向至新的新URI中
错误重定向
5.try_files path1 [path2...] uri;
自左向右尝试读取有path所指定路径,在第一找到即停止并返回,如果所有path均不存在,则返回最后一个uri
location ~* ^/document/(.*)${
root /www/htdocs
try_files $uri /docu/$1 /temp.html #$uri = document $1分组=(.*)
}
8 网络连接相关的设置
1.keepalive_timeout time; 保持连接的超时时长,默认为75s
2.keepalive_requests n; 在一次长连接上允许承载的最大请求数
3.keepalive_disable [msie6|safari |none] 对指定的浏览器禁止使用长连接
4.tcp_nodelay on|off 对keepalive连接是否使用tcp_nodelay选项
5.client_header_timeout time 读取http请求首部的超时时长
6.client_body_timeout time 读取http请求包体的超时时间
7.save_timeout time 发送响应的超时时长
9 对客户端请求的限制:
1.limit_except method ...{ ... } 指定范围之外的其他方法的访问控制,只能用于location中,limit_except的意思是”限制除了“也就是允许啦。
location /doc {
root /web;
try_files $uri /doc/tmp.html;
limit_except POST{
allow 127.0.0.1;
deny all;
}
}
2.client_max_body_size size http 请求包体的最大值,常用于限定客户端所能够请求的最大包体,根据请求首部中的Content-Length来检查,以避免无用的传输
3.limit_rate speed 限制客户端每秒传输的字节数,默认为0,表示没有限制
4.limit_rate_after time nginx向客户端发送响应报文时,如果时长超过了此处指定的时长,则后续的发送过程开始限速
10 文件操作的优化
1.sendfile on|off 是否启用sendfile功能
2.aio on|off 是否启用aio功能
3.open_file_cache man=N [incative=time]|off 是否打开文件缓存功能
11 http核心模块的内置变量:
$uri:当前请求的uri,不带参数
$request_uri:请求的uri,带完整参数
$host:http请求报文中host首部;如果请求中没有host首部,则以处理此请求的主机的主机名代替
$hostname:nginx服务运行所在主机的主机名
$remote_addr:客户端IP
$remote_port: 客户端port
$remote_user:使用用户认证时客户端用户输入的用户名
$request_filename:用户请求中的URI经过本地root或alias转换后映射的本地的文件路径
$request_method:请求方法
$server_addr:服务器地址
$server_name: 服务器名称
$server_port:服务器端口
$server_protocol:服务器向客户端发送响应时的协议,如http/1.1,http/1.0
$scheme:在请求中使用的scheme 映射协议本身的协议
$http_HEADER:匹配请求报文中指定的HEADER,例如$http_host匹配请求报文中的host首部
$sent_http_HEADER:匹配响应报文中指定的HERDER,例如$http_content_type匹配相应报文中的content-type首部
$document_root:当前请求映射到的root配置
开始使用nginx
1.nginx虚拟主机
server {
listen 80;
server_name www.a.com;
location / {
root /web;
}
}
2 访问控制access模块
server {
listen 80;
server_name www.b.com 127.0.0.1;
allow 127.0.0.1;
deny all;
location / {
root /web;
}
}
3.基于用户认证
server {
listen 80;
server_name www.d.com;
location /admin/ {
auth_basic "admin run"; #标题
auth_basic_user_file /web/.htpasswd; #生成密码文件 htpasswd -c -m /web/.htpasswd admin
root /web;
}
}
4. 建立下载站点autoindex下载列表
location /download/ {
root /web;
autoindex on; #列出当前目录下面所有的文件
}
5.防盗链
(1) 定义和规定额引用
valid_referers none |blocked |server_names|string ...
(2) 判断不合规的引用
if ($invaild_referer) {
rewrite ^/.*$ http://www.a.com/403.html
}
6.url重写 rewrite
(比如访问的是a.com跳转b.com,又例如我们的图片都放在在img目录,后来改了放到image目录,外部的程序访问还是img目录,这时候rewrite我们就需要把他改成image目录)
rewrite regex replacement [flag];
location / {
root /web;
rewrite ^/imgages/(.*)$ /imgs/$1 last; #$1是前面的(.*)$分组内容;访问根下面的imgages替换成imgs
}
server {
listen 80;
server_name www.a.com;
location /a/ {
root /web/;
rewrite ^/a/(.*\.(jpg|gif))$ /img/$1 break; #web目录下面有a和img目录;img有图片文件;访问http://www.a.com/a/a.jpg 会重定向到/img/a.jpg ;(测试last报404错误 用break解决)
}
}
}
server {
listen 80;
server_name www.a.com;
location /a/ {
root /web/;
rewrite ^.*$ http://www.baidu.com last; #跳转到百度
}
}
flag:标志位
last:一旦被当前规则匹配并重写后立即停止检查后续饿的其他rewrite的规则,而后通过重写后的规则重新发起请求(继续向下匹配新的location URI规则)
break:一旦被当前规则匹配并重写后立即停止检查后续的其他rewrite的规则,而后继续由nginx进行后续的操作
redirect:返回302临时重定向代码
permanent:返回301永久重定向
nginx最多循环10次,超出之后返回500错误
里面的括号不需要转义的
注意:一般将rewrite写在location中时都使用break标志,或者将rewrite卸载if上下文中
rewrite_log on|off
是否将重写过程记录在错误日志中,默认为notice级别;默认为off
return code:
server {
listen 80;
server_name www.a.com;
location /a/ {
root /web/;
return 403; #返回403错误
}
}
}
用于结束rewrite规则,并且为客户返回状态码:可以使用的状态码有204,400,402-406,500-504等
if (condition) {
}
用于检测条件是否成立
7.状态页
location{
stub-status on
}
当下处于活动状态的总数
接受的总数 已经建立和处理总数 请求的总数
正在接受的并发请求个数,正在读取的个数或发往客户端的 ,长连接中的处于活动状态的值
8.压缩:
gzip
gzip on|off
gzip_buffer 使用的缓存大小
gzip_comp_level 压缩的级别
gzip_disable 不压缩的类型或浏览器
gzip_min_length 最少压缩的大小
gzip_http_version 压缩完成以后发送http的版本
gzip_types:只压缩的格式
if 判断语句:
在location中使用if语句可以实现条件判断,通常有一个return语句,并且一般与有着last 或者 break标记的rewrite规则一同使用.但其也可以使用在多种环境下,需要注意的是,不当的使用可能会导致不可预料的后果.
location / {
if ($reuest_method == "PUT"){
proxy_pass http://www.a.com:9090;
}
}
location / {
if ($reuest_uri ~ "\.(jpg|gif)$"){
proxy_pass http://www.a.com:9090;
break;
}
}
一、if语句中的判断条件(nginx)
1、正则表达式匹配:
==:等值比较;
~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;
2、文件及目录匹配判断:
-f, !-f:判断指定的路径是否为存在且为文件;
-d, !-d:判断指定的路径是否为存在且为目录;
-e, !-e:判断指定的路径是否存在,文件或目录均可;
-x, !-x:判断指定路径的文件是否存在且可执行;
- last 相当于Apache里的[L]标记,表示完成rewrite,呵呵这应该是最常用的
- break 终止匹配, 不再匹配后面的规则
- redirect 返回302临时重定向 地址栏会显示跳转后的地址
- permanent 返回301永久重定向 地址栏会显示跳转后的地址
nginx全局变量
arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。
args #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址。
body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
content_length #请求头中的Content-length字段。
content_type #请求头中的Content-Type字段。
cookie_COOKIE #cookie COOKIE变量的值
document_root #当前请求在root指令中指定的值。
document_uri #与uri相同。
host #请求主机头字段,否则为服务器名称。
hostname #Set to themachine’s hostname as returned by gethostname
http_HEADER
is_args #如果有args参数,这个变量等于”?”,否则等于”",空值。
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率。
query_string #与args相同。
request_body_file #客户端请求主体信息的临时文件名。
request_method #客户端请求的动作,通常为GET或POST。
remote_addr #客户端的IP地址。
remote_port #客户端的端口。
remote_user #已经经过Auth Basic Module验证的用户名。
request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
request_method #GET或POST
request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
scheme #HTTP方法(如http,https)。
server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
server_name #服务器名称。
server_port #请求到达服务器的端口号。
下面是可以用作if判断的全局变量
$args
: #这个变量等于请求行中的参数,同$query_string
$content_length
: 请求头中的Content-length字段。$content_type
: 请求头中的Content-Type字段。$document_root
: 当前请求在root指令中指定的值。$host
: 请求主机头字段,否则为服务器名称。$http_user_agent
: 客户端agent信息$http_cookie
: 客户端cookie信息$limit_rate
: 这个变量可以限制连接速率。$request_method
: 客户端请求的动作,通常为GET或POST。$remote_addr
: 客户端的IP地址。$remote_port
: 客户端的端口。$remote_user
: 已经经过Auth Basic Module验证的用户名。$request_filename
: 当前请求的文件路径,由root或alias指令与URI请求生成。$scheme
: HTTP方法(如http,https)。$server_protocol
: 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。$server_addr
: 服务器地址,在完成一次系统调用后可以确定这个值。$server_name
: 服务器名称。$server_port
: 请求到达服务器的端口号。$request_uri
: 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。$uri
: 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。$document_uri
: 与$uri相同。
七.Apache和Nginx规则的对应关系
Apache的RewriteCond对应Nginx的if
Apache的RewriteRule对应Nginx的rewrite
Apache的[R]对应Nginx的redirect
Apache的[P]对应Nginx的last
Apache的[R,L]对应Nginx的redirect
Apache的[P,L]对应Nginx的last
Apache的[PT,L]对应Nginx的last