自学nginx(三): nginx + gunicorn的反向代理

来源:互联网 发布:淘宝开店试题答案 编辑:程序博客网 时间:2024/06/15 19:46

前言

正好一个项目是python的flask框架开发的,部署的时候就考虑用gunicorn作为应用服务器,然后再用nginx的反向代理套在应用服务器的外层。

架构图

nginx+gunicorn

每一台server内部,都安装nginx,以及部署gunicorn的python flask应用程序。nginx和gunicorn之间用unix local socket机制进行连接。

所以gunicorn启动flask程序的时候,请配置成
bind = “unix:/xxx/xxx.sock”来启动,这样就会在/xxx目录下生成xxx.sock文件,而不是启动类似8000的端口了。

nginx反向代理配置

在http模块下(也就是和server模块平行的地方), 先定义一个upstream变量。

upstream myapp_server {        # for UNIX domain socket setups        server unix:/xxx/xxx.sock fail_timeout=0;        # for a TCP configuration        # server 127.0.0.1:8000 fail_timeout=0;    }

如果应用服务器是8000端口的tcp的话,不是unix的socket的话,那么可以用下面注释的代码。

下面需要配置server,注意我只贴了location的部分,其他server的部分(如access_log, keepalive_timeout之类的)请根据自身的需求合理设置。

# favicon放在其他目录location = /favicon.ico {          root /usr/share/nginx/html;}# 静态文件直接走静态目录location /static/ {    alias /usr/share/nginx/html/static/;}# 其他的路径走这个配置# try_files可以一定程度代替rewrite。location / {    try_files $uri @proxy_to_app;}# 定义一个变量名字是proxy_to_app的location,并不是路由规则。这个location会作为一个变量代到上面的try_files的地方。location @proxy_to_app {    # 设置一些转发到应用服务器的header,使得gunicorn可以获得一些客户端来的信息。    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    # 如果是https的话,下面这行需要enable    # proxy_set_header X-Forwarded-Proto https;    proxy_set_header Host $http_host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-Host $remote_addr;    proxy_redirect off;    proxy_pass http://myapp_server;}

结语

nginx一侧的设置还是比较简单的。gunicorn的部分这篇就不提了。有机会另外写一篇gunicorn的。

原创粉丝点击