在同一端口上托管CGI和WSGI服务器?

时间:2015-07-24 19:57:50

标签: python cgi wsgi

我有两个本地托管网站动态和静态页面的python服务器。

我在静态页面上的iframe中显示动态页面,并希望使用javascript mesh_vectors[idx1] += translate_1 mesh_vectors[idx2] += translate_2 方法将数据发送到父静态页面,但是我收到错误:

parent.functionx(data)

我可以在同一个端口上托管这两个端口,理想情况下运行一个脚本来启动静态和动态页面吗?

  1. 端口8001上用于托管动态python页面的WSGI服务器,由path / meas
  2. 访问

    cgiserver.py

    Uncaught SecurityError: Blocked a frame with origin "http://localhost:8001" from accessing a frame with origin "http://localhost:8000". Protocols, domains, and ports must match.
    
    1. 端口8000上的CGI服务器,用于承载静态文件(其中有许多复杂的文件夹结构)
    2. wsgiserver.py

      import subprocess
      from cherrypy import wsgiserver
      
      def application(env, start_response):
          if '/meas' in env['PATH_INFO']:
              start_response('200 OK', [('Content-Type', 'text/html')])
              pathargs = env['PATH_INFO']
              args = pathargs.split('/')
              participantid = args[2]
              studyid = args[3]
              repeatid = args[4]
              proc = subprocess.Popen(['python3', 'cgi-bin/script-meas.py', participantid, studyid, repeatid], stdout=subprocess.PIPE)
              line = proc.stdout.readline()
              while line:
                  yield line
                  line = proc.stdout.readline()
      
      wsgi_server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 8001), application)
      wsgi_server.start()
      

1 个答案:

答案 0 :(得分:0)

感谢您澄清您的需求。

在你的用例中有多个进程使用相同的IP /端口,你应该把它们放在第三个进程(apache / nginx / lighttpd /...).

考虑到您的问题,我认为您处于开发环境中,可能很难设置和配置网络服务器,因此您可以使用HTTP代理(找到SimpleHTTPProxyProxyHTTPServer以及相关的发布“seriously simple python HTTP proxy?”,但请查看网页了解更多信息;总的来说,这个解决方案并不容易......

一般的想法是配置第三个程序来监听端口(即:80)并根据请求的路径向任一后端提供请求;即:

当监听端口(比如端口80)的进程(比如apache)收到/meas的请求时,它会将它重定向到wsgi服务器(在Unix套接字或端口8081上),如果它是对/cgi-bin/htbin的请求,它会将其重定向到CGI处理程序(实际上Apache有一个cgi-bin模块,你可以删除这个后端)。