场景是这样的:
docker-compose中起多个服务,其中有一个是nodejs写的作为web API。
这个API 的使用者有2类:
1 docker-compose网络内其他特定服务访问,作为CRUD(post delete update)
2 一部分API 中的get要向外网开放 ,包括浏览器
分开说。
1 根据IP限制访问
在这里需要做到:
1 手工指定docker-compose网络内每个服务的IP地址,而不是每次自动分配ip导致有变化
2 nodejs 每次 收到req 要能得到client的IP地址。
1 https://www.cnblogs.com/xuanmanstein/p/10576476.html
2 直接安装 这个库https://www.npmjs.com/package/request-ip
扫描二维码关注公众号,回复:
5611410 查看本文章
// require request-ip and register it as middleware var requestIp = require('request-ip'); app.use(requestIp.mw()) app.use(function(req, res) { // by default, the ip address will be set on the `clientIp` attribute var ip = req.clientIp; res.end(ip + '\n'); });
对于2
1不加IP过滤
2返回时加避免跨域的header
const headers_res = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': true} ...... app.route("/XXX") .get( (req, res) => { //..... res.set(headers_res) .send(res) }
跨域头只能'*',不能解析多个域的列表,暂时就这样解决了