nginx.conf配置文件解析(http、server、location proxy_pass)

nginx.conf配置文件解析(http、server、location)

标签: nginxnginx-conf
分类:

nginx.conf文件在安装目录/conf目录下node


一、定义Nginx运行的用户和用户组linux

user nginx nginx;

二、nginx进程数,建议设置为等于CPU总核心数nginx

worker_processes 1;

三、全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]正则表达式

#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;

四、进程文件windows

pid /var/run/nginx.pid;

五、工做模式与链接数上限:worker_connections是单个后台worker process进程的最大并发连接数,并发总数是 worker_processes 和 worker_connections 的乘积, 即 max_clients = worker_processes * worker_connections服务器

events { worker_connections 1024; }

六、http下的一些配置及其意义markdown

include       mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型 sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来 输出文件,对于普通应用设为 on,若是用来进行下载等应用磁盘IO重负载应用,可设置 为off,以平衡磁盘与网络I/O处理速度,下降系统的负载。注意:若是图片显示不正常 把这个改为off。 autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。 tcp_nopush on; #防止网络阻塞 tcp_nodelay on; #防止网络阻塞 keepalive_timeout 120; #长链接超时时间,单位是秒 gzip on; #开启gzip压缩输出

七、server虚拟主机一些配置及其意义
这里写图片描述
例如:网络

http{
 #虚拟主机1 server{ listen 80; server_name www.nginx1.com; location / { root html; index index.html index.htm; } } #虚拟主机2 server{ listen 80; server_name localhost; location / { root html; index index.html index.htm; } } }

这里server_name配置域名的时候,若是是本地测试,须要到windos下hosts文件里,把你的域名和ip添加进去(C:\Windows\System32\drivers\etc\hosts)并发

nginx支持三种类型的 虚拟主机配置

  • 一、基于ip的虚拟主机, (一块主机绑定多个ip地址)
server{ listen 192.168.1.1:80; server_name localhost; } server{ listen 192.168.1.2:80; server_name localhost; }
  • 二、基于域名的虚拟主机(servername)
#域名能够有多个,用空格隔开 server{ listen 80; server_name www.nginx1.com www.nginx2.com; } server{ listen 80; server_name www.nginx3.com; }
  • 三、基于端口的虚拟主机(listen不写ip的端口模式)
server{ listen 80; server_name localhost; } server{ listen 81; server_name localhost; }

server下的location映射解析(官方中文文档:ngx_http_core_module)匹配规则:location [ = | ~ | ~* | ^~ ] uri { ... }

location URI {}:

对当前路径及子路径下的全部对象都生效;

location = URI {}:

精确匹配指定的路径(注意URL最好为具体路径),不包括子路径,所以,只对当前资源生效;

location ~ URI {}:

location ~* URI {}:

模式匹配URI,此处的URI可以使用正则表达式,~区分字符大小写,~*不区 分字符大小写;

location ^~ URI {}:

再也不检查正则表达式

优先级:= > ^~ > ~|~* > /|/dir/

举例:

location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] } 
解答:请求“/”匹配配置A, 请求“/index.html”匹配配置B, 请求“/documents/document.html”匹配配置C, 请求“/images/1.gif”匹配配置D, 请求“/documents/1.jpg”匹配配置E

location配置规则

一、“ =”前缀的指令严格匹配这个查询。若是找到,中止搜索。
二、全部剩下的常规字符串,匹配最精确的(通常最长的那个)。若是这个匹配使用^〜前缀,搜索中止。
三、正则表达式,在配置文件中是从上往下匹配的
四、若是第3条规则产生匹配的话,结果被使用。不然,如同从第2条规则被使用
特殊状况:
两种状况下,不须要继续匹配正则 location :
( 1 ) 当普通 location 前面指定了“ ^~ ”,特别告诉 Nginx 本条普 通 location 一旦匹配上,则不须要继续正则匹配。
( 2 ) 当普通location 刚好严格匹配上 ,不是最大前缀匹配,则再也不继续匹配正则

 

在nginx中配置proxy_pass时,当在后面的url加上了/,至关因而绝对根路径,则nginx不会把location中匹配的路径部分代理走;若是没有/,则会把匹配的路径部分也给代理走。

 

下面四种状况分别用http://192.168.1.4/proxy/test.html 进行访问。

第一种:

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/;

}

会被代理到http://127.0.0.1:81/test.html 这个url

 

第二咱(相对于第一种,最后少一个 /)

location  /proxy/ {

          proxy_pass http://127.0.0.1:81;

}

会被代理到http://127.0.0.1:81/proxy/test.html 这个url

 

第三种:

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/ftlynx/;

}

会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。

 

第四种状况(相对于第三种,最后少一个 / ):

location  /proxy/ {

          proxy_pass http://127.0.0.1:81/ftlynx;

}

会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url

 

上面的结果都是本人结合日志文件测试过的。从结果能够看出,应该说分为两种状况才正确。即http://127.0.0.1:81 (上面的第二种) 这种和 http://127.0.0.1:81/.... (上面的第1,3,4种) 这种。

hosts,本地测试

linux 修改/etc/hosts,加一条:127.0.0.1 www.you域名.cn .windows,修改hostname.

另外nginx的反向代理Tengine(Nginx的升级版)的健康检查 也用到了location知识,能够去看看

相关文章
相关标签/搜索