我在预装了Apache的Bluehost上通过CentOS VPS部署Web2py应用程序。
我已经手动完成了在/home/username
中安装Web2py,Python和其他一些软件的过程。当我在/home/username/web2py
中运行以下命令以通过端口8000 python web2py.py --ip xxx.xx.xx.xx --port=8000
通过Rocket启动Web2py时,我和其他人可以成功访问http://xxx.xx.xx.xx/8000
或http://mywebsite.com/8000
以查看Web2py&#39}欢迎屏幕(最终是我的申请)。
但是,当我尝试运行python web2py.py --ip xxx.xx.xx.xx --port=80
时,我可以在http://xxx.xx.xx.xx/
或http://mywebsite.com/
访问该应用程序,我收到以下错误:
ERROR:Rocket.Errors.Port80:Socket in use by other process and it won't share
Apache已在端口80上运行。最终,我希望用户可以访问http://xxx.xx.xx.xx/
或http://mywebsite.com/
的应用程序。如何在我当前的配置中实现这一点而不使用此处描述的一步生产部署:http://web2py.com/book/default/chapter/13#Apache-setup?
我对如何通过以下三种方式中的每一种感兴趣:
1)使用已安装在端口80上的Apache服务器。
2)在端口80上使用Web2py的内置Rocket服务器,从而调整系统,以便忽略预安装的Apache服务器并打开端口80。
3)在另一个端口上使用内置的Rocket服务器,比如8000,但这样做的方式是用户仍然可以通过访问http://xxx.xx.xx.xx/
或{{1来访问该站点及其所有功能}}。这意味着他们不需要将8000附加到网址(如http://mywebsite.com/
或http://xxx.xx.xx.xx/8000
)。
谢谢。
答案 0 :(得分:2)
一个端口只能由一个应用程序使用。因此,您无法在同一端口(例如端口80)上运行Apache和Web2py服务器。
0到1024之间的所有端口都是特权端口。这意味着只有超级用户才能将应用程序分配给端口。通常,这也会产生说明错误消息,即端口正在使用中(即使没有应用程序正在侦听端口)
案例1和案例3 - 使用Apache-Server但不使用mod_wsgi:
我假设你不想在你的apache上使用modwsgi或任何wsgi。您必须使用mod_proxy
代理您的应用程序:
<VirtualHost *:80>
Alias / /users/www-data/web2py/applications
### serve static files directly
<LocationMatch "^/static/.*">
Order Allow, Deny
Allow from all
</LocationMatch>
### proxy all the other requests
<Location "/">
Order deny,allow
Allow from all
ProxyRequests off
ProxyPass http://localhost:8000/
ProxyPassReverse http://localhost:8000/
ProxyHTMLURLMap http://127.0.0.1:8000/ /
</Location>
您必须将位置调整为实际设置,并且必须运行web2py服务器。
案例2 - 不使用apache:
在这种情况下,您必须停止apache服务器并使用特权帐户(例如root)启动应用程序:
sudo python web2py.py --ip xxx.xx.xx.xx --port=80
希望这会有所帮助;)