【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;  }

相關文章
相關標籤/搜索