我是靠谱客的博主 顺心翅膀,最近开发中收集的这篇文章主要介绍学习Nginx_HTTP_Server1 工作环境2 下载和安装Nginx服务器3 Nginx的基本配置4 HTTP配置5 模块配置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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/errornginx_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的值,客户端设法到达的主机名 ​ ** httphostHTTPhosthttp_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的值,服务器从哪个页面链接来的 ​ ** httprefererHTTPRefererhttp_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类型 ​ ** senthttpcontenttypeContentTypeMIMEsent_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不同 ​ ** senthttplocationLocation访locationlocationsent_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的值,连接是否持续有效 ​ ** senthttpconnectionConnectionsent_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的值,指出相关的响应体所使用编码方法的相关信息 ​ ** senthttptransferencodingTransferEncoding使sent_http_cache_control **Cache-Control的值,告诉客户端浏览器是否对资源进行缓存
$sent_http_… 获取发送到客户端的头信息,将头名称中的短横线-换成_,然后英文换成小写

4.11 nginx产生的变量

​ ** a r g X X X ∗ ∗ 允 许 你 访 问 查 询 字 符 串 , X X X 替 换 为 具 体 参 数 ​ ∗ ∗ arg_XXX **允许你访问查询字符串,XXX替换为具体参数 ​ ** argXXX访XXXargs **所有结合在一起的字符串查询
​ ** b i n a r y r e m o t e a d d r ∗ ∗ 作 为 二 进 制 数 据 的 客 户 端 I P 地 址 ​ ∗ ∗ binary_remote_addr **作为二进制数据的客户端IP地址 ​ ** binaryremoteaddrIPbody_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 ​ ** contentlengthhttpContentLengthcontent_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访cookieXXXdocument_root **当前请求返回root指令指定的值
​ ** d o c u m e n t u r i ∗ ∗ 当 前 请 求 的 U R I , 当 发 生 重 定 向 时 , 与 新 U R I 相 同 ​ ∗ ∗ document_uri **当前请求的URI,当发生重定向时,与新URI相同 ​ ** documenturiURIURIhost **HTTP请求头中的Host,Nginx自身会给变量赋值
​ ** h o s t n a m e ∗ ∗ 返 回 服 务 器 的 系 统 名 称 ​ ∗ ∗ host_name **返回服务器的系统名称 ​ ** hostnameis_args **如果定义 a r g s , args, argsis_args为?, a r g s 为 空 , args为空, argsis_args也为空
​ ** l i m i t r a t e ∗ ∗ 返 回 一 个 连 接 的 速 率 ​ ∗ ∗ limit_rate **返回一个连接的速率 ​ ** limitratenginx_version **返回正在运行的Nginx版本
​ ** p i d ∗ ∗ 返 回 n g i n x 进 程 标 识 符 ​ ∗ ∗ pid **返回nginx进程标识符 ​ ** pidnginxquery_string **同 a r g s ​ ∗ ∗ args ​ ** argsremote_addr **返回客户端IP地址
​ ** r e m o t e p o r t ∗ ∗ 返 回 客 户 端 端 口 号 ​ ∗ ∗ remote_port **返回客户端端口号 ​ ** remoteportremote_user **如果使用认证返回客户名称
​ ** r e a l p a t h r o o t ∗ ∗ 客 户 端 请 求 中 返 回 文 档 的 根 目 录 ​ ∗ ∗ realpath_root **客户端请求中返回文档的根目录 ​ ** realpathrootrequest_body **返回客户端请求的body,或body为空
​ ** r e q u e s t b o d y f i l e ∗ ∗ 请 求 体 被 保 存 , 则 变 量 会 指 出 临 时 文 件 的 路 径 ​ ∗ ∗ request_body_file **请求体被保存,则变量会指出临时文件的路径 ​ ** requestbodyfilerequest_completion **请求完成返回OK,否则为空串
​ ** r e q u e s t f i l e n a m e ∗ ∗ 返 回 请 求 中 提 供 的 全 文 件 名 ​ ∗ ∗ request_filename **返回请求中提供的全文件名 ​ ** requestfilenamerequest_method **指出请求中使用的HTTP方法
​ ** r e q u e s t u r i ∗ ∗ 相 当 于 原 始 的 U R I 请 求 ​ ∗ ∗ request_uri **相当于原始的URI请求 ​ ** requesturiURIschema **http或https
​ ** s e r v e r a d d r ∗ ∗ 服 务 器 I P 地 址 ​ ∗ ∗ server_addr **服务器IP地址 ​ ** serveraddrIPserver_name **指令server_name的值,在处理请求时使用
​ ** s e r v e r p o r t ∗ ∗ s e r v e r 接 收 数 据 的 套 接 字 端 口 ​ ∗ ∗ server_port **server接收数据的套接字端口 ​ ** serverportserverserver_protocol **返回协议和版本号
​ ** u r i ∗ ∗ 等 同 于 uri **等同于 uridocument_uri

4.12 Location区段

location区段的语法:
​ location [ = | ~ | ~* | ^~ | @ ] pattern {…}

​ **= **精确匹配,不能使用正则表达式,location = /abcd
​ 可用 http://website.com/abcd http://website.com/ABCD http://website.com/abcd?param1&param2
​ 不可用 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 模块配置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部