📜  nginx 代理 gunicorn (1)

📅  最后修改于: 2023-12-03 15:33:06.989000             🧑  作者: Mango

使用 Nginx 代理 Gunicorn

什么是 Gunicorn?

Gunicorn 是一个 Python 的 WSGI HTTP 服务器,可以用于在生产环境中运行 Python Web 应用程序。它使用 worker 进程来处理客户端请求,并且可以轻松地与其他 Web 服务器集成,如 Nginx。

什么是 Nginx?

Nginx 是一个高性能,开源的 HTTP 服务器和反向代理服务器。它被广泛用于加速静态内容的传递以及动态 Web 应用程序的负载平衡。

为什么需要使用 Nginx 代理 Gunicorn?

虽然 Gunicorn 在处理 Python Web 应用程序方面表现出色,但它并不是一个全功能的 Web 服务器。它无法处理静态内容、CDN、负载均衡和安全性等任务。因此,许多 Web 应用程序都使用 Nginx 作为反向代理服务器,将请求代理到 Gunicorn 或其他 Web 服务器上。

此外,使用 Nginx 代理 Gunicorn 可以提高性能并提高应用程序的可伸缩性。由于 Gunicorn 使用多个 worker 进程来处理请求,因此它可以轻松地扩展到多个 CPU 核心。

如何配置 Nginx 代理 Gunicorn?
  1. 安装 Nginx

    在 Debian/Ubuntu 上,可以使用以下命令安装 Nginx:

    sudo apt install nginx
    
  2. 安装 Gunicorn

    pip install gunicorn
    
  3. 配置 Gunicorn

    创建一个 Gunicorn 启动脚本,例如 gunicorn_config.py,指定应用程序启动文件和服务器监听地址和端口号

    bind = '127.0.0.1:8000'
    workers = 4
    threads = 2
    app_module = 'app:app'
    
  4. 启动 Gunicorn

    使用以下命令启动 Gunicorn:

    gunicorn -c gunicorn_config.py app:app
    
  5. 配置 Nginx

    在 Nginx 配置文件中添加以下代码段:

    server {
        listen 80;
        server_name example.com;
     
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    这个代码段告诉 Nginx 监听 80 端口,并将所有请求代理到 Gunicorn 在 127.0.0.1:8000 上监听的地址。

  6. 重启 Nginx

    使用以下命令重启 Nginx:

    sudo service nginx restart
    
总结

使用 Nginx 代理 Gunicorn 可以提高 Web 应用程序的性能、可伸缩性和安全性。在正确配置和优化后,Nginx 和 Gunicorn 可以帮助您创建快速、可靠和可扩展的 Web 应用程序。