我是整个网站的新手......如果你能在这里给予帮助,真的很感激...
我想要做的是在远程服务器上托管一个Django项目(红帽,CentOS版本6.5)
我一直在使用开发服务器和端口8000在远程服务器上运行项目测试:
python manage.py runserver *.*.*.*:8000 --insecure
在这种情况下,网站可以正常工作并可从其他计算机访问。
0 errors found
September 04, 2014 - 08:13:03
Django version 1.6.4, using settings 'mysite.settings'
Starting development server at http://*.*.*.*:8000/
Quit the server with CONTROL-C.
现在我想把它投入生产,我选择使用Apache http服务器和mod_wsgi。我安装并激活了httpd和wsgi。我将httpd.conf配置文件更改为:
Listen *:80 (I've also tried Listen *:8000 and Listen (IP address):8000)
#DocumentRoot "/var/www/html"
DocumentRoot "/testsite" (I put a plan html file under the directory just for test)
ServerName <here is the url of the site,with no port number>
但是,当我尝试打开网页时,我总是遇到503错误:
Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime
or capacity problems. Please try again later.
Apache/2.2.3 (CentOS) Server at <site url> Port 80
我尝试了几件事(1)检查了使用端口80的内容:
~# sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 28732 root 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28734 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28735 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28736 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28737 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28738 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28739 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28740 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
httpd 28741 apache 4u IPv6 19802111 0t0 TCP *:http (LISTEN)
~# service httpd status
httpd (pid 28732) is running...
(2)重启apache服务器:
service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
(3)在/ var / www / html / testsite中放置了一个普通的.html文件,用于测试DocumentRoot目录。
(4)我试图在另一个端口(例如8008,8001和80)上运行django
e.g. python manage.py runserver *.*.*.*:8008 --insecure
0 errors found
September 04, 2014 - 07:56:18
Django version 1.6.4, using settings 'mysite.settings'
Starting development server at http://*.*.*.*:8008/
Quit the server with CONTROL-C.
如上图所示,在终端中看起来它正在工作,但即使使用开发服务器,我甚至无法从远程机器访问网站。我尝试了不同的端口号,但只能使用端口8000。但是,当我更改端口号时,为什么我可以在localhost上打开网页?例如127.0.0.1:8008或127.0.0.1:8080将起作用。
我猜它可以是防火墙设置,然后我去了/ etc / sysconfig / iptables,我在网页部分找到了,只有一行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT
然后我添加了另一行进行测试:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT
然后再次尝试使用端口8001进行开发。再次,它看起来像是在远程服务器上工作但无法从远程计算机访问。
很抱歉,如果我让这令人困惑,如果我问了一些非常愚蠢的话。现在,我有三个问题,我真的不明白。首先,503错误真让我烦恼。即使它显示apache服务器正在运行(重启httpd也没关系),实际上没有显示......其次,在使用开发服务器时为什么我只能使用端口8000而不能使用其他任何东西?最后,在503错误消息中,它显示apache在端口80上运行,即使我在配置文件中将Listen端口更改为8000,为什么会这样?
非常感谢您的帮助!
答案 0 :(得分:0)
如果这是您唯一的配置,我不会看到Apache如何知道运行8000的Django。没有迹象表明您正在使Apache连接或代理运行Django实例的请求。
您需要做的是
或
您可以自由选择任何带Django开发服务器的端口。您可以使用命令行参数配置开发服务器侦听的IP地址和端口。
您可以让Django开发服务器监听所有IP地址,包括服务器上的公共IP地址,如下所示:
python manage.py runserver 0.0.0.0:8000
也可以在/ var / log / apache(或类似的目录)中读取Apache日志,因此它应该解释为什么你会得到503。
我怀疑iptables与你的问题没有任何关系,但不知何故Django开发服务器没有收听公共IP地址。您可以通过服务器上禁用的iptables防火墙轻松尝试此操作。