0

我在设置 web2py 服务器时遇到了麻烦,它允许我从任何地方访问 admin 和 appadmin 界面localhost,这对我来说是必需的,因为 web2py 服务器托管在没有浏览器或 X 服务器。我知道要从外部访问 web2py 的管理员或 appadmin 界面localhost,我必须使用 SSL/HTTPS。

web2py 文档似乎声明了两种不同的方法来做到这一点。首先,来自一般的 web2py 启动教程

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

这导致我在网上搜索如何设置 web2py 和 apache,这导致我进入 web2py 部署食谱页面,其中描述了使用 mod_wsgi 而不是 mod_proxy 在 apache 后面设置 web2py。这些是我目前完全遵循的说明,除了将/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,我会得到通用的“索引 /”apache 服务器页面。在此页面上,“/”包含一个目录链接“html”,它是指向 Apache2 Ubuntu 默认页面(“It works!”页面)的链接。

其他信息:

  • 我有一个未改动的 web2py 实例安装在/home/www-data/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(由我创建)
  • 我已经手动启动了 web2py python ~/web2py/web2py.py --ip 10.7.166.27(这是 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>
4

1 回答 1

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 似乎需要.confon 配置文件,我没有,所以我重命名/etc/apache2/sites-available/web2py/etc/apache2/sites-available/web2py.conf
  3. 我没有指向/etc/apache2/sites-available/web2pyat的符号链接/etc/apache2/sites-enabled/web2py,所以我做了一个。

所以,截至目前:

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

这意味着我最初的问题得到了回答,但如果我再次遇到让 SSL 工作的问题,我可能会回到这里并发表评论/编辑。

于 2014-07-11T18:43:51.067 回答