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

举报
原来是咔咔 发表于 2022/03/27 02:06:51 2022/03/27
【摘要】 author:咔咔 wechat:fangkangfk 我这里复制一份最初始的nginx.conf配置文件 user    设置nginx服务的系统使用用户  (一般情况下是处于注释状态) worker_processes     工作进程数(一般跟cpu核数相...

author:咔咔

wechat:fangkangfk

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

user    设置nginx服务的系统使用用户  (一般情况下是处于注释状态)

worker_processes     工作进程数(一般跟cpu核数相同即可)

error_log     nginx的错误日志

pid             nginx服务启动时候pid 

event   每个进程允许最大的连接数(一般10000左右)


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

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

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

listen这是端口

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

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

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


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

对于location的详解


  
  1. location = / {精确匹配,必须是127.0.0.1/
  2. #规则A
  3. }
  4. location = /login {精确匹配,必须是127.0.0.1/login
  5. #规则B
  6. }
  7. location ^~ /static/ {非精确匹配,并且不区分大小写,比如127.0.0.1/static/js.
  8. #规则C
  9. }
  10. location ~ \.(gif|jpg|png|js|css)$ {区分大小写,以gif,jpg,js结尾
  11. #规则D
  12. }
  13. location ~* \.png$ {不区分大小写,匹配.png结尾的
  14. #规则E
  15. }
  16. location !~ \.xhtml$ {区分大小写,匹配不已.xhtml结尾的
  17. #规则F
  18. }
  19. location !~* \.xhtml$ {
  20. #规则G
  21. }
  22. location / {什么都可以
  23. #规则H
  24. }

那么产生的效果如下:

访问根目录/, 比如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$&quot { 
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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。