【Nginx】第四节 nginx.conf配置文件解读即location详解

author:咔咔php

wechat:fangkangfkcss

 

我这里复制一份最初始的nginx.conf配置文件html

 

user    设置nginx服务的系统使用用户  (通常状况下是处于注释状态)linux

worker_processes     工做进程数(通常跟cpu核数相同便可)nginx

error_log     nginx的错误日志web

pid             nginx服务启动时候pid 后端

event   每一个进程容许最大的链接数(通常10000左右)tomcat

 

2 #user  nobody;
  3 worker_processes  1;
  4 
  5 #error_log  logs/error.log;
  6 #error_log  logs/error.log  notice;
  7 #error_log  logs/error.log  info;
  8 
  9 #pid        logs/nginx.pid;
 10 
 11 
 12 events {
 13     worker_connections  1024;
 14 }
 15 
 16 
 17 http {
 18     include       mime.types;
 19     default_type  application/octet-stream;
 20 
 21     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 22     #                  '$status $body_bytes_sent "$http_referer" '
 23     #                  '"$http_user_agent" "$http_x_forwarded_for"';
 24 
 25     #access_log  logs/access.log  main;
 26 
 27     sendfile        on;
 28     #tcp_nopush     on;
 29 
 30     #keepalive_timeout  0;
 31     keepalive_timeout  65;
 32 
 33     #gzip  on;
 34 
 35     server {
 36         listen       80;
 37         server_name  localhost;
 38 
 39         #charset koi8-r;
 40 
 41         #access_log  logs/host.access.log  main;
 42 
 43         location / {
 44             root   html;
 45             index  index.html index.htm;
 46         }
 47 
 48         #error_page  404              /404.html;
 49 
 50         # redirect server error pages to the static page /50x.html
 51         #
 52         error_page   500 502 503 504  /50x.html;
 53         location = /50x.html {
 54             root   html;
 55         }
 56 
 57         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 58         #
 59         #location ~ \.php$ {
 60         #    proxy_pass   http://127.0.0.1;
 61         #}
 62 
 63         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 64         #
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 70             include        fastcgi_params;
 71         }
 72 
 75         #
 76         #location ~ /\.ht {
 77         #    deny  all;
 78         #}
 79     }
 80 
 81 
 82     # another virtual host using mix of IP-, name-, and port-based configuration
 83     #
 84     #server {
 33     #gzip  on;
 36         listen       80;
 37         server_name  localhost;
 38 
 39         #charset koi8-r;
 40 
 41         #access_log  logs/host.access.log  main;
 42 
 43         location / {
 44             root   html;
 45             index  index.html index.htm;
 46         }
 47 
 48         #error_page  404              /404.html;
 49 
 50         # redirect server error pages to the static page /50x.html
 51         #
 52         error_page   500 502 503 504  /50x.html;
 53         location = /50x.html {
 54             root   html;
 55         }
 56 
 57         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 58         #
 59         #location ~ \.php$ {
 60         #    proxy_pass   http://127.0.0.1;
 61         #}
 62 
 63         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 64         #
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 70             include        fastcgi_params;
 71         }
 72 
 73         # deny access to .htaccess files, if Apache's document root
 74         # concurs with nginx's one
 75         #
 76         #location ~ /\.ht {
 77         #    deny  all;
 78         #}
 79     }
 80 
 81 
 82     # another virtual host using mix of IP-, name-, and port-based configuration
 83     #
 84     #server {
 85     #    listen       8000;
 86     #    listen       somename:8080;
 87     #    server_name  somename  alias  another.alias;
 88 
 89     #    location / {
 90     #        root   html;
 91     #        index  index.html index.htm;
 92     #    }
 93     #}
 94 
 95 
 96     # HTTPS server
 97     #
 98     #server {
 99     #    listen       443 ssl;
