aiohttp 如何为 http 和 https 公开两个端口 80 和 443?
aiohttp how to expose two port 80 and 443 for http and https?
如何在两个端口上 运行 aiohttp?一个用于端口 80 和端口 443 用于 ssl?
我试过了
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain('/certs/fullchain.pem', '/certs/privkey.pem')
runners = []
async def start_site(app, address='localhost', port=80, ssl_context=None):
runner = web.AppRunner(app, ssl_context=ssl_context)
runners.append(runner)
await runner.setup()
site = web.TCPSite(runner, address, port)
await site.start()
loop = asyncio.get_event_loop()
loop.create_task(start_site(init_app() port=80))
loop.create_task(start_site(init_app(), port=443, ssl_context=ssl_context))
try:
loop.run_forever()
except:
pass
finally:
for runner in runners:
loop.run_until_complete(runner.cleanup())
但它仍然 运行 仅在端口 80 上?
对我来说是这样的:
import asyncio
import ssl
from aiohttp import web
async def start_tasks(app):
loop = asyncio.get_event_loop()
loop.create_task(foo_app())
async def foo_app():
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain('/certs/cert.pem', '/certs/key.pem')
foo = web.Application()
runner = web.AppRunner(foo)
await runner.setup()
site = web.TCPSite(runner, "localhost", port=8443, ssl_context=ssl_context)
await site.start()
app = web.Application()
app.on_startup.append(start_tasks)
web.run_app(app, host="localhost", port=8080)
您可以同时使用 http://localhost:8080 和 https://localhost:8443
如何在两个端口上 运行 aiohttp?一个用于端口 80 和端口 443 用于 ssl? 我试过了
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain('/certs/fullchain.pem', '/certs/privkey.pem')
runners = []
async def start_site(app, address='localhost', port=80, ssl_context=None):
runner = web.AppRunner(app, ssl_context=ssl_context)
runners.append(runner)
await runner.setup()
site = web.TCPSite(runner, address, port)
await site.start()
loop = asyncio.get_event_loop()
loop.create_task(start_site(init_app() port=80))
loop.create_task(start_site(init_app(), port=443, ssl_context=ssl_context))
try:
loop.run_forever()
except:
pass
finally:
for runner in runners:
loop.run_until_complete(runner.cleanup())
但它仍然 运行 仅在端口 80 上?
对我来说是这样的:
import asyncio
import ssl
from aiohttp import web
async def start_tasks(app):
loop = asyncio.get_event_loop()
loop.create_task(foo_app())
async def foo_app():
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain('/certs/cert.pem', '/certs/key.pem')
foo = web.Application()
runner = web.AppRunner(foo)
await runner.setup()
site = web.TCPSite(runner, "localhost", port=8443, ssl_context=ssl_context)
await site.start()
app = web.Application()
app.on_startup.append(start_tasks)
web.run_app(app, host="localhost", port=8080)
您可以同时使用 http://localhost:8080 和 https://localhost:8443