背景
历史项目,前端包是在后端的包里,发版总需要找后端发版,考虑将前后端拆开。
常规
常规项目,如果前后端在一台服务器上,并且需要nginx进行配置代理时,一般会在路径上做区分,比如:
前端: xxx.xxx.xx/bbq/index
后端接口路径:xxx.xxx.xx/bbq-end/
非常规
有常规,就有非常规。我当前的项目就遇到了前后端需要共用一个path来进行区分。
前端:xxx.xxx.xx/bbq/index
后端接口路径:xxx.xxx.xx/bbq/
需要在nginx下使用同一个关键path:bbq 来进行区分及转发。
先说最终配置
前端相关nginx配置
location = /bbq/ {
alias /home/appadmin/nginx/html/bbq/;
try_files $uri $uri/index.html =404;
}
location ^~ /bbq/static/ {
alias /home/appadmin/nginx/html/bbq/static/;
}
location ^~ /bbq/assets/ {
alias /home/appadmin/nginx/html/bbq/assets/;
}
后端相关nginx配置
location ~ ^/tkp-wechat-health/(.+)$ {
proxy_pass http://xx.xx.xx.xx:6003;
}
配置解析及相关问题
nginx配置解析
location = /bbq/ 用来匹配html文件的;
location ^~ /bbq/static/ 用来匹配前端static文件夹下内容
location ^~ /bbq/assets/ 用来匹配前端assets文件夹下内容
nginx配置关键点
利用location匹配的优先级,来区分前后端及相关资源
nginx中location相关配置
- = 表示进行普通字符串精确匹配。 location ~ /bbp {}
- ^~ 表示匹配路径前缀,如果找到则停止搜索。location ^~ /bbq {}
- ~* 表示执行一个正则匹配,不区分大小写 location ~* /bbq {}
- ~ 表示执行一个正则匹配,区分大小写 location ~ /bbq {}
- 普通路径前缀匹配,如:location /bbq { }
从1到5,优先级逐渐降低。
配置中相关注意点
-
alias与root的区别。
root: 用于指定文件目录,将URI附加到指定的根路径上,生成一个完整的文件系统。location /documents { root /var/wwww; # 当请求 /documents/report.pdf时,nginx会将URI附加到root后,在服务器的/var/www/documents/report.pdf路径找文件。 }alias: 用于替换URI中的一部分到指定路径。
location /documents { alias /var/www/documents; # 当请求/documents/report.pdf时,nginx会将匹配到/documents部分替换为指定路径:/var/www/documents/report.pdf } location /test { alias /var/www/documents; # 当请求/test/report.pdf时,最终访问路径:/var/www/documents/report.pdf } -
index 与 try_files区别。 try_files用于按照顺序检查文件或URI的存在性,并返回第一个找到的文件或URI。如果所有指定的文件或URI都不存在,则执行最后一个参数,它通常是一个URI或返回的状态码。
例如:location / { try_files $uri $uri/ /index.html # 1.先尝试将$uri当文件来处理 # 2.尝试将$uri当作目录来处理 # 3.如果前两步都失败,则返回/index.html }注:uri 指:/path/to/resource?param1=value
index 用于定义当前请求的是目录时,Nginx应该返回哪个文件作为默认索引文件。 例如:
location / {
root /var/www/example.com
index index.html index.htm
# 例如请求一个目录/test/ 并且没有指定具体的文件名时:
# 1.先行查找index.html
# 2.没找到找index.htm
}