nginx.conf配置文件解析(http、server、location)
标签: nginxnginx-conf
2017-04-26 20:10 1031人阅读 评论(0) 收藏 举报
分类:
Nginx(8)
版权声明:本文为博主原创文章,未经博主允许不得转载。
nginx.conf文件在安装目录/conf目录下
1、定义Nginx运行的用户和用户组
user nginx nginx;
2、nginx进程数,建议设置为等于CPU总核心数
worker_processes 1;
3、全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
4、进程文件
pid /var/run/nginx.pid;
5、工作模式与连接数上限:worker_connections是单个后台worker process进程的最大并发链接数,并发总数是 worker_processes 和 worker_connections 的乘积, 即 max_clients = worker_processes * worker_connections
events {
worker_connections 1024;
}
6、http下的一些配置及其意义
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压缩输出
7、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支持三种类型的 虚拟主机配置
- 1、基于ip的虚拟主机, (一块主机绑定多个ip地址)
server{
listen 192.168.1.1:80;
server_name localhost;
}
server{
listen 192.168.1.2:80;
server_name localhost;
}
- 2、基于域名的虚拟主机(servername)
#域名可以有多个,用空格隔开
server{
listen 80;
server_name www.nginx1.com www.nginx2.com;
}
server{
listen 80;
server_name www.nginx3.com;
}
- 3、基于端口的虚拟主机(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配置规则
1、“ =”前缀的指令严格匹配这个查询。如果找到,停止搜索。
2、所有剩下的常规字符串,匹配最精确的(一般最长的那个)。如果这个匹配使用^?前缀,搜索停止。
3、正则表达式,在配置文件中是从上往下匹配的
4、如果第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种) 这种。
另外nginx的反向代理、Tengine(Nginx的升级版)的健康检查 也用到了location知识,可以去看看