How to configure nginx multiple locations

王林
Release: 2023-05-17 22:25:45
forward
2610 people have browsed it

Preface

Configuring multiple locations under the nginx server performs different processing according to different path matches.

nginx commonly used regular expressions

Grammar rules: location [=|~|~*|^~] /uri/ { … }

## The beginning of
  • #= means: exact match.

  • ^~ The beginning means: it is case-sensitive.

  • ~ The beginning means: case-sensitive regular matching.

  • ~* starts with: case-insensitive regular matching.

  • !~ and !~* respectively represent: case-sensitive non-matching and case-insensitive non-matching regular matching.

  • / means: universal matching, any request will be matched.

In the case of multiple location configurations, the matching order is (not verified):

Match = first, then ^~ , followed by regular matching in order in the file, and finally handed over to / universal matching. When a match is successful, the matching is stopped and the request is processed according to the current matching rules.

Actual measurement

server {
    listen       80;
    listen  [::]:80;
    server_name  location.test.com;

    access_log  /var/log/nginx/location.host.access.log  main;

    #*********************注意多个location通常按精确的放前面,模糊大范围的放后面,nginx先找= ******************************
    location = /login.html {#精确匹配 /login
	root /usr/share/nginx/html/test-equal;#请求/login.html相当于寻找资源/usr/share/nginx/html/test-equal/login.html
    }
    location ^~ /prefix/ {#区分大小写且以/prefix/开头
	root /usr/share/nginx/html/test-prefix;#root代表根目录,请求/prefix/prefix.html相当于寻找资源/usr/share/nginx/html/test-prefix/prefix/prefix.html 
    }
    location ~ \.(png|jpg)$ {#不区分大小写且以.png或.jpg结尾
	root /usr/share/nginx/html/test-suffix;#请求/suffix/a.png相当于寻找资源/usr/share/nginx/html/test-suffix/suffix/a.png
    }
    location ^~ /jd/ {# 区分大小写且以/jd/开头
	proxy_pass https://www.jd.com/;#proxy_pass  此处的url以/结尾,则nginx会取掉location部分再转发,例如,请求/jd/电器?name=1 则会转发到https://www.jd.com/电器?name=1
    }
    location ^~ /s {# /会匹配到所有的
	proxy_pass https://www.baidu.com;#proxy_pass  此处的url没有以/结尾,则匹配到的地址全部拼接到代理后的地址,例如,请求/s?name=1 则会转发到https://www.baidu.com/s?name=1
    }
    location  / {# 会返回index.html
	root /usr/share/nginx/html;
	index index.html;	
    }  
}
Copy after login

Remarks

The difference between root and alias under location:

Example:

Client request: http://localhost:8080/user/info/a.txt

If nginx is configured with root: nginx will look for resources: /home/html/user/info/a.txt

location ^~ /user {<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->
root /home/html;#此处可以不以/结尾
}
Copy after login

If nginx is configured with alias: nginx will look for resources: /home/html/info/a.txt

location ^~ /user {<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->
alias /home/html/;#此处以/结尾
}
Copy after login

The above is the detailed content of How to configure nginx multiple locations. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template