无法使用mod_wsgi将apache2.4传递给web2py

时间:2014-07-11 00:36:05

标签: apache mod-wsgi web2py wsgi apache2.4

我有一段时间设置web2py服务器的方式允许我从localhost以外的任何地方访问admin和appadmin接口,这对我来说是一个要求,因为web2py服务器托管在没有浏览器或X服务器的云位置。我理解从外部localhost访问web2py的admin或appadmin接口,我必须使用SSL / HTTPS。

web2py文档似乎声明了两种不同的方法。首先,来自general web2py startup tutorial

  

管理界面admin只能从localhost访问   除非你用mod_proxy在Apache后面运行web2py。如果管理员检测到   代理,会话cookie设置为安全,管理员登录不设置   除非客户端和代理之间的通信进行   通过HTTPS

这导致我在网上搜索如何设置web2py和apache,它引导我进入web2py部署配方页面where it describes setting up web2py behind apache using mod_wsgi instead of mod_proxy。这些是我目前正在遵循的指令,除了将/etc/apache2/sites-available/web2py文件更新为apache2.4语法并将ServerName指令的值修改为“foo.bar.com”(省略:云的域名)包含服务器的框,在整个问题中用foo.bar.com替换。)

但是,当我到达

  

重新启动Apache时,它应该将所有请求传递给web2py,而无需通过Rocket wsgiserver。

那个web2py + apache + mod_wsgi教程的一部分,apache似乎没有为我传递任何东西给web2py。我继续前进并移动了wsgihandler.py文件,如教程中的下一步所述,这是我当前的状态:

  • 如果我从另一台机器浏览foo.bar.com:80,我会获得Apache2 Ubuntu默认页面(“它可以!”页面)。
  • 如果我浏览到foo.bar.com:8000(web2py端口),我是web2py服务器的默认界面,但由于渠道不安全而无法访问admin或appadmin。
  • 如果我尝试浏览foo.bar.com:443,我会得到通用的“/ of / apache”服务器 页。在这个页面上,“/”包含一个目录链接“html”,其中 是Apache2 Ubuntu默认页面的链接(“它工作!”页面)。

其他信息:

  • 我在/home/www-data/web2py安装了一个未触及的web2py实例,但我已将/home/www-data/web2py/handlers/wsgihandler.py移至/home/www-data/web2py/wsgihandler.py
  • 我的/etc/apache2/site-available/目录的内容是:
    • 000-default.conf(未被我感动)
    • default-ssl.conf(未被我感动)
    • web2py(由我创建)
  • 我用python ~/web2py/web2py.py --ip 10.7.166.27手动启动web2py(这是foo.bar.com的IP(省略了真实域名))
  • apache2以用户www-data
  • 运行
  • 服务器操作系统是Ubuntu Server 14.04 x64

这是我的/ etc / apache2 / sites-available / web2py文件:

<VirtualHost *:80>
  ServerName foo.bar.com
  WSGIDaemonProcess web2py user=www-data group=www-data display-name=%{GROUP}
  WSGIProcessGroup web2py
  WSGIScriptAlias / /home/www-data/web2py/wsgihandler.py

  <Directory /home/www-data/web2py>
    AllowOverride None
    Require all denied
    <Files wsgihandler.py>
      Require all granted
    </Files>
  </Directory>

  AliasMatch ^/([^/]+)/static/(.*)            /users/www-data/web2py/applications/$1/static/$2
  <Directory /users/www-data/web2py/applications/*/static/>
    Order Allow,Deny
    Allow from all
  </Directory>

  <Location /admin>
    Require all denied
  </Location>

  <LocationMatch ^/([^/]+)/appadmin>
    Require all denied
  </LocationMatch>

  CustomLog /private/var/log/apache2/access.log common
  ErrorLog /private/var/log/apache2/error.log
</VirtualHost>

<VirtualHost *:443>
  ServerName foo.bar.com
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/server.crt
  SSLCertificateKeyFile /etc/apache2/ssl/server.key

  WSGIProcessGroup web2py

  WSGIScriptAlias / /users/www-data/web2py/wsgihandler.py

  <Directory /users/www-data/web2py>
    AllowOverride None
    Require all denied
    <Files wsgihandler.py>
      Require all granted
    </Files>
  </Directory>

  AliasMatch ^/([^/]+)/static/(.*)         /users/www-data/web2py/applications/$1/static/$2

  <Directory /users/www-data/web2py/applications/*/static/>
    Require all granted
  </Directory>

  CustomLog /private/var/log/apache2/access.log common
  ErrorLog /private/var/log/apache2/error.log

</VirtualHost>

1 个答案:

答案 0 :(得分:0)

好的!写这篇文章时我发现了我的愚蠢错误。我从来没有打扰过正确配置apache本身:

  1. /etc/apache2/sites-available/000-default.conf/etc/apache2/sites-available/default-ssl.conf是我分别浏览foo.bar.com:80foo.bar.com:443时看到的内容的原因。
  2. apache2.4似乎需要.conf配置文件,我没有,所以我将/etc/apache2/sites-available/web2py重命名为/etc/apache2/sites-available/web2py.conf
  3. /etc/apache2/sites-available/web2py我没有/etc/apache2/sites-enabled/web2py的符号链接,所以我做了一个符号链接。
  4. 所以,截至目前:

    • 当我浏览foo.bar.com:80时,我获得了相同的Apache2 Ubuntu默认页面,但是
    • 当我浏览foo.bar.com:80/web2py时,我收到内部服务器错误,apache日志告诉我这是来自wsgihandler.py的python导入错误,这意味着apache&lt; - &gt; mod_wsgi&lt; - &gt; web2py链接是启动并运行
    • 当我浏览foo.bar.com:443/web2py时,Chrome浏览器的黄色屏幕抱怨我的自签名证书,点击后我得到了一个拒绝权限的页面,大概是因为我还没有在web2py中设置的内容/ SSL

    这意味着我的原始问题已得到解答,但如果我再次难以让SSL工作,我可能会回到这里评论/编辑。