好吧,为了发展的目的,我们有一个专门的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负载平衡器后面时,我遇到了相同的问题(或类似的问题)。
我有以下设计:
但是,这会导致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_HOST
或SERVER_NAME
来为URL生成域。
要覆盖此默认网址,请转到您的routes.php
文件并使用以下方法:
URL::forceRootUrl('http://subdomain.newurl.com');
这将强制URL生成器使用新的url而不是HTTP_HOST或SERVER_NAME的值。
似乎Laravel有更多方便的解决方案。检查答案那里: 如何配置负载均衡器(ssl_termination)后面的Laravel 5的SSL?