【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

简化nginx测试过程:使用测试配置文件的全面指南 (简化字)

用户投稿2024-04-19热门资讯15

Nginx 是一个流行的开源 Web 服务器,用于为网站提供内容。测试 Nginx 配置非常重要,以确保它们正确运行并提供预期的结果。

最常见的 Nginx 测试方法之一是使用测试配置文件。测试配置文件是一个单独的文件,包含用于测试特定配置设置的指令。这是一种隔离和简化测试过程的有效方法。

创建测试配置文件

要创建测试配置文件,请执行以下步骤:

  1. 在 Nginx 配置目录中创建一个新文件,例如 test.conf
  2. 在文件中添加以下指令:
  3. 简化nginx测试过程:使用测试配置文件的全面指南 (简化字) 第1张
    server {listen 8080;server_name example.com;您的测试配置指令在这里
    }
    
  4. 保存并关闭文件。

包含测试配置文件

一旦创建了测试配置文件,就需要将其包含在主 Nginx 配置中。为此,请在 nginx.conf 中添加以下指令:


include test.conf;

这将在 Nginx 启动时加载测试配置文件。

测试配置指令

测试配置指令是 Nginx 用来配置测试设置的特殊指令。以下是一些最常用的指令:

  • test_var :用于测试变量的值。
  • test_size :用于测试文件的大小。
  • test_pipe :用于测试管道是否正常工作。
  • test_cpu :用于测试 CPU 使用情况。
  • test_time :用于测试运行时间。

有关更多信息,请参阅 Nginx 官方文档。

运行测试

要运行测试,请使用以下命令重新启动 Nginx:


nginx -t

这将验证测试配置文件的语法并执行任何指定的测试。

检查测试结果

测试结果将显示在 Nginx 错误日志中。要查看日志,请使用以下命令:


cat /var/log/nginx/error.log

日志将显示测试的成功或失败状态,以及任何错误消息或警告。

结论

使用测试配置文件是简化和隔离 Nginx 测试过程的有效方法。通过执行正确的步骤并使用适当的指令,您可以轻松地测试您的配置设置并确保 Nginx 正确运行。


如何在一台pc上做nginx负载均衡

