Tag: mod proxy

Express 3,Apache代理和basepath

我有一个较旧的Express 2.5.9应用程序,我正在使用Express 3.4.x进行最新的操作。 在生产中,应用程序由Apache使用RewriteRule代理: RewriteRule ^/path/to/app/(.*)$ http://nodeserver.domain.com:3000/$1 [P,L] RewriteRule ^/path/to/app$ /path/to/app/ [R,L] 因此,在生产中, http://domain.com/path/to/app/foo ://domain.com/path/to/app/foo被代理到http://nodeserver.domain.com:3000/foo ,而Express则正常处理/ foo路由。 在Express 2.x中,我使用了basepath设置,以便在生产环境中正确处理redirect(例如,如果我需要redirect到/login , basepath设置,设置为/path/to/app将实际redirect到/path/to/app/login 。在开发中没有设置basepath (例如,在http://localhost:3000访问应用程序)。 在Express 3中已经删除了basepath ,所以设置不再起作用,我的redirect也没有(例如,如果我去http://domain.com/path/to/app/admin ,该路由有中间件redirect到/login ,最终被redirect到http://domain.com/login )。 我可以重写我的redirect res.redirect('/login') 至 var redirectUrl = config.basepath ? config.basepath + '/login' : '/login' res.redirect(redirectUrl) 但这似乎不雅。 我已经考虑过安装方法,但是对于这种情况似乎有些矫枉过正。

如何使用mod_proxy在apache后面运行node.js时获取req.hostname

我的node.js应用程序使用req.hostname为了redirect一些页面从HTTP到HTTPS是这样的: app.get('*', function(req, res){ res.redirect('https://' + req.hostname + req.url); }); 在localhost上运行应用程序时,这会很好地工作。 但是,当应用程序在mod_proxy后面的服务器上运行时,则req.hostname不包含域名。 相反,它只包含localhost 。 我如何获得域名?