如何以编程方式与Apache通信?

时间:2018-02-04 23:53:57

标签: python web-applications port reverse-proxy shared-hosting

如今许多Web应用程序都在自己的微服务器上运行,在共享主机平台上实现它们可能很困难。应用程序在专用端口上侦听,您可以自定义或反向代理,但共享托管通常只有80和443打开。

就像一个例子,方便的基于Web的编辑器ICEcoder是一个PHP应用程序,所以你只需将文件放在一个目录中就可以了。但是,Cloud9编辑器运行自己的服务器。您可以自定义端口,但同样,您无法运行反向代理。

我曾想过使用PHP或Python CGI脚本作为中介。类似的东西:

www.mydomain / mydirectory中/ middleman.py

from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse, json
# hpyothetical apache api
import apache

parsed_path = urlparse.urlparse(self.path)

response = apache(url=parsed_path, port=8080)

sendStuffBack(response)

Apache可以做到这一点吗?我该如何实现它?

修改 以下是基于@ grawity的回答所做的。

helloflask.py

#!/usr/bin/env python

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

middle.py

#!/usr/bin/env python

print ("Content-Type: text/html")
print()

import requests
#response = requests.get("http://localhost:5000")
response = requests.get("http://localhost:8888/token=8a387fe88d662e2568f9b8ec2398191452492e7184536670")

print(response.text)

1 个答案:

答案 0 :(得分:2)

您的Python项目反向代理,您正在寻找的API只是普通的HTTP。 (毕竟,这就是Web浏览器与Apache交互的方式......)

要发出HTTP请求,您需要一个像urllibrequests

这样的客户端
import requests

response = requests.get("http://" + apache_host + ":8080/" + parsed_path)

默认情况下,您的所有应用和微服务器都会认为所有客户端都来自localhost。如果这是一个问题,请查看您的应用是否接受X-Forwarded-For标头。 (如果他们这样做,请将其包含在您的所有请求中。)