一. nginx三大用途
反向代理、负载均衡、动静分离
二. location语法详解
- 语法规则
location [=|~|~*|^~] /uri/ { … }
(1) =: 表示精确匹配;
(2) ^~: 表示uri以某个常规字符串开头,理解为匹配 url路径即可;
(3) ~: 表示区分大小写的正则匹配;
(4) ~*: 表示不区分大小写的正则匹配 ;
(5) !~和!~*: 分别为区分大小写不匹配及不区分大小写不匹配 的正则;
(6) / 通用匹配,任何请求都会匹配到。
- 多个location配置的情况下的匹配顺序
首先精确匹配 = -》其次以xx开头匹配^~ -》然后是按文件中顺序的正则匹配 -》最后是交给 / 通用匹配。
当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
例如,有如下匹配规则:
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D,注意:是根据括号内的大小写进行匹配。括号内全是小写,只匹配小写
}
location ~* \.png$ {
#规则E
}
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
location / {
#规则H
}
产生的效果如下:
(1)访问根目录/, 比如http://localhost/ 将匹配规则A
(2)访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
(3)访问 http://localhost/static/a.html 将匹配规则C
(4)访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。
(5)访问 http://localhost/a.xhtml 不会匹配规则F和规则G,
http://localhost/a.XHTML不会匹配规则G,(因为!)。规则F,规则G属于排除法,符合匹配规则也不会匹配到,所以想想看实际应用中哪里会用到。
(6)访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。
- 实际使用中,个人认为至少应该有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ { //以xx开头
root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { //以xx结尾
root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
location / {
proxy_pass http://tomcat:8080/
}
此处原文:https://www.cnblogs.com/jpfss/p/10418150.html
三、 root与alias区别
nginx指定文件路径有两种方式root和alias。主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
- root实例
location ^~ /t/ {
root /www/root/html/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。(root会拼接location后面配置的路径)
2. alias实例
location ^~ /t/ {
alias /www/root/html/new_t/;
}
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。(alias不会拼接location后面配置的路径,会把它丢弃掉,把当前匹配到的目录指向到指定的目录)
注意:
(1)使用alias时,目录名后面一定要加"/"。
(2)alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
(3)alias只能位于location块中。(root可以不放在location中)
四、include
- 应用场景
当存在多个域名时,如果所有配置都写在 nginx.conf 主配置文件中,难免会显得杂乱。所以使用include导入其它外部配置文件,进行拆分配置,这样可以方便配置文件的维护。 - 使用
(1)在nginx的conf目录下创建extra_conf文件夹,并创建test.conf配置文件;
(2)test.conf配置文件内容如下
server {
listen 9001;
server_name 192.168.72.60;
location /edu/ {
proxy_pass http://127.0.0.1:8080/test1/;
}
location /vod/ {
proxy_pass http://127.0.0.1:8081/test2/;
}
}
(3)在 nginx.conf 主配置文件 http{…} 段中加入以下内容
(4)重启nginx
(5)验证
五、nginx基本原理
- 主要由一个master进程和多个worker进行构成
- 一个 master 和多个woker 有好处:
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作;
(2)每个woker是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 继续进行争抢,实现请求过程,不会造成服务中断. - 设置多少个woker合适
worker数和服务器的cpu数相等是最合适的 - 连接数 worker_connection
(1)发送请求时,如果请求的是静态资源,则占用了worker的2个连接数;如果是动态资源(连接数据库等),则占用了woker的4个连接数。
(2)nginx有一个master ,有四个 woker ,每个 woker 支持最大的连接数 1024 ,支持的最大并发数是多少?
i). 普通的静态访问最大并发数是: worker_connections*worker_processes /2 ,
ii). 而如果是 HTTP作为反向代理来说,最大并发数量应该是 worker_connections*worker_processes/4