3

HTTP への Tornado Python リクエストが自動的に HTTPS にリダイレクトされると便利です。

これを行う方法はありますか?

  • パイソン3v
  • トルネード 3.1v

アップデート

新しい解決策ですが...何か間違ったことをしてもいいですか(

http:// IP_ADDRESS :4443/

WARNING:tornado.general:8 の SSL エラー ('IP_ADDRESS', 51453): [SSL: HTTP_REQUEST] http 要求 (_ssl.c:547)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import tornado.ioloop
import tornado.web
import tornado.httpserver
import http.server


class MainHandler(tornado.web.RequestHandler):
    def prepare(self):
        if self.request.protocol == "http":
            self.redirect("https://%s" % self.request.full_url()[len("http://"):], permanent=True)

    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r'/', MainHandler),
])

http_server = tornado.httpserver.HTTPServer(application,
    ssl_options = {
    "certfile": os.path.join("/var/pyTest/keys/", "cert.pem"),
    "keyfile": os.path.join("/var/pyTest/keys/", "key.pem"),
    }
)

if __name__ == '__main__':
    http_server.listen(4443)
    tornado.ioloop.IOLoop.instance().start()
4

5 に答える 5

4

ポート 80 をリッスンする別のサーバー インスタンスを作成する必要があります。コードの変更バージョンは次のとおりです。

#!/usr/bin/env python

import os
import tornado.httpserver
import tornado.web
import tornado.ioloop


class MainHandler(tornado.web.RequestHandler):

    def prepare(self):
        if self.request.protocol == 'http':
            self.redirect('https://' + self.request.host, permanent=False)

    def get(self):
        self.write("Hello, world")


if __name__ == "__main__":
    application = tornado.web.Application([
        (r'/', MainHandler)
    ])
    application.listen(80)
    http_server = tornado.httpserver.HTTPServer(
        application, 
        ssl_options = {
            "certfile": os.path.join("/var/pyTest/keys/", "cert.pem"),
            "keyfile": os.path.join("/var/pyTest/keys/", "key.pem"),
        }
    )
    http_server.listen(443)
    tornado.ioloop.IOLoop.current().start()
于 2016-05-25T03:10:50.487 に答える