100     #    server_name  localhost;
101 
102     #    ssl_certificate      cert.pem;
103     #    ssl_certificate_key  cert.key;
104 
105     #    ssl_session_cache    shared:SSL:1m;
106     #    ssl_session_timeout  5m;
107 
108     #    ssl_ciphers  HIGH:!aNULL:!MD5;
109     #    ssl_prefer_server_ciphers  on;
110 
111     #    location / {
112     #        root   html;
113     #        index  index.html index.htm;
114     #    }
115     #}
116 
117  include vhosts/*.conf;

 

 

下来就是咱们最重要的一部分,那就是咱们的默认配置语法,这块的代码咱们抽离出来服务器

这里咱们主要来解释server这一层,、session

listen这是端口

server_name这个你得域名,或者二级域名

root这个放置的是你得项目访问目录  :例如TP5来讲,这里就能够放置127.0.0.1/tp5/public/

下面这个location /这个是将项目项目路径中的index.php去除掉

1 server {
  2         listen       8081;
  3         server_name 域名地址;
  4         index index.html index.htm index.php;
  5         root  项目访问路径;
  6         location / {
  7                 rewrite ^/$/index.php last;
  8                 rewrite ^/(?!index\.php|robots\.txt|static|uploads)(.*)$ /index.php/$1 last;
  9         }
 10         location ~ \.php($|/) {
 11 
 12                 fastcgi_pass   127.0.0.1:9000;
 13                 fastcgi_index  index.php;
 14                 fastcgi_split_path_info ^(.+\.php)(.*)$;
 15                 fastcgi_param   PATH_INFO $fastcgi_path_info;
 16                 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 17                 fastcgi_param    PATH_TRANSLATED    $document_root$fastcgi_path_info;
 18                 include        fastcgi_params;
 19         }
 20 
 21         if (!-e $request_filename) {
 22                 rewrite ^/(.*)$ /index.php/$1 last;
 23                 break;
 24         }
 25         access_log off;
 26 }

 

对于location的详解

location = / {精确匹配,必须是127.0.0.1/

#规则A

}

location = /login {精确匹配,必须是127.0.0.1/login

#规则B

}

location ^~ /static/ {非精确匹配,而且不区分大小写,好比127.0.0.1/static/js.

#规则C

}

location ~ \.(gif|jpg|png|js|css)$ {区分大小写,以gif,jpg,js结尾

#规则D

}

location ~* \.png$ {不区分大小写,匹配.png结尾的

#规则E

}

location !~ \.xhtml$ {区分大小写,匹配不已.xhtml结尾的

#规则F

}

location !~* \.xhtml$ {

#规则G

}

location / {什么均可以

#规则H

}

那么产生的效果以下:

访问根目录/, 好比http://localhost/ 将匹配规则A

访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H

访问 http://localhost/static/a.html 将匹配规则C

访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,可是规则D顺序优先,规则E不起做用, 而 http://localhost/static/c.png 则优先匹配到 规则C

访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,由于规则E不区分大小写。

访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,由于不区分大小写。规则F,规则G属于排除法,符合匹配规则可是不会匹配到,因此想一想看实际应用中哪里会用到。

访问 http://localhost/category/id/1111 则最终匹配到规则H,由于以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,好比FastCGI(php),tomcat(jsp),nginx做为方向代理服务器存在。

 

因此实际使用中,我的以为至少有三个匹配规则定义,以下:

#这里是直接转发给后端应用服务器了,也能够是一个静态首页

# 第一个必选规则

location = / {

proxy_pass http://tomcat:8080/index

}

# 第二个必选规则是处理静态文件请求,这是nginx做为http服务器的强项

# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {

root /webroot/static/;

}

location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {

root /webroot/res/;

}

#第三个规则就是通用规则,用来转发动态请求到后端应用服务器

#非静态文件请求就默认是动态请求,本身根据实际把握

#毕竟目前的一些框架的流行,带.php,.jsp后缀的状况不多了

location / {

proxy_pass http://tomcat:8080/

}

#直接匹配网站根,经过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。

#这里是直接转发给后端应用服务器了,也能够是一个静态首页

# 第一个必选规则

location = / {

proxy_pass http://tomcat:8080/index

}

# 第二个必选规则是处理静态文件请求,这是nginx做为http服务器的强项

# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用

location ^~ /static/ {

root /webroot/static/;

}

location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {

root /webroot/res/;

}

#第三个规则就是通用规则,用来转发动态请求到后端应用服务器

#非静态文件请求就默认是动态请求,本身根据实际把握

#毕竟目前的一些框架的流行,带.php,.jsp后缀的状况不多了

location / {

proxy_pass http://tomcat:8080/

}

 

未试验过的其余信息:

3、ReWrite语法  last – 基本上都用这个Flag。  break – 停止Rewirte,不在继续匹配  redirect – 返回临时重定向的HTTP状态302  permanent – 返回永久重定向的HTTP状态301  一、下面是能够用来判断的表达式:  -f和!-f用来判断是否存在文件  -d和!-d用来判断是否存在目录  -e和!-e用来判断是否存在文件或目录  -x和!-x用来判断文件是否可执行  二、下面是能够用做判断的全局变量  例:http://localhost:88/test1/test2/test.php  $host:localhost  $server_port:88  $request_uri:http://localhost:88/test1/test2/test.php  $document_uri:/test1/test2/test.php  $document_root:D:\nginx/html  $request_filename:D:\nginx/html/test1/test2/test.php  4、Redirect语法  server {  listen 80;  server_name start.igrow.cn;  index index.html index.php;  root html;  if ($http_host !~ “^star\.igrow\.cn$&quot {  rewrite ^(.*) http://star.igrow.cn$1 redirect;  }  }  5、防盗链location ~* \.(gif|jpg|swf)$ {  valid_referers none blocked start.igrow.cn sta.igrow.cn;  if ($invalid_referer) {  rewrite ^/ http://$host/logo.png;  }  }  6、根据文件类型设置过时时间  location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {  if (-f $request_filename) {  expires 1h;  break;  }  }  7、禁止访问某个目录  location ~* \.(txt|doc)${  root /data/www/wwwroot/linuxtone/test;  deny all;  }