Laravel路线在逆向代理之后

好吧,为了发展的目的,我们有一个专门的networking服务器。 它目前不直接连接到互联网,所以我已经在另一台服务器上设置了一个Apache反向代理,该服务器转发给开发服务器。

这样,我可以通过Web访问服务器。

问题是,Laravel中的路由现在以内部服务器IP地址或服务器计算机名称为前缀。

例如,我转到http://subdomain.test.com,但是使用route()帮助程序生成的所有路由都显示以下url: http://subdomain.test.com而不是http://subdomain.test.com

反向代理设置如下:

 <VirtualHost *:80> ServerName igateway.somedomain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://10.47.32.22:80/ ProxyPassReverse / http://10.47.32.22:80/ <Location /> Order allow,deny Allow from all </Location> </VirtualHost> 

我已经在config\app.php设置了实际的域名。

如何设置路由中使用的默认URL? 我不希望它使用内部地址,因为这会破坏反向代理的要点。

我试图把所有的路线都放在一个Route::group(['domain' ...组中,这也不起作用。

当Laravel 5应用程序不知道在SSL负载平衡器后面时,我遇到了相同的问题(或类似的问题)。

我有以下设计:

  • 客户端通过HTTPS与SSL负载平衡器通信
  • SSL负载平衡器通过HTTP与后端服务器通信

但是,这会导致HTML代码中的所有URL都使用http:// schema生成。

以下是一个简单的解决方法,包括模式(http和https):

将下面的代码放在app / Http / routes.php之上

 $proxy_url = getenv('PROXY_URL'); $proxy_schema = getenv('PROXY_SCHEMA'); if (!empty($proxy_url)) { URL::forceRootUrl($proxy_url); } if (!empty($proxy_schema)) { URL::forceSchema($proxy_schema); } 

然后将以下行添加到.env文件中:

 PROXY_URL = http://igateway.somedomain.com 

如果您还需要将生成的HTML代码中的模式从http://更改为https:// ,则只需添加以下行:

 PROXY_SCHEMA = https 

好吧,我知道了。 希望这将有助于未来的人。

看起来Laravel忽略了http请求的config\app.php文件中的url属性(它确实只是针对artisan),而是使用Apache提供的HTTP_HOSTSERVER_NAME来为URL生成域。

要覆盖此默认网址,请转到您的routes.php文件并使用以下方法:

 URL::forceRootUrl('http://subdomain.newurl.com'); 

这将强制URL生成器使用新的url而不是HTTP_HOST或SERVER_NAME的值。

似乎Laravel有更多方便的解决方案。检查答案那里: 如何配置负载均衡器(ssl_termination)后面的Laravel 5的SSL?