2014-01-12 1 views
2

으로 리디렉션합니다. 현재 토네이도를 여러 WSGI 응용 프로그램 (주로 Flask 응용 프로그램)의 래퍼로 사용합니다. 최근에 많은 해킹 시도가 있었고 일부 파일에 정의 된 IP 목록을 자동으로보고이 IP를 모두 "이 IP를 사용하는 누군가가 우리 사이트를 해킹하려고했습니다"와 같은 페이지로 리디렉션 할 수 있는지 궁금해졌습니다. , 당신이 봇이 아니라는 것을 증명하면 우리는 당신의 IP를 다시 허용 할 것입니다. "설정 파일의 모든 ips를 고정 주소

from tornado.wsgi import WSGIContainer 
from tornado.httpserver import HTTPServer 
from tornado.ioloop import IOLoop 
from Wrapper.app import application 

http_server = HTTPServer(WSGIContainer(application)) 
http_server.listen(80) 
IOLoop.instance().start() 

그리고 wrapper.app은 다음과 같습니다 :

서버를 실행하는 토네이도 코드는 여기에 내가 이런 종류의에서 모든 문서를 찾을 수 없어

from werkzeug.wsgi import DispatcherMiddleware 
from Splash import splash_app 
from SentimentDemo import sentiment_app 
from FERDemo import FER_app 

application = DispatcherMiddleware(splash_app, { 
    '/api/sentiment': sentiment_app, 
    '/api/fer': FER_app 
}) 

, 그래서이 질문이 정보가없는 것처럼 보이면 사전에 미안하지만,보기 시작하는 곳조차도 장관 일 것입니다.

답변

3

WSGIContainer를 서브 클래스 화하고 그 __call__ 메소드를 대체하려고합니다. WSGIContainer here의 코드에서 self.write_redirect()보기를 작성하는 방법에 대한 몇 가지 팁을 들어

class MyWSGIContainer(WSGIContainer): 
    def __call__(self, request): 
     if request.remote_ip in blacklist: 
      self.write_redirect() 
     else: 
      super(MyWSGIContainer, self)(request) 

같은 뭔가; HTTP 헤더를 형식화하는 방법을 볼 수 있습니다. HTTP 302 임시 리디렉션을 사용해야합니다.

그런 다음 MyWSGIContainer 인스턴스를 기본 WSGIContainer 대신 HTTPServer로 전달하십시오.

+0

아, Spectacular! 정확히 내가 무엇을 찾고 있었는지. –