我正在使用一个使用全栈来显示其所有网页的框架。这在端口 9000 上运行标准。非常好,但在投入生产时,服务器似乎阻止除了几个标准端口之外的所有东西。
因此,框架(Play框架)建议您在前端Web服务器(在我的案例中为Apache2)中执行此操作。
file:play.conf
<VirtualHost *:80>
ServerName http://avon.ugent.be
CustomLog /var/www/log/proxy-access.log common
ErrorLog /var/www/log/proxy-error.log
ProxyPreserveHost On
DocumentRoot /var/www
<Location /dev/app>
AuthType Basic
AuthName "Test Omgeving"
AuthUserFile /var/trac/htpasswd
Require valid-user
ProxyPass http://127.0.0.1:9000/
ProxyPassReverse http://127.0.0.1:9000/
</Location>
</VirtualHost>
这当然需要使用a2enmod mod_proxy
启用的 mod_proxy 模块。 (我在Debian发行版上运行它)
这个想法是运行两个Web服务器,一个是前端,一个是后端。
apache webserver的重新加载工作正常,网站启用了所有内容,但是当我浏览到http://my.website.com/dev/app
网址时,它会呈现404 ...建议出了什么问题?
EDIT3: 经过10多个小时的尝试,归结为: 我找到了debugging命令(最后:p),这是输出:
apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server avon.ugent.be (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost avon.ugent.be (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost avon.ugent.be (/etc/apache2/sites-enabled/play.conf:1)
Syntax OK
表示虚拟服务器确实已添加到配置中。 但是,它仍然会呈现404.现在,我已经读到了某个地方,因为该路径中没有index.html。如果你只想使用反向代理,这是必要的吗?
答案 0 :(得分:2)
首先,请尝试使用Location
代替Directory
。目录用于标识文件系统上的目录路径,而不是相对于文档根目录的路径。
<Location '/dev/app'>
AuthType Basic
AuthName "Test Omgeving"
AuthUserFile /var/trac/htpasswd
Require valid-user
</Location>
答案 1 :(得分:1)
尝试以下方法。它应该提示输入用户名/密码,然后将请求传递给http://127.0.0.1:9000。在我的例子中,Apache提供了一个"Service Temporarily Unvavailable"
,如果你关闭在端口9000
上运行的应用程序,你应该得到它{/ 1}
<VirtualHost *:80>
ServerName my.website.com
<Location /dev/app>
AuthType Basic
AuthName "Test Omgeving"
AuthUserFile passwd/.htpasswd
Require valid-user
ProxyPass http://127.0.0.1:9000
ProxyPassReverse http://127.0.0.1:9000
</Location>
</VirtualHost>
如果你仍然得到404,你能否确认它不是发送它的后端服务器?