为什么通过IP访问是好的但域失败?

时间:2013-10-10 15:54:25

标签: python django

我在具有公共IP的服务器上启动一个新的Django APP,然后使用命令运行它:

python manage.py runserver publicip:port

然后我发现当我使用http://publicip:port访问它时它工作正常。 但是当我使用域名(解析为此IP)访问它时,它会失败, 并给出了打击错误:(https://dpaste.de/FIrk

0 errors found
October 10, 2013 - 10:31:13
Django version 1.5.1, using settings 'testsite.settings'
Development server is running at http://*.*.*.*:8709/
Quit the server with CONTROL-C.

Traceback (most recent call last):
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 86, in run
    self.finish_response()
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 127, in finish_response
    self.write(data)
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 210, in write
    self.send_headers()
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 268, in send_headers
    self.send_preamble()
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 189, in send_preamble
    self._write('HTTP/%s %s\r\n' % (self.http_version,self.status))
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 389, in _write
    self.stdout.write(data)
  File "/usr/lib/python2.7/socket.py", line 324, in write
    self.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
  error: [Errno 104] Connection reset by peer
----------------------------------------
Exception happened during processing of request from ('58.33.144.118', 53268)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 582, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/local/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line     150, in __init__
    super(WSGIRequestHandler, self).__init__(*args, **kwargs)
  File "/usr/lib/python2.7/SocketServer.py", line 640, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 693, in finish
    self.wfile.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------

任何人都可以提出一些建议,找出原因,很多。

2 个答案:

答案 0 :(得分:4)

使用域名而不是IP运行runserver

python manage.py foobar.com:8000

请记住most definitely shouldn't use runserver in production

  

请勿在生产设置中使用此服务器。它没有经过安全审核或性能测试。 (这就是它将如何保留。我们的业务是制作Web框架,而不是Web服务器,因此改进此服务器以便能够处理生产环境超出了Django的范围。)

答案 1 :(得分:0)

已经很长时间了,但我想我应该为那些遇到同样问题的人写下来。

这是因为中国的域名不是BeiAn(备案),ISP阻止了对该服务器的访问。