【nginx学习笔记】

nginx包括一个主进程和一个工作进程,主进程负责接收指令、测试配置文件、杀死一个工作进程、开启一个新的工作进程等,而工作进程则是真正在处理输入输出的进程。当然,工作进程的数量也是可以在配置文件里进行定义的。

主进程比较常用的指令是:

nginx的指令包括块指令和行指令,如果一个块指令内包含其他的指令,则称块指令为context,nginx里有四种context:events、http、server、location。其中location写在server里,而server写在http里,http与events同级并排写。

通常每个server代表着一台虚拟主机。一个简单的实例如下:

listen 80是监听了80端口,后缀的default_server表示的是默认的主机,什么情况下会用到默认主机呢?nginx在获取到http数据包时,会对访问的接口进行比对,如果你访问的端口有多台主机,那么它会继续把header里的Host字段和配置文件里的server_name进行比对找到相应的主机。但是有时候,比方说我用ip地址访问,这时候如果你没有设置default_server,那就会默认选取第一个server配置的主机,如果你配置了这个字段,它就会选择这个配置的主机了。

如果你想在配置未找到主机时返回一个特殊的状态码,可以使用这个配置:

在0.8.48版本以后server_name没设置时默认是""的空字符串,设置为空字符串时,可以匹配没有Host的情况。

上述的location部分可以匹配URI部分,nginx总是选择最长匹配的location。例如 http://location/images/既可以匹配/images/也可以匹配 /,但是因为/images/比较长,所以会匹配进/images/对应的location里。

匹配以后,会把/images/和后面的内容都加到root后去寻找对应的资源。例如http://location/images/example.jpg会找到/data/images/example.jpg。注意,参数是不在匹配中使用的,因为参数的顺序可以任意颠倒:

/?id=1&age=2和/?age=2&id=1是同一种请求

很多时候,大家使用nginx是为了做一个http的请求转发,这时候可以使用类似以下的代码:

它会把来自http://localhost/的请求转发到本地的8080端口。

更多的时候,我们想要配置nginx搭配PHP使用,这时候我们应该使用类似以下的配置:

这里涉及一个新的概念:CGI(Common Gateway Interface)通用网关接口,简单来说,它是沟通http服务器和web应用的一个桥梁。关于这方面的知识,我找到了一篇很详细的文章供参考:https://www.awaimai.com/371.html


HTTP负载均衡:

nginx支持好几种平衡机制,包括round-robin(轮转调度),least-connected(最少连接者优先),ip-hash(ip决定)。

你可以使用类似以下代码的结构编写最简单的负载均衡配置:

在未指定方法的情况下,会默认使用轮转调度。


更多的文档以及操作在官网可以查看:https://nginx.org/en/docs/

-- 热度:24 ℃
-- 于 共写了1617个字
-- 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注