使用反向代理在 Apache 服务器上部署 play! 2.0 应用程序

使用反向代理在 Apache 服务器上部署 play! 2.0 应用程序

我正在尝试在 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_proxyhttp://httpd.apache.org/docs/current/logs.html#permodule

相关内容