概述
1 工作环境
1.1 设置终端仿真器
首先得安装SSH客户端,这是一种网络协议,实现两个设备的加密与安全通信,是用于远程连接系统的shell
1.2 建立会话
-
准备连接主机名或ip地址
-
ssh守护进程端口号,除非额外指定,否则默认22
-
账号
-
密码
1.3 程序和进程
命令后面加上&,可以让命令在后台运行,进程pid会显示在屏幕上,一旦完成会显示执行完毕信息
1.4 系统服务
许多后台应用程序用service命令来启动,通常用复杂的脚本来控制启动和停止,普遍放在/etc/init.d中
**start** 启动服务
**stop** 以clean way方式停止服务
**restart** 重新启动服务
**reload** 重新装载服务配置文件
**status** 显示服务器状态
**service --status-all** 列出所有服务器当前状态
1.5 杀进程
**kill [pid]** 杀死指定进程
**kill -9 [pid]** 强制杀死
**killall httpd** 杀死apache所有进程
1.6 符号链接和硬链接
可通过符号链接读取被链接的文件,若删除该链接,目标文件不受影响
硬链接链接文件的数据表现为多个链接可以链接到存储器同一数据,任意一个链接删除后数据不受影响,直到最后一个数据删除后数据才会被删除
1.7 磁盘空间
df 查询驱动器可用空间 -h 以人类可读方式
du 磁盘使用量 -h 以人类可读方式
free 空闲内存
2 下载和安装Nginx服务器
下载指令
yum Red Hat yun install
apt Debian和Unbuntu apt-get install
yast SuSE Linux
PRCE(Perl Compatible Regular Expression) Nginx的Rewrite和HTTP核心模块会用到PRCE正则表达式的语法,需要安装prce和prce-level两个包
用户和组 由root账户启动的nginx进程允许开放任意端口,但其他用户只能监听1024以上的端口
3 Nginx的基本配置
3.1 配置文件的语法
配置指令 Nginx的配置文件被描述为一个具有一定逻辑结构的一组指令列表,应用程序的行为通过修改这些指令值即可实现,Nginx的主要配置文件为nginx.conf
# 代表后面的内容是注释
worker_processes 后面的数字代表工作的进程数
指令用;结尾
user 指定两个字符串,一个是用户账户,第二个是用户组
Nginx通过模块来构建,每一个模块提供一组指令
includes 执行对特定文件的包含,可使用通配符*
3.2 指令块
指令由模块提供,如果你激活一个新模块,便会有一组新的指令变得有效,如:
**events {
worker_connections 1024;
} **
这个event块可以在默认配置文件中找到,来自events模块,该模块提供的指令只能在该区段使用,一些文件可以放置在文件根部,这些文件的配置能够全局使用
在某些情况下,不同区段能够相互嵌套,如:
http {
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.com.log;
location ^~ /admin/ {
index index.php;
}
}
}
这个http区段可以声明一个或多个http区段,一个server区段允许配置一台虚拟主机,例子中的server区段包含一些配置,这些设置通过主机http头应用于所有的请求以便于正确配置example.com。在这个server区段内,可插入一个或多个location区段,当需要对特定路径的URL进行匹配时,这些location区段允许你对这些路径进行单独设置。最后最重要的是配置的继承,在区段中嵌套其他区段,被嵌套的区段会继承父区段的配置,access_log指令由server区段定义(如上),指定对这个服务的所有http请求都会记录在这个文本文件中,这个条件会被location继承,当然可以通过下面设置来禁用继承:
location ^~ /admin/ {
index index.php;
access_log off;
}
这样,日志虽然不记录/admin/,但其他访问日志仍然会记
3.3 高级语言规则
rewrite^/(.*).(png|jpg|gif)$/image.php? file=$1&format=$2 last; listen指令一般只支持一个端口号,用来打开监听套接字,location和rewrite接受一些更复杂的指令,允许你在配置文件中使用更高级的结构,如:if、set、break和return
指令单位:k或K 千字节 m或M 兆字节
client_max_body_size 2M;
client_max_body_size 2048K;
ms 毫秒
s 秒
m 分钟
h 小时
d 天
w 星期
M 月
y 年
默认时间为s
client_body_timeout 180(s)
变量 模块提供各种变量,http模块中定义了
n
g
i
n
x
v
e
r
s
i
o
n
变
量
,
一
些
指
令
不
允
许
使
用
任
何
变
量
,
e
r
r
o
r
l
o
g
l
o
g
s
/
e
r
r
o
r
−
nginx_version变量,一些指令不允许使用任何变量,error_log logs/error-
nginxversion变量,一些指令不允许使用任何变量,errorloglogs/error−nginx_version.log
字符串值 可以没有引号,但是如果含有空格符、分号或花括号则需要单引号或双引号
3.4 基本模块指令
基本模块 定义nginx基本功能的变量,编译时不能被禁用,总是有效,有以下三种:核心模块(基本特征和指令)、事件模块(配置网络使用)、配置模块(提供包含机制)
nginx进程结构 应用程序虽然是二进制文件,但运行时功能却相当复杂,启动nginx独一无二的进程存在内存master进程,该服务在启动时有init脚本启动,它会使用当前用户和用户组运行,通常为root/root,master进程本身不出来用户请求,只是用来产生worker进程,worker进程按照配置文件运行,可定义大量worker进程和worker进程最大连接数
核心模块指令 大部分放在配置文件的根部,且只能使用一次,指令如下:
daemon on或off,启用或关闭守护进程,禁用时不能在后台使用,shell运行时将保留在前端
debug_points stop或abort,激活调试点,调试点为了附加调试点改变方向用stop打断程序,用abort放弃调试点并建立内核转储文件
env 重新定义环境变量,env VAR;或env VAR=value;
error_log error_log /file/path level,默认值 logs/error.logs error,level分为debug、info、notice、warn、error和crit,debug提供全部日志,crit提供关键日志
lock_file lock_file logs/nginx.lock,默认不使用,使用lock为了互斥
log_not_found on或off,开启或关闭记录404错误
master_process on或off,on将开启多进程,一个master进程和多个worker进程,禁用则只有master进程
pid pid logs/nginx.pid,存放nginx守护进程的pid路径
ssl_engine ssh_engine enginename,启用ssl硬件加速器
thread_stack_size 线程堆栈大小
time_resolution 时钟同步时间
user user [groupname] 定义用户和用户组
worker_threads 每个worker进程定义一定数量的线程
worker_cpu_affinity work_cpu_affinity 0101 1010 将第一个worker绑定在cpu0和2上,第二个worker绑定在cpu1和3上
worker_priority -20(最高级)到19(最低级),内核程序运行在-5优先级
worker_processes worker进程数量
worker_rlimit_core 每个worker进程内核文件的大小
worker_rlimit_nofile 每个worker能同时处理的文件数量
**worker_rlimit_sigpending **每个用户能被排入队列的信号数量,如队列满,信号会被忽略
**working_directory **worker工作进程的目录,仅用于定义core文件的位置
Events模块
accept_mutex on或off,启用或禁用互斥锁进行套接字监听
**accept_mutex_delay **worker进程尝试再次获取资源等待的时间
**debug_connection **ip地址或CIDR段,记录详细信息到error_log指定文件中,开启debug 级别详细日志
**muti_accept **on或off,nginx是否接受所有监听队列进入的连接
**use **选择event模型类型,和系统相关,nginx会自动选择最合适的一个
worker_connections worker进程同时连接的数量
**Configuration模块 **
提供include指令,可在任何地方插入该指令,该指令后面参数为文件路径
3.5 适合你需求的配置文件
主配置文件为nginx.conf,但是这个文件几乎是空的,当一个指令没有出现在文件中时会使用其默认值
必要的调整
user root root root用户授予全部权限是很危险的,一般需要建立新的用户和组
**worker_processes 1 **所有的请求分配给cpu一个进程,加入cpu是4核,则最好设置为4
worker_priority 0 worker进程以一个适当的优先级启动
**log_not_found on **记录404错误
**worker_connections 1024 **每个过程进程能接受1024个连接
3.6 测试服务器
建立测试服务器 为了执行简单测试,通过浏览器访问web服务器,需要为nginx创建一个访问站点,默认安装包内有简单的测试页,/usr/local/nginx/html/index.html,nginx.conf中也包含对其的访问
nginx以这个部分为基础提供网络服务:
- 通过80端口监听tcp套接字
- 访问地址 http://localhost/
- 主页为index.html
三个评测服务器性能的工具:
- httperf
- autobench
- OpenWebLoad
这些测试工具的原理都是发送大量的http请求进行测试
httperf httperf --server 192.168.1.10 -port 80 --uri /index.html --rate 300 --num-conn 30000 --num-call 1 --timeout 5
-
–server 测试的网址名
-
–uri 指定下载的文件
-
–rate 每秒发送的请求
-
–num-conn 连接的总数
-
–num-call 每个连接发送的请求数
-
–timeout 超时时间
autobench autobench --single_host --host1 192.168.1.10 --uri1 /index.html --quiet --low_rate 20 --high_rate 200 --rate_step 20 --num_call 10 --num_conn 5000 --timeout 5 --file results.tsv
- --host1 测试网站的名称 - --uri1 指定下载的文件 - --quiet 不在屏幕上显示httperf的信息 - --low_rate 测试开始时每秒连接数 - --high_rate 测试结束时每秒连接数 - --rate_step 连接数在每一次测试后的增长频率 - --num_call 每个连接发送的请求数 - --num_conn 连接总数 - --timeout 超时时间 - --file 将测试结果导出到一个指定文件夹,.tsv
OpenWebLoad openload example.com/index.html 10
- TPS(每秒处理数) 一个处理相当于一个完整的请求(一个来回)
- MaTps 过去20秒TPS的平均值
- Resp Time 过去一秒的平均值
- Err(错误率)服务器返回的响应不是200时,会发生错误
- Count 处理的总数
4 HTTP配置
4.1 HTTP核心模块
HTTP核心模块包含HTTP服务器所有基本的区段、指令和变量,HTTP模块提出了三个新的逻辑区块:
-
http 该区域嵌入配置文件的根部,此块允许定义指令和嵌入HTTP相关模块的区段,此块可以插入多次,但后者会取代前者
-
server 此块可以声明一个站点,通过设置可以让nginx服务器实现你写的配置
-
location 定义一组设置,应用于网站的特定位置,能用于server区段,也能嵌套在其他location区段
通过HTTP区段,涵盖这个Web配置,包含一个或多个server区段,定义了域和子域,对于这些站点来说,你定义的location区段将额外的配置添加给特定的URI请求
4.2 模块指令
上面三个层次都可以插入指令,有些指令不能应用于某些级别,location区域插入一个server_name指令是不合理的
4.3 套接字和主机的配置
listen:server listen [address] [:port] [其他选项];网站一般在80端口提供服务,其他选项中default:指该server区段被用于默认的网站,在该ip地址和端口上接受任何客户端的请求 ;ssl:指定网站提供SSL服务;
**sever_name:server *接收主机名与hostname相匹配,可以使用通配符
server_name_in_redirect: http、server、location on或off,开启时将使用server_name指令中的第一个主机名进行重定向,关闭时使用host的值进行重定向
server_name_hash_max_size: http nginx用hash表来进行变量数据收集,加速请求进程,存储服务器名称数量hash表的最大值
**server_names_hash_bucket_size: http **服务器名称hash表的一个条目的最大长度
**port_in_redirect: http、server、location **on或off,是否将端口重定向后的端口添加到URL中
**tcp_nodelay: http、server、location **on或off,禁用Nagle缓冲算法(合并一定数量的要发送的数据之后再发送数据)
**tcp_nopush: http、server、location **on或off,单个TCP数据包中发送整个HTTP的响应头
**sendfile:http、server、location **on或off,使用sendfile内核来调用处理文件,禁用时靠nginx自身处理文件
**sendfile_max_chunk:http、server **sendfile每一次调用数据的最大值
**send_lowat:http、server **用做输出操作缓冲区的大小
**reset_timedout_connection:http、server、location **on或off、启用该功能后,当客户端超时,清除相关信息
4.4 路径与文档
**root:http、server、location **定义文档根目录,root 目录路径
**alias:location **为nginx提供路径别名,为指定的请求找到文件
**error_page:http、server、location、if **修改访问URI所产生的HTTP响应码替换为其他代码或其他地址,如:error_page 404 /not_found.html
**if_modified_since: http、server、location **off、exact或before。off会忽略header、exact会将header时间(上一次爬取页面的时间)和时间文件修改时间匹配,若相同则返回304 Not Modified,若header时间在实际修改时间之后,返回200 OK,before若header时间在被修改日期之前或一样,则返回304 Not Modified
**index:http、server、location **定义一个默认页面,如果请求中没有指定文件名,nginx会使用该页面提供服务,可以指定多个文件名,但返回的页面是第一个找到的页面,默认值index.html
**recursive_error_pages:http、server、location **on或者off,error_page提供的错误页面本身发生了错误,error_page会被递归调用。开启或关闭递归错误页面
**try_files:location **试图找指定的文件,如果指定的这些文件或存在的文件都不是,就跳到命名locction区段或者指定URI
location / {
try_files $uri $uri.html $uri.php $uri.xml
}
在这个例子中,如果nginx设法正常提供文件,请求的uri找不到就添加html,再找不到就添加php,再找不到就添加xml,再找不到就换一个location
4.5 客户端请求
**keepalive_requests:http、server、location **设置单个keep_alive连接的最大请求数
**keepalive_timeout:http、server、location **keep_alive的有效时长,这段时间内不需要重新建立连接,第二个参数是让一段时间过去后,客户端浏览器自身关闭连接
**send_timeout:http、server、location **设置超时时间,一旦超过这个设置的时间,nginx会关闭不活动的连接
**client_body_in_file_only:http、server、location **off或clean或on,开启该指令会将请求头主体存储在磁盘中(不推荐),off是关闭,clean是处理完请求后移除
**client_body_in_single_buffer:http、server、location **on或off,将客户端请求主体存储在单一的缓存区中
**client_body_buffer_size:http、server、location **客户端请求主体的缓存大小,如果超过这个大小,主体将被写到磁盘
**client_body_temp_path:http、server、location **定义临时文件的路径,用于存储客户端请求主体
**client_body_timeout:http、server、location **读取客户请求主体时、定义非活动的超时间隔(超过这个时间就认为不是正常的活动连接)
**client_header_buffer_size:http、server、location **nginx将缓冲区分给请求头的大小
**client_header_timeout:http、server、location **读取客户端请求头时、定义不活动超时的时长
**client_max_body_size:http、server、location **利用指令定义客户端请求体的最大值,超过这个值,客户端会返回413请求实体体积太大的错误
**large_client_header_buffers:http、server、location **定义数量和缓冲区的大小,存储客户端的请求,large_client_header_buffers 4 4K,定义4个缓冲区大小为4K的缓存
**lingering_time:http、server、location **nginx发送错误响应到关闭连接前的时间
**lingering_timeout:http、server、location **客户端关闭前,两个读操作之间的等待时间
**ignore_invalid_headers:http、server **on或off,如果禁用该指令,nginx会返回400错误请求,避免请求头被错误形成
4.6 MIME类型
**types:http、server、location **允许在MIME类型和文件扩展名之间建立联系,application/octet-stream:下载而并非显示它,text/plain:纯文本而非html解释,include mine.types包含基本类型,如果一些扩展名是公知的如:.html和.txt,浏览器会忽略MIME类型,仍然显示文件
**default_type:http、server、location **默认MIME类型,nginx提供一个文件时,如果该文件扩展名和MIME文件声明类型匹配,则返回MIME值,将值填入http响应头Content-Type部分,如果不匹配,该值由default_type提供
**types_max_hash_size: http、server、location **MIME类型hash表中最长的一个条目
4.7 限制和约束
**limit_except:http、server、location **limit_except GET,只允许使用GET方法
**limit_rate:http、server、location **允许个别客户进行传输率限制
**limit_rate_after:http、server、location **limit_rate生效之前传输数据的总数
**satisfy:location **all或any,默认为all,客户端是否需要所有访问条件都生效或至少一个有效才被允许访问
**internal:location **只允许内部访问
4.8 文件处理和缓存
**direction:http、server、location **大小值或off,如果开启需要一个值,大于指定值的文件将通过Direct I/O系统读取,与sendfile不能同时用
**open_file_cache:http、server、location **允许启用缓存,存储打开文件的相关信息而不是文件本身
**open_file_cache_errors:http、server、location **开启或禁用缓存文件错误
**open_file_cache_min_uses:http、server、location **该指令定义条目总访问次数,open_file_cache在一段时间后清除无活动的条目,如果访问次数超过条目总访问次数,则条目将变为永久活动条目且不被移除
**open_file_cache_vaild:http、server、location **缓存重新有效前nginx将等待的时间
4.9 其他指令
**log_not_found:http、server、location **开启或禁用404(没有找到的HTTP错误)
**log_subrequest:http、server、location **启用或禁用子请求
**merge_slashes:http、server、location **启用该指令具有合并多个连续斜线的效果
**msie_padding:http、server、location **开启时响应错误码为400或更高值时会将响应体填充到512字节
**msie_refresh:http、server、location **开启时当响应码为301或302时,会将请求定义到一个新位置
**resolver:http、server、location **指定域名服务器,将主机名解析到ip
**resolver_timeout:http、server、location **域名查询超时时间
**server_tokens:http、server、location **允许nginx告知客户端它的版本号
**underscores_in_headers:http、server **http头名称中启用或禁用下划线
**variables_hash_max_size:http **变量hash表存放的最大数目
**variables_hash_bucket_size:http **变量hash表中变量的最大长度
**post_action:http、server、location、if **请求完成后的动作
4.10 模块变量
4.10.1 请求头
**
h
t
t
p
h
o
s
t
∗
∗
H
T
T
P
头
部
h
o
s
t
的
值
,
客
户
端
设
法
到
达
的
主
机
名
∗
∗
http_host **HTTP头部host的值,客户端设法到达的主机名 **
httphost∗∗HTTP头部host的值,客户端设法到达的主机名∗∗http_user_agent **HTTP头部User-Agent的值,客户端使用的Web浏览器
**
h
t
t
p
r
e
f
e
r
e
r
∗
∗
H
T
T
P
中
R
e
f
e
r
e
r
的
值
,
服
务
器
从
哪
个
页
面
链
接
来
的
∗
∗
http_referer **HTTP中Referer的值,服务器从哪个页面链接来的 **
httpreferer∗∗HTTP中Referer的值,服务器从哪个页面链接来的∗∗http_via **HTTP中via的值,客户端可能使用的代理
**KaTeX parse error: Double subscript at position 7: http_x_̲forwarded_for *…http_cookie **HTTP中cookie值,包含客户端发送的cookie数据
$http_… 获取其他通过客户端发送的头信息,-换成_,不一一列举
4.10.2 响应头
**
s
e
n
t
h
t
t
p
c
o
n
t
e
n
t
t
y
p
e
∗
∗
C
o
n
t
e
n
t
−
T
y
p
e
的
值
,
指
出
被
传
递
资
源
的
M
I
M
E
类
型
∗
∗
sent_http_content_type **Content-Type的值,指出被传递资源的MIME类型 **
senthttpcontenttype∗∗Content−Type的值,指出被传递资源的MIME类型∗∗sent_http_content_length **Content-Length的值,告知响应体的长度
**
s
e
n
t
h
t
t
p
l
o
c
a
t
i
o
n
∗
∗
L
o
c
a
t
i
o
n
的
值
,
指
出
想
要
访
问
的
l
o
c
a
t
i
o
n
资
源
与
原
始
请
求
中
指
定
的
l
o
c
a
t
i
o
n
不
同
∗
∗
sent_http_location **Location的值,指出想要访问的location资源与原始请求中指定的location不同 **
senthttplocation∗∗Location的值,指出想要访问的location资源与原始请求中指定的location不同∗∗sent_http_last_modified **Last-Modified的值,修改请求资源的日期
**
s
e
n
t
h
t
t
p
c
o
n
n
e
c
t
i
o
n
∗
∗
C
o
n
n
e
c
t
i
o
n
的
值
,
连
接
是
否
持
续
有
效
∗
∗
sent_http_connection **Connection的值,连接是否持续有效 **
senthttpconnection∗∗Connection的值,连接是否持续有效∗∗sent_http_keep_alive **Keep-Alive的值,通过持续连接的时间长度
**
s
e
n
t
h
t
t
p
t
r
a
n
s
f
e
r
e
n
c
o
d
i
n
g
∗
∗
T
r
a
n
s
f
e
r
−
E
n
c
o
d
i
n
g
的
值
,
指
出
相
关
的
响
应
体
所
使
用
编
码
方
法
的
相
关
信
息
∗
∗
sent_http_transfer_encoding **Transfer-Encoding的值,指出相关的响应体所使用编码方法的相关信息 **
senthttptransferencoding∗∗Transfer−Encoding的值,指出相关的响应体所使用编码方法的相关信息∗∗sent_http_cache_control **Cache-Control的值,告诉客户端浏览器是否对资源进行缓存
$sent_http_… 获取发送到客户端的头信息,将头名称中的短横线-换成_,然后英文换成小写
4.11 nginx产生的变量
**
a
r
g
X
X
X
∗
∗
允
许
你
访
问
查
询
字
符
串
,
X
X
X
替
换
为
具
体
参
数
∗
∗
arg_XXX **允许你访问查询字符串,XXX替换为具体参数 **
argXXX∗∗允许你访问查询字符串,XXX替换为具体参数∗∗args **所有结合在一起的字符串查询
**
b
i
n
a
r
y
r
e
m
o
t
e
a
d
d
r
∗
∗
作
为
二
进
制
数
据
的
客
户
端
I
P
地
址
∗
∗
binary_remote_addr **作为二进制数据的客户端IP地址 **
binaryremoteaddr∗∗作为二进制数据的客户端IP地址∗∗body_bytes_sent **响应body中发送的字节数
**
c
o
n
t
e
n
t
l
e
n
g
t
h
∗
∗
h
t
t
p
头
的
C
o
n
t
e
n
t
−
L
e
n
g
t
h
∗
∗
content_length **http头的Content-Length **
contentlength∗∗http头的Content−Length∗∗content_type **http头的Content_Type
**
c
o
o
k
i
e
X
X
X
∗
∗
允
许
访
问
的
c
o
o
k
i
e
数
据
,
X
X
X
换
成
具
体
参
数
∗
∗
cookie_XXX **允许访问的cookie数据,XXX换成具体参数 **
cookieXXX∗∗允许访问的cookie数据,XXX换成具体参数∗∗document_root **当前请求返回root指令指定的值
**
d
o
c
u
m
e
n
t
u
r
i
∗
∗
当
前
请
求
的
U
R
I
,
当
发
生
重
定
向
时
,
与
新
U
R
I
相
同
∗
∗
document_uri **当前请求的URI,当发生重定向时,与新URI相同 **
documenturi∗∗当前请求的URI,当发生重定向时,与新URI相同∗∗host **HTTP请求头中的Host,Nginx自身会给变量赋值
**
h
o
s
t
n
a
m
e
∗
∗
返
回
服
务
器
的
系
统
名
称
∗
∗
host_name **返回服务器的系统名称 **
hostname∗∗返回服务器的系统名称∗∗is_args **如果定义
a
r
g
s
,
args,
args,is_args为?,
a
r
g
s
为
空
,
args为空,
args为空,is_args也为空
**
l
i
m
i
t
r
a
t
e
∗
∗
返
回
一
个
连
接
的
速
率
∗
∗
limit_rate **返回一个连接的速率 **
limitrate∗∗返回一个连接的速率∗∗nginx_version **返回正在运行的Nginx版本
**
p
i
d
∗
∗
返
回
n
g
i
n
x
进
程
标
识
符
∗
∗
pid **返回nginx进程标识符 **
pid∗∗返回nginx进程标识符∗∗query_string **同
a
r
g
s
∗
∗
args **
args∗∗remote_addr **返回客户端IP地址
**
r
e
m
o
t
e
p
o
r
t
∗
∗
返
回
客
户
端
端
口
号
∗
∗
remote_port **返回客户端端口号 **
remoteport∗∗返回客户端端口号∗∗remote_user **如果使用认证返回客户名称
**
r
e
a
l
p
a
t
h
r
o
o
t
∗
∗
客
户
端
请
求
中
返
回
文
档
的
根
目
录
∗
∗
realpath_root **客户端请求中返回文档的根目录 **
realpathroot∗∗客户端请求中返回文档的根目录∗∗request_body **返回客户端请求的body,或body为空
**
r
e
q
u
e
s
t
b
o
d
y
f
i
l
e
∗
∗
请
求
体
被
保
存
,
则
变
量
会
指
出
临
时
文
件
的
路
径
∗
∗
request_body_file **请求体被保存,则变量会指出临时文件的路径 **
requestbodyfile∗∗请求体被保存,则变量会指出临时文件的路径∗∗request_completion **请求完成返回OK,否则为空串
**
r
e
q
u
e
s
t
f
i
l
e
n
a
m
e
∗
∗
返
回
请
求
中
提
供
的
全
文
件
名
∗
∗
request_filename **返回请求中提供的全文件名 **
requestfilename∗∗返回请求中提供的全文件名∗∗request_method **指出请求中使用的HTTP方法
**
r
e
q
u
e
s
t
u
r
i
∗
∗
相
当
于
原
始
的
U
R
I
请
求
∗
∗
request_uri **相当于原始的URI请求 **
requesturi∗∗相当于原始的URI请求∗∗schema **http或https
**
s
e
r
v
e
r
a
d
d
r
∗
∗
服
务
器
I
P
地
址
∗
∗
server_addr **服务器IP地址 **
serveraddr∗∗服务器IP地址∗∗server_name **指令server_name的值,在处理请求时使用
**
s
e
r
v
e
r
p
o
r
t
∗
∗
s
e
r
v
e
r
接
收
数
据
的
套
接
字
端
口
∗
∗
server_port **server接收数据的套接字端口 **
serverport∗∗server接收数据的套接字端口∗∗server_protocol **返回协议和版本号
**
u
r
i
∗
∗
等
同
于
uri **等同于
uri∗∗等同于document_uri
4.12 Location区段
location区段的语法:
location [ = | ~ | ~* | ^~ | @ ] pattern {…}
**= **精确匹配,不能使用正则表达式,location = /abcd
可用 http://website.com/abcd http://website.com/ABCD http://website.com/abcd?param1¶m2
不可用 http://website.com/abcd/ http://website.com/abcde
空 以指定模式开始,location /abcd
上面5个网站均可用
~ URI与指定正则表达式匹配,必须区分大小写,location ~ ^/abcd$
1,3可用,2,4,5不可用
~* URI与指定正则表达式匹配,必须不区分大小写,location ~* ^/abcd$
1,2,3可用,4,5不可用
^~ URI的定位必须以指定模式开始,如果模式匹配,nginx就停止搜索其他模式
@ 定义命名location区段,客户端不能访问,只能由内部请求产生
匹配顺序:
1.= 2.空,URI精确匹配 3.^~ 4.或* 5.与URI请求开始匹配
5 模块配置
5.1 Rewrite模块
在请求到达之后、提供文件之前,客户端的请求包含重定向的URI
**正则表达式 **URL重写rewrite指令执行,将模式替换成后面的正则表达式
正则表达式的作用是验证一个字符串匹配模式
nginx区分内部请求和外部请求,外部请求直接源于客户端,URI尽量与location区段匹配,内部请求被nginx通过特殊的指令触发,内部指令有能力处理内部请求,error_page、index、rewrite、try_files、add_before_body、add_after_body、include SSI命令
内部请求
- 内部重定向;nginx内部重定向客户端请求,URI被改变,请求匹配其他的location区段,并根据不同设置做出相应选择
- 子请求;触发内部请求而产生内容的是子请求
条件结构(if模块)
空 如果指定变量不为空或以0开始的字符串,则条件为真
**=,!= **前者相等为真,后者相反
,*,!,!* 1的情况下匹配为真,2的情况下大小写不敏感匹配,3的情况和1相反,4的情况和2相反
-f,!-f 测试指定文件是否存在
**-d,!-d **测试指定目录是否存在
**-e,!-e **测试文件、目录、符号链接是否存在
**-x,!-x **测试文件是否存在或是否可被执行
有些指令可用在if区段,而有些不可用,但location区段几乎兼容所有指令
指令
**rewrite:http、server、location **允许你对当前请求的URI进行重写,对客户端的请求会被重新设置
**break:server、location、if **阻止进一步的rewrite指令匹配
**return:server、location、if **中断请求过程、返回特定HTTP状态代码
**set:server、location、if **初始化或重定义一个变量
**uninitialized_variable_warn:http、server、location、if **on或off,on的情况下所用配置文件中有变量未初始化的情况下,nginx会发出消息记录
**rewrite_log:http、location、server、if **on的情况下,notice对rewrite每一个操作发出日志消息
5.2 通用重写规则
通过重写规则,类似于rewrite ^/search/(.*)$/search.php?q=$1?,对原有的URL进行修改。
5.3 SSI模块
SSI及服务器端包含,是一种nginx解释的服务器端编程语言,建议自学
最后
以上就是顺心翅膀为你收集整理的学习Nginx_HTTP_Server1 工作环境2 下载和安装Nginx服务器3 Nginx的基本配置4 HTTP配置5 模块配置的全部内容,希望文章能够帮你解决学习Nginx_HTTP_Server1 工作环境2 下载和安装Nginx服务器3 Nginx的基本配置4 HTTP配置5 模块配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复