【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左右)


        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$&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个月内不可修改。