Yii2在代理转发时获取客户端真实IP

本文介绍了如何使用Node.js的express-http-proxy中间件将www.test.com/api请求代理到api.test.com,同时展示Yii2的配置以接受并处理这些请求。在Yii2的main.php配置中,关闭了CSRF验证并设置了可信主机。另外,还提供了使用nginx进行反向代理的配置示例,展示了如何分别处理www.test.com和api.test.com的请求。
摘要由CSDN通过智能技术生成

www.test.com由node来处理,api.test.com由yii2处理,遇到www.test.com/api这种url通过代理转发给api.test.com处理

使用node作为中间层进行代理转发

var app = express();

var proxy = require('express-http-proxy');
app.use('/api', proxy('api.test.com',{
    proxyReqOptDecorator: function(proxyReqOpts, srcReq) {
        return new Promise(function(resolve, reject) {
            proxyReqOpts.headers['X-Forwarded-For'] = srcReq.ip;
            resolve(proxyReqOpts);
        })
    }
}));

Yii2 main.php配置文件

    'components' => [
        'request' => [
            'cookieValidationKey' => '',
            'enableCsrfValidation' => false,
            'enableCsrfCookie' => false,
            'enableCookieValidation' => false,
            'baseUrl' => '/',
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ],
            'trustedHosts' => [
                '192.168.1.29',//node的主机地址,必须设置;
                //'*',//允许所有
            ],
            'ipHeaders' => [
                'X-Forwarded-For',
            ],
        ],
]

srcReq.ip为原客户端IP,通过request.headers设置X-Forwarded-For传给Yii2

也可以使用nginx的代理功能
nginx站点配置文件www.test.com.conf

server {
        listen       80;
        server_name www.test.com;
        charset      utf-8;
        client_max_body_size 30M;

        root         /website/wwwroot/www.test.com;
        
        #反向代理给nodejs
        location / {
            proxy_pass http://192.168.1.29:3000;
        }
        #反向代理给php
        location /api/ {
            proxy_pass http://api.test.com/;
            
            proxy_set_header Host       $proxy_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

api.test.com.conf的nginx站点配置文件需自行编写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值