0%

Nginx单域名配置多Vue工程和多PHP接口

先简单说下需求吧:

前后端分离项目,一个域名可以访问所有的客户端,例如,我们的项目中前端有单独的访问域名,后端有单独的接口域名,我们的项目存在3个客户端,即小程序端boss后台管理端console客户端,按照最简单的业务来解析域名,则需要6个域名。

由于种种原因吧,只能提供一个域名,所以就要借助Nginx的重定向或者rewrite功能;

大致流程和这里基本保持一致,点击查看Nginx单域名配置多Vue工程和PHP接口

先贴一下代码吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
server {
listen 80;
server_name btg.ma;
index index.html index.htm index.php;
##----boss api-----##
################################################################
location ^~ /boss/b {
// 目录重定向
alias /Users/zhimma/Data/www/Btg_Base_Crs/boss-api/src/public/;
try_files $uri $uri/ @bossBackend;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $request_filename;

include fastcgi_params;
}
}
location @bossBackend {
if (!-e $request_filename) {
// 兼容路由模式-个人猜想
rewrite ^/boss/b/(.*)$ /boss/b/index.php?s=$1 last;
rewrite /boss/b/(.*)$ /boss/b/index.php$is_args$args last;
break;
}
}
##----boss web-----##
################################################################
location ^~ /boss/f {
alias /Users/zhimma/Data/www/Btg_Base_Crs/web/boss/;
if (!-e $request_filename) {
rewrite ^/boss/f/(.*) /boss/f/index.html last;
break;
}
try_files $uri $uri/ @router;
}

##----console api-----##
################################################################
location ^~ /console/b {
alias /Users/zhimma/Data/www/Btg_Base_Crs/console-api/src/public/;
try_files $uri $uri/ @consoleBackend;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $request_filename;

include fastcgi_params;
}
}
location @consoleBackend {
if (!-e $request_filename) {
rewrite ^/console/b/(.*)$ /console/b/index.php?s=$1 last;
rewrite /console/b/(.*)$ /console/b/index.php$is_args$args last;
break;
}
}
##----console web-----##
################################################################
location ^~ /console/f {
alias /Users/zhimma/Data/www/Btg_Base_Crs/web/console/;
if (!-e $request_filename) {
rewrite ^/console/f/(.*) /console/f/index.html last;
break;
}
try_files $uri $uri/ @router;
}

##----crs api-----##
################################################################
location ^~ /crs/b {
alias /Users/zhimma/Data/www/Btg_Base_Crs/crs-api/src/public/;
try_files $uri $uri/ @crsBackend;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $request_filename;

include fastcgi_params;
}
}
location @crsBackend {
if (!-e $request_filename) {
rewrite ^/crs/b/(.*)$ /crs/b/index.php?s=$1 last;
rewrite /crs/b/(.*)$ /crs/b/index.php$is_args$args last;
break;
}
}
##----crs-----##
################################################################
location ^~ /crs/f {
alias /Users/zhimma/Data/www/Btg_Base_Crs/web/crs/;
if (!-e $request_filename) {
rewrite ^/crs/f/(.*) /crs/f/index.html last;
break;
}
try_files $uri $uri/ @router;
}

location @router {
rewrite ~.*$ /index.html last;
}

#location /favicon.ico {
# root /data/wwwroot/mk.vchangyi.com/web_test/backend;
#}


access_log /var/log/nginx/btg.ma.access.log main;
error_log /var/log/nginx/btg.ma.error.log error;
}

最终效果就成为这样子:

domain/origin/type

域名+管理端+前后端,f代表frontend,b代表backend

boss:

前台页面:btg.ma/boss/f

后台接口地址:btg.ma/boss/b

console:

前台页面:btg.ma/console/f

后台接口地址:btg.ma/console/b

crs:

前台页面:btg.ma/crs/f

后台接口地址:btg.ma/crs/b

done;