一、实验环境 阅读本文前,假定读者对nginx安装、虚拟机的安装有了解,并未对这些内容作详细介绍。 一台pc pc安装的操作系统为win7,使用vmware虚拟两台linux,pc 连接到了一台交换机,IP为: 192.168.1.100 nginx版本为1.05,其中win7为负载均衡代理机器,虚拟的linux为web服务器 vmware配置时,在网络连接一项选: bridged,两台虚拟机的ip分别为: 192.168.1.102,192.168.1.103 二、配置文件 1 win7用于负载均衡的nginx的配置文件如下(),修改完后可再控制台输入: nginx -t,来测试修改的配置文件是否正确。 upstream test{ server 192.168.1.102; server 192.168.1.103; } server { listen 80; server_namelocalhost; charset gbk; #access_loglogs/; location / { proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; proxy_connect_timeout 10s; proxy_read_timeout2s; #proxy_send_timeout10s; proxy_pass} 2 linux上作为web服务器的nginx的配置文件可为默认,没有变化 3 修改作为web服务器的nginx,html目录下的,在Welcome to nginx!后面加上描述: i am server x!,这一步是为了区分服务是否生效。 三、运行服务 7:直接在控制台输入:nginx即可 :nginx -c ./conf/ 如果运行成功,这时在你win7的浏览器中输入,这时会有i am server 2显示,按f5刷新,server名字每次都会变化! 四、结论 本文只是在一台机器上简单对轮询试负载均衡做了简单的测试。 后续的实验,将全部在此机器上做测试了

Nginx的配置指令执行的顺序 11 个阶段

Nginx的配置指令执行不是按照配置的先后顺序执行,二十分为11 个阶段post-read、server-rewrite、find-config、rewrite、post-rewrite、preaccess、access、post-access、try-files、content 以及 log , Nginx配置文件中的所有指令是按照上面11个阶段的顺讯执行。 set_real_ip_from的值可以是一个ip,也可以是一个ip段,表示当请求是某一个ip时,使用real_ip_header的值替换realip_remote_addr 和 realip_remote_port中。 运行命令 查看日志其中的remote_addr 已经改为 192.2.2.2,而 $realip_remote_addr 是127.0.0.1。 当Header IP是非法的IP地址,则remote_addr 不改变。 ** 注意 real_ip_header 的默认值为 X-Real-IP 下面我们着重看一下 real_ip_recursive(默认值为off) 1) real_ip_header 的http header中仅有一个ip时,则直接替换remote_addr。 2) real_ip_header 的http header 中有多个ip时 -real_ip_recursive 为off时, 则用第一个ip替换remote_addr -real_ip_recursive 为on时, 则用第一个不在set_real_ip_from 的ip替换remote_addr 例如nginx配置如下: 请求命令为 remote_addr 被替换为 192.168.2.3 (注意这里的顺序是从右至左)。 当real_ip_recursive为off时 remote_addr被替换为 192.178.2.2 例如nginx有以下配置 访问/first之后,日志中输出 Hello world; 这是因为 set $b Hello;定义在server模块下,所以在server-rewrite阶段已经执行。 所以在location块中定义的才能执行的结果才是正确的。 后面再rewrite阶段会详细讲解这几个命令。 下面我们详细看一下ngx_rewrite中的7个指令: 1)rewrite (基本语法: rewrite regex replacement [flag]; 可以配置在server,location和if配置块下) regex是RCPE风格的,如果regex匹配URI,nameURI就会被替换成replacement,replacement就是新的URI,如果同一个配置块下有多个rewrite配置指令,匹配并不会终止,而是继续用新的URI(也就是上一次匹配到的replacement)继续进行匹配,直至返回最后一个匹配。 如果在匹配到之后想要停止匹配直接返回,可是使用flag参数(将其设置为break)。 注意 : 如果匹配到replacement中有关于协议的东西,例如 http:// 或者 https:// 等,处理将终止,直接返回客户端302(Temporary redirect)。 如果Nginx返回给客户端30x,浏览器在接收到这个状态码时,会根据response中的Location响应头再发起一次请求;如果不是30x状态码,所有的跳转只是在nginx内部完成,有兴趣的可以将nginx的日志调为debug看一下整个跳转过程。 举一个例子 当请求curl -I时,nginx接到请求之后,匹配到/first 根据第一个rewrite指令,将URI替换为/test, 然后继续执行第二个rewrite指令,将URI替换为/,之后继续执行第三个指令,返现regex(/test)与新的URI(/)并不匹配,所以最终我们将会看到的返回结果。 开启debug日志,可以看到详细的跳转过程。 再举一例 当请求 curl -I时,首先会执行server块下的rewrite,所有请求都返回302 (Location:)。 下面讲一下rewrite的第三个参数flag: 1.1 )last 如果有last参数,那么停止处理任何rewrite相关的指令,立即用替换后的新URI开始下一轮的location匹配。 1.2)break 停止处理任何rewrite的相关指令,就如同break 指令本身一样。 last的break的相同点在于,立即停止执行所有当前上下文的rewrite模块指令;不同点在于last参数接着用新的URI马上搜寻新的location,而break不会搜寻新的location,直接用这个新的URI来处理请求,这样能避免重复rewite。 因此,在server上下文中使用last,而在location上下文中使用break。 1.3) redirect replacement 如果不包含协议,仍然是一个新的的URI,那么就用新的URI匹配的location去处理请求,不会返回30x跳转。 但是redirect参数可以让这种情况也返回30x(默认302)状态码,就像新的URI包含 http:// 和 https:// 等一样。 这样的话,浏览器看到302,就会再发起一次请求,真正返回响应结果的就是这第二个请求 1.4) permanent 和redirect参数一样,只不过直接返回301永久重定向 虽说URI有了新的,但是要拼接成完整的URL还需要当前请求的scheme,以及由server_name_in_redirect和port_in_redirect指令决定的HOST和PORT. 还有一个比较有意思的应用,就是如果replacement中包含请求参数,那么默认情况下旧URI中的请求参数也会拼接在replacement后面作为新的URI,如果不想这么做,可以在replacement的最后面加上?。 2) break (基本语法: break;可以配置在server,location 和if配置块下) 停止任何处理rewrite的相关指令。 如果出现在location里面,name所有后面的rewrite模块都不会执行,也不发起内部重定向,而是直接用新的URI处理请求。 例如有如下配置 访问curl -I,将返回404; 请求 curl -I将返回 访问curl -I,将返回 404; 请求curl -I,将返回。 综合以上的实验,可以肯定的是在server中配置块中如果使用break指令,下面所有的location将不会执行,而last会进行下一次内部跳转。 location中的break则是直接退出,返回URI的结果; last 进入下一次内部跳转,该location内的rewrite配置指令不再执行。 3) if (基本语法:if(condition) {....}) 可以配置在server和location配置块中 根据condition是true和false决定是否加载 花括号中的配置,花括号中的配置可以继承外面的配置,也可以对外面的指令进行重写。 condition 可以是自定义变量或者系统变量本身,也可以是表达式: a. condition 为变量本身时, 0: false 非0 : true b. 变量可以通过= 、!= 与字符串比较 c. 匹配正则表达式~ !~(大小写敏感)~* !~*(大小写不敏感) d.-f -d -e -x !-f !-d !-e !-x等检验文件或者目录存在或者文件属性 4) return (基本语法: return code [text]; return code URL; return URL; 可以配置在server,location和if配置块中) 停止任何的进一步处理,并且将指定状态码返回给客户端。 如果状态码为444(此状态码是非标准的),那么直接关闭此TCP连接。 return的参数有四种形式: 5) set (基本语法: set $var value; 可以配置在server,location和if配置块中) 这个指令可以用来自定义变量,也可以改变系统变量的值。 6) rewrite_log (基本语法: rewrite_log on | off; 可以配置在http,server,location和if配置块中) 如果开启on,name当rewrite时,会产生一个notice基本的日志;否则不产生日志。 可以在调试的时候将其设置为on。 请求curl -I时,先找到 /first location,在 /first location中rewrite URI 为/进入post-rewrite阶段,进行一次内部跳转,回到find-config阶段,使用新的/做为URI重新匹配location至 location/ 。 这里有一个问题,为什么不在rewrite阶段执行内部跳转?答案就是为了在一个location中支持反复改写URI。 试想一下如果有以下配置。 如果在rewrite阶段直接做内部跳转,那么 第二个rewrite将不能执行,我们必须再声明一个/secondlocation进行URI 重写。 想证实这一点很简单,我们做一个简单的例子: 请求 curl之后将得到 third content相应值,同时可以在日志中看到如下日志。 注意一下,server配置块下的rewrite命令在server-rewrite阶段执行。 nginx限制请求是一个比较复杂的模块,后面会单独解说。 在接口/post_access 中同时配置了ngx_access 和ngx_lua两个模块,这样access阶段就由两个模块一起检查,其中deny all 会让ngx_access模块处理程序拒绝当前请求,而语句access_by_lua () ; 则总是允许访问。 当satify指令为all时,当前的请求会被拒绝,返回403(forbidden)。

