zoukankan      html  css  js  c++  java
  • gunicorn+nginx配置方法

    对于gunicorn+nginx的配置,理解他们之间的关系很重要,以及最后如何确认配置结果是正确的也很重要

    nginx 配置文件:

    修改这个配置文件有3个用处:

    假设服务器本身的Ip是A称为ip-A,而我用gunicorn启动flask时写的ip是127.0.0.1,用ip-B表示

    1.当我在浏览器输入http://ip-A:端口(nginx的端口) 时,nginx会把访问地址指向http://ip-B:端口(gunicorn启动的端口)

    所以我们页面看到的内容实际是gunicorn启的flask的根页面,

    即视图函数中app.route('/')装饰器所装饰的函数所返回页面的内容

    那么这种映身关系在nginx.conf配置文件中如何配置呢?

    主要就是对proxy_pass进行配置

    参数说明:

    • listen是所需要监听的端口
    • server_name是需要绑定的域名,暂时没有域名时,请使用ip
    • location / 是当访问到根下的时候,将所有请求转发到127.0.0.1:8000,本文使转发到gunicorn启动的django应用上,中间配置的是需要转发的内容,基本上述内容可以满足大多需求,如需特殊需求请自行查看nginx官方文档
    • location /static/ 配置了静态文件所在的路径,静态文件由nginx处理,动态转发到django,如不配置会出现站点引用的所有js css都找不到

    完整的配置文件在这里作个备份:

     1 # For more information on configuration, see:
     2 #   * Official English Documentation: http://nginx.org/en/docs/
     3 #   * Official Russian Documentation: http://nginx.org/ru/docs/
     4 
     5 user nginx;
     6 worker_processes auto;
     7 error_log /var/log/nginx/error.log;
     8 pid /run/nginx.pid;
     9 
    10 # Load dynamic modules. See /usr/share/nginx/README.dynamic.
    11 include /usr/share/nginx/modules/*.conf;
    12 
    13 events {
    14     worker_connections 1024;
    15 }
    16 
    17 http {
    18     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    19                       '$status $body_bytes_sent "$http_referer" '
    20                       '"$http_user_agent" "$http_x_forwarded_for"';
    21 
    22     access_log  /var/log/nginx/access.log  main;
    23 
    24     sendfile            on;
    25     tcp_nopush          on;
    26     tcp_nodelay         on;
    27     keepalive_timeout   65;
    28     types_hash_max_size 2048;
    29 
    30     include             /etc/nginx/mime.types;
    31     default_type        application/octet-stream;
    32 
    33     # Load modular configuration files from the /etc/nginx/conf.d directory.
    34     # See http://nginx.org/en/docs/ngx_core_module.html#include
    35     # for more information.
    36     include /etc/nginx/conf.d/*.conf;
    37 
    38     server {
    39         listen       8001 default_server;
    40         listen       [::]:8001 default_server;
    41         server_name  10.2.1.92;
    42         root         /usr/share/nginx/html;
    43 
    44         # Load configuration files for the default server block.
    45         include /etc/nginx/default.d/*.conf;
    46 
    47         location / {
    48                 proxy_pass http://127.0.0.1:8000;
    49                 proxy_set_header Host $host;
    50                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    51         }
    52 
    53         error_page 404 /404.html;
    54             location = /40x.html {
    55         }
    56 
    57         error_page 500 502 503 504 /50x.html;
    58             location = /50x.html {
    59         }
    60     }
    61 
    62 # Settings for a TLS enabled server.
    63 #
    64 #    server {
    65 #        listen       443 ssl http2 default_server;
    66 #        listen       [::]:443 ssl http2 default_server;
    67 #        server_name  _;
    68 #        root         /usr/share/nginx/html;
    69 #
    70 #        ssl_certificate "/etc/pki/nginx/server.crt";
    71 #        ssl_certificate_key "/etc/pki/nginx/private/server.key";
    72 #        ssl_session_cache shared:SSL:1m;
    73 #        ssl_session_timeout  10m;
    74 #        ssl_ciphers HIGH:!aNULL:!MD5;
    75 #        ssl_prefer_server_ciphers on;
    76 #
    77 #        # Load configuration files for the default server block.
    78 #        include /etc/nginx/default.d/*.conf;
    79 #
    80 #        location / {
    81 #        }
    82 #
    83 #        error_page 404 /404.html;
    84 #            location = /40x.html {
    85 #        }
    86 #
    87 #        error_page 500 502 503 504 /50x.html;
    88 #            location = /50x.html {
    89 #        }
    90 #    }
    91 
    92 }

    很重要的调试命令:

    1.配置nginx.conf文件前先备份原文件,以免配置错误,无法还源

    2.使用命令检查修改后的nginx.conf文件,是否有语法问题

    sudo nginx -t #检查配置是否正确

    验证配置是否正确

    通过gunicorn启动flask项目

    首先切换到flask项目所在目录,并且项目已经配置过了wsgi.py的启动文件:

    wsgi.py文件内容如下:

    from app import create_app
    
    application = create_app()
    
    if __name__ == '__main__':
        application.run()

    激活带gunicorn的虚拟环境

    [root@67 flaskDemo]# lsvirtualenv 
    automationVenv
    ==============
    
    
    flaskApi
    ========
    
    
    rlcVenv
    =======
    
    
    [root@67 flaskDemo]# workon flaskApi

    确保nginx配置正确(看到successful字样表示配置正确)

    [root@67 nginx]# nginx -t 
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

    在浏览器中输入http://ip:nginx运行端口,看nginx启动页,表示nginx运行成功

    重启nginx命令:

    [root@67 nginx]# service nginx restart
    Redirecting to /bin/systemctl restart nginx.service

    接下来验证配置结果:

    在浏览器中输入ip地址:http://10.2.1.92:8001/users

    /users 是我在flask项目中已经定义好的页面。

    看到falsk项目视图定义好的内容,即表示nginx+gunicorn的关系配置好了:

    flaskDemo项目地址:

    https://github.com/wangju003/flaskDemo.git

    参考文档:

    https://baijiahao.baidu.com/s?id=1616440047552092518&wfr=spider&for=pc 

    https://www.jianshu.com/p/5600af9ff238

  • 相关阅读:
    如何从维护视图(Maintenace view)中取数据-[VIEW_GET_DATA]
    如何使用ref->*,field-symbols创建内表
    预制发票MIR7抬头行项目检查BADi-MRM_HEADER_CHECK
    如何跳转屏幕到MIGO-[MIGO_DIALOG]
    网络编程聊天室------客户端接收
    网络编程聊天室------客户端发送
    网络编程聊天室------客户端
    网络编程聊天室---------服务器线程类
    网络编程聊天室----服务器端
    小明滚出---响应对象HttpServletResponse和请求对象HttpServletRequest实例
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11576567.html
Copyright © 2011-2022 走看看