【Nginx】第四节 nginx.conf配置文件解读即location详解
author:咔咔
wechat:fangkangfk
我这里复制一份最初始的nginx.conf配置文件
user 设置nginx服务的系统使用用户 (一般情况下是处于注释状态)
worker_processes 工作进程数(一般跟cpu核数相同即可)
error_log nginx的错误日志
pid nginx服务启动时候pid
event 每个进程允许最大的连接数(一般10000左右)
-
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这一层,、
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/
}
未试验过的其他信息:
三、ReWrite语法
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
1、下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
2、下面是可以用作判断的全局变量
例: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
四、Redirect语法
server {
listen 80;
server_name start.igrow.cn;
index index.html index.php;
root html;
if ($http_host !~ “^star\.igrow\.cn$" {
rewrite ^(.*) http://star.igrow.cn$1 redirect;
}
}
五、防盗链location ~* \.(gif|jpg|swf)$ {
valid_referers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_referer) {
rewrite ^/ http://$host/logo.png;
}
}
六、根据文件类型设置过期时间
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
expires 1h;
break;
}
}
七、禁止访问某个目录
location ~* \.(txt|doc)${
root /data/www/wwwroot/linuxtone/test;
deny all;
}
文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fangkang7/article/details/84781544
- 点赞
- 收藏
- 关注作者
评论(0)