跟我学Nginx,nginx 如何处理请求?

基于名称(指 HTTP 请求头 Host 字段)的虚拟服务器指通过 HTTP 请求头的 Host 来决定客户端请求由哪个 server 进行处理。

让我们从一个简单的配置开始,下面配置了三个虚拟服务器,它们均侦听 80 端口 :

上面配置中,nginx 仅测试请求的头字段“Host”以确定应将请求路由到哪个 server。如果“Host”的值与任何 server 名称都不匹配,或者请求根本不包含“Host”头字段,则 nginx 会将请求路由到此端口的默认 server。

上面的配置中,默认 server 是第一个 —— 这是 nginx 的标准默认行为。还可以使用 listen 指令中的 default_server 参数明确设置哪个 server 应该是默认 server:

如果不允许处理没有“Host”头字段的客户端请求(反过来说,只处理带有 Host 头字段的客户端请求),可以定义一个只丢弃请求的 server:

在这里,server_name 设置为一个空字符串,它将匹配没有“Host”头字段的请求,并返回一个特殊的 nginx 非标准代码 444 来关闭连接。

让我们看一个更复杂的配置,其中一些虚拟服务器侦听不同的地址:

上面配置中,nginx 首先根据 server 块的 listen 指令测试请求的 IP 地址和端口。然后,它根据与 IP 地址和端口匹配的 server 块的 server_name 条目测试请求的“Host”标头字段。如果未找到服务器名称,则请求将由默认服务器处理。例如,在 192.168.1.1:80 端口上收到的 请求将由 192.168.1.1:80 端口的默认服务器处理,即由第一个服务器处理,因为没有 为此端口定义。

如前所述,默认服务器是监听端口的一个属性,可以为不同的端口定义不同的默认服务器:

现在让我们看看 nginx 如何选择一个位置来处理一个典型的、简单的 PHP 站点的请求:

无论列出的顺序如何,nginx 首先搜索由文字字符串给出的最具体的前缀位置。在上面的配置中,唯一的前缀位置是“/”,并且由于它匹配任何请求,因此将用作最后的手段。然后 nginx 按照配置文件中列出的顺序检查正则表达式给出的位置。第一个匹配的表达式停止搜索,nginx 将使用这个位置。如果没有正则表达式匹配请求,则 nginx 使用之前找到的最具体的前缀位置。

注意: 所有类型的位置仅测试不带参数的请求行的 URI 部分。这样做是因为查询字符串中的参数可以通过多种方式给出,例如:

此外,任何人都可以在查询字符串中请求任何内容:

现在让我们看看在上面的配置中如何处理请求:

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

简化nginx测试过程:使用测试配置文件的全面指南 (简化字) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!