Contents
  1. 1. 碰到的问题
  2. 2. 解决的方案
    1. 2.1. 1. nginx 做请求转发
    2. 2.2. 2. 服务端处理跨域请求

碰到的问题

今天做了一个feature的admin的接口api/xxv/abc/feature,便于ops在admin上直接管理配置信息。但是我们的域名是 ttt.company.com,所以admin应该访问
http://ttt.company.com/api/xxv/abc/feature
但是admin的域名是admin(-test).company.com,而且admin后台是需要登录的。这样就导致了前端跨域传cookie会有问题。

解决的方案

1. nginx 做请求转发

目前的做法是在服务端之前做一个反向代理,admin请求同域名的
http://admin-test.company.com/api/abc/feature
然后在nginx层将请求转发到
http://ttt.company.com/api/xxv/abc/feature

对于staging和online不同的环境,将请求转发到不同的server即可。

请求转发
http://admin-test.company.com/api/abc/feature
->
http://ttt.company.com/api/xxv/abc/feature

ngin配置

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name admin-test.company.com;
location /api/abc {
rewrite /api/abc/(.*) /api/xxv/$1 break;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://staging.server.hostname:8080;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name admin.company.com;
location /api/abc {
rewrite /api/abc/(.*) /api/xxv/$1 break;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://myserver-write-nodes;
}
}

2. 服务端处理跨域请求

在返回的response header中加入允许跨域访问的属性。例如:

Access-Control-Allow-Origin: {允许的域名}

更多信息参考:跨域 HTTP 请求(Cross-site HTTP request)

Contents
  1. 1. 碰到的问题
  2. 2. 解决的方案
    1. 2.1. 1. nginx 做请求转发
    2. 2.2. 2. 服务端处理跨域请求