国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Flask 獨(dú)立 WSGI 容器

2021-08-11 10:43 更新

有用 Python 編寫(xiě)的流行服務(wù)器來(lái)容納 WSGI 應(yīng)用并提供 HTTP 服務(wù)。這些服務(wù)器在運(yùn)行 時(shí)是獨(dú)立的:你可以從你的 web 服務(wù)器設(shè)置到它的代理。如果你遇見(jiàn)問(wèn)題,請(qǐng)注意 代理設(shè)置 一節(jié)的內(nèi)容。

Gunicorn

Gunicorn ‘Green Unicorn’ 是一個(gè)給 UNIX 用的 WSGI HTTP 服務(wù)器。這是一個(gè)從 Ruby 的 Unicorn 項(xiàng)目移植的 pre-fork worker 模式。它既支持 eventlet ,也 支持 greenlet 。在這個(gè)服務(wù)器上運(yùn)行 Flask 應(yīng)用是相當(dāng)簡(jiǎn)單的:

gunicorn myproject:app

Gunicorn 提供了許多命令行選項(xiàng) —— 見(jiàn) gunicorn -h 。 例如,用四個(gè) worker 進(jìn)程( gunicorn -h )來(lái)運(yùn)行一個(gè) Flask 應(yīng)用,綁定 到 localhost 的4000 端口( -b 127.0.0.1:4000 ):

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app

Tornado

Tornado 是一個(gè)開(kāi)源的可伸縮的、非阻塞式的 web 服務(wù)器和工具集,它驅(qū)動(dòng)了 FriendFeed 。因?yàn)樗褂昧?epoll 模型且是非阻塞的,它可以處理數(shù)以千計(jì) 的并發(fā)固定連接,這意味著它對(duì)實(shí)時(shí) web 服務(wù)是理想的。把 Flask 集成這個(gè)服務(wù) 是直截了當(dāng)?shù)?

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()

Gevent

Gevent 是一個(gè)基于協(xié)同程序的 Python 網(wǎng)絡(luò)庫(kù),使用 greenlet 來(lái)在 libevent 的事件循環(huán)上提供高層的同步 API

from gevent.wsgi import WSGIServer
from yourapplication import app

http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()

代理設(shè)置

如果你在一個(gè) HTTP 代理后把你的應(yīng)用部署到這些服務(wù)器中的之一,你需要重寫(xiě)一些標(biāo)頭 來(lái)讓?xiě)?yīng)用正常工作。在 WSGI 環(huán)境中兩個(gè)有問(wèn)題的值通常是 REMOTE_ADDRHTTP_HOST 。你可以配置你的 httpd 來(lái)傳遞這些標(biāo)頭,或者在中間件中手動(dòng)修正。 Werkzeug 帶有一個(gè)修正工具來(lái)解決常見(jiàn)的配置,但是你可能想要為特定的安裝自己寫(xiě) WSGI 中間件。

這是一個(gè)簡(jiǎn)單的 nginx 配置,它監(jiān)聽(tīng) localhost 的 8000 端口,并提供到一個(gè)應(yīng)用的 代理,設(shè)置了合適的標(biāo)頭:

server {
    listen 80;

    server_name _;

    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        proxy_pass         http://127.0.0.1:8000/;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

如果你的 httpd 不提供這些標(biāo)頭,最常見(jiàn)的配置引用從 X-Forwarded-Host 設(shè)置的主機(jī) 名和從 X-Forwarded-For 設(shè)置的遠(yuǎn)程地址:

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)

信任標(biāo)頭

請(qǐng)記住在一個(gè)非代理配置中使用這樣一個(gè)中間件會(huì)是一個(gè)安全問(wèn)題,因?yàn)樗つ康匦湃?一個(gè)可能由惡意客戶端偽造的標(biāo)頭。

如果你想從另一個(gè)標(biāo)頭重寫(xiě)標(biāo)頭,你可能會(huì)使用這樣的一個(gè)修正程序:

class CustomProxyFix(object):

    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        host = environ.get('HTTP_X_FHOST', '')
        if host:
            environ['HTTP_HOST'] = host
        return self.app(environ, start_response)

app.wsgi_app = CustomProxyFix(app.wsgi_app)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)