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站点配置文件需自行编写