我正在尝试在 Ubuntu 11.10 服务器上部署我的 play! 2.0 应用程序,但一直遇到错误,希望有人能帮助我。我尝试使用 Apache 2 上的反向代理部署我的 Play! 应用程序。我已启用 apache 代理模块并proxy.conf
在 中配置了文件mods_enabled
。我的域的虚拟主机如下所示:
<Directory /var/www/stage.domain.com>
AllowOverride None
Order Deny,Allow
Deny from all
</Directory>
<VirtualHost *:80>
DocumentRoot /var/www/stage.domain.com/web
ServerName stage.domain.com
ServerAdmin [email protected]
# ProxyRequests Off
# ProxyPreserveHost On
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
# ProxyVia On
# ProxyPass /play/ http://localhost:9000/
# ProxyPassReverse /play/ http://localhost:9000/
ErrorLog /var/log/ispconfig/httpd/stage.domain.com/error.log
ErrorDocument 400 /error/400.html
ErrorDocument 401 /error/401.html
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 405 /error/405.html
ErrorDocument 500 /error/500.html
ErrorDocument 502 /error/502.html
ErrorDocument 503 /error/503.html
<IfModule mod_ssl.c>
</IfModule>
<Directory /var/www/stage.domain.com/web>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/clients/client2/web7/web>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
# Clear PHP settings of this website
<FilesMatch "\.ph(p3?|tml)$">
SetHandler None
</FilesMatch>
# mod_php enabled
AddType application/x-httpd-php .php .php3 .php4 .php5
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i [email protected]"
php_admin_value upload_tmp_dir /var/www/clients/client2/web7/tmp
php_admin_value session.save_path /var/www/clients/client2/web7/tmp
# PHPIniDir /var/www/conf/web7
php_admin_value open_basedir /var/www/clients/client2/web7/:/var/www/clients/client2/web7/web:/va$
# add support for apache mpm_itk
<IfModule mpm_itk_module>
AssignUserId web7 client2
</IfModule>
<IfModule mod_dav_fs.c>
# Do not execute PHP files in webdav directory
<Directory /var/www/clients/client2/web7/webdav>
<FilesMatch "\.ph(p3?|tml)$">
SetHandler None
</FilesMatch>
</Directory>
# DO NOT REMOVE THE COMMENTS!
# IF YOU REMOVE THEM, WEBDAV WILL NOT WORK ANYMORE!
# WEBDAV BEGIN
# WEBDAV END
</IfModule>
# <Location /play/>
# ProxyPass http://localhost:9000/
# SetEnv force-proxy-request-1.0 1
# SetEnv proxy-nokeepalive 1
# </Location>
ProxyRequests Off
ProxyPass /play/ http://localhost:9000/
ProxyPassReverse /play/ localhost:9000/
ProxyPass /play http://localhost:9000/
ProxyPassReverse /play http://localhost:9000/
# SetEnv force-proxy-request-1.0 1
# SetEnv proxy-nokeepalive 1
</VirtualHost>
此 vhost 文件由 ispconfig 生成,我之前没有修改过任何内容,只是添加了内容。正如您在注释掉的部分中看到的那样,我根据找到的随机教程尝试了很多不同的方法,但所有方法都以失败告终,Internal Server Error, 503
而且最常见的是“502 Bad Gateway”。
我可以启动游戏,它确实成功连接到我的数据库。当出现错误时,我可以显示一个页面,并且会出现游戏!堆栈跟踪错误页面,但一切正常时,我得到了上述错误之一。
我的application.conf
文件如下所示:
db info
.......
application.mode=PROD
logger.root=ERROR
# Logger used by the framework:
logger.play=INFO
# Logger provided to your application:
logger.application=DEBUG
http.path="/play/"
XForwardedSupport="127.0.0.1"
我的主机文件如下所示(我从未更改或向主机文件添加任何内容):
127.0.0.1 localhost
127.0.1.1 matrix
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
如果您对我可能做错的事情有任何见解,或者我可以尝试什么,请告诉我!谢谢!
编辑
反向代理再次工作(我已检查发送到 google.com)。这是在成功连接到 Netty 时发生的。就像 Netty 拒绝连接到页面一样。
编辑2
输出apachectl -S
_default_:8081 127.0.0.1 (/etc/apache2/sites-enabled/000-apps.vhost:10)
*:8090 is a NameVirtualHost
default server 127.0.0.1 (/etc/apache2/sites-enabled/000-ispconfig.vhost:10)
port 8090 namevhost 127.0.0.1 (/etc/apache2/sites-enabled/000-ispconfig.vhost:10)
*:80 is a NameVirtualHost
default server 127.0.0.1 (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost 127.0.0.1 (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/100-domain.com.vhost:7)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/100-domain.com.vhost:7)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/100-domain.com.vhost:7)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/100-domain.com.vhost:7)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/100-domain.com.vhost:7)
port 80 namevhost stage.domain.com (/etc/apache2/sites-enabled/100-stage.domain.com.vhost:7)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/100-domain.com.vhost:7)
答案1
我发现代理传入连接的最佳方法是使用mod_rewrite。不能保证任何事情,但下面这样的方法可能对你有用。当然,你需要在服务器设置中启用 mod_rewrite。
<Location /play>
Order deny,allow
Allow from all
</Location>
RewriteEngine on
RewriteRule ^https?://%{SERVER_NAME}/play/?(.*)$ http://localhost:9100/$1 [P,L]
你需要确保的另一件事是,任何监听端口 80 的虚拟服务器都是基于名称的虚拟主机.apachectl -S
应该告诉您是否有多个主机在监听端口 80。
答案2
从以下基础开始vhost
:
ProxyPreserveHost On
ProxyPass /play http://localhost:9000/play
ProxyPassReverse /play http://localhost:9000/play
一旦这部分工作完成,您就可以添加其他指令。
至少,这些行应该代理主页。我想,您可以http://localhost:9000/play
毫无问题地访问?要进一步排除故障,请启用以下日志记录mod_proxy
:http://httpd.apache.org/docs/current/logs.html#permodule