gpt4 book ai didi

python - 处理来自 gunicorn 的请求

转载 作者:IT王子 更新时间:2023-10-29 00:23:10 24 4
gpt4 key购买 nike

尝试在 Rackspace.com 上设置服务器。

做了以下事情:

  • 已安装 Centos 6.3
  • 已安装 Python 2.7
  • 使用主页上的“快速启动”安装了 gunicorn:gunicorn.org/

在快速启动中,似乎初始化了一个“hello world”应用程序:

创建文件“myapp.py”:

(tutorial) $ vi myapp.py(tutorial) $ cat myapp.py

Contents of "myapp.py"

def app(environ, start_response):
data = "Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])

由于我对服务器知之甚少,所以我不知道下一步该怎么做。我尝试在浏览器中输入服务器的 IP 地址,但这似乎导致超时。

我不确定是否有:

  • 需要安装的其他东西。 Gunicorn 网站上的“deploy”下提到了 Nginx。看起来 Nginx 是一个代理服务器,这让我感到困惑,因为我认为 gunicorn 是一个服务器。不确定为什么需要两台服务器?
  • 需要在 gunicorn 中配置的东西
  • 需要在服务器本身上配置的东西
  • 为了实际满足请求而完全需要完成的其他事情

下一步是什么?

非常感谢!

最佳答案

因为 gunicorn 是您案例中的 Web 服务器,Nginx 将充当后台代理,将 HTTP 请求从 Nginx 传递到 gunicorn。

因此,我将在此处列出在同一台机器上运行的简单 Nginx 和 Gunicorn 配置的步骤。

  • 从 nginx 配置开始

转到您的 /etc/nginx/nginx.conf 并在 http{} 下确保您有:include/etc/nginx/site-enabled/*;

http{
# other configurations (...)
include /etc/nginx/sites-enabled/*;
}

现在,在/etc/nginx/sites-enabled/mysite.conf 中包含一个文件,您可以在其中将您的请求代理到您的 gunicorn 应用。

server {
listen 80 default; # this means nginx will be
# listening requests on port 80 and
# this will be the default nginx server
server_name localhost;

# declare proxy params and values to forward to your gunicorn webserver
proxy_pass_request_headers on;
proxy_pass_request_body on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 120s;

location / {
# here is where you declare that every request to /
# should be proxy to 127.0.0.1:8000 (which is where
# your gunicorn will be running on)
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;

proxy_pass http://127.0.0.1:8000/; # the actual nginx directive to
# forward the request
}
}

好的,此时您所拥有的只是一个充当代理的 Nginx,所有发送到 127.0.0.1:80 的请求都将传递到 127.0.0.1:8000。

  • 现在是配置您的 Gunicorn 网络服务器的时候了:

通常我的做法是使用配置文件,Gunicorn 配置文件可以是普通的 python 文件。所以现在,在你喜欢的任何位置创建一个文件,我假设这个文件是 /etc/gunicorn/mysite.py

workers = 3              # number of workers Gunicorn will spawn 

bind = '127.0.0.1:8000' # this is where you declare on which address your
# gunicorn app is running.
# Basically where Nginx will forward the request to

pidfile = '/var/run/gunicorn/mysite.pid' # create a simple pid file for gunicorn.

user = 'user' # the user gunicorn will run on

daemon = True # this is only to tell gunicorn to deamonize the server process

errorlog = '/var/log/gunicorn/error-mysite.log' # error log

accesslog = '/var/log/gunicorn/access-mysite.log' # access log

proc_name = 'gunicorn-mysite' # the gunicorn process name

好的,所有的配置都设置好了。现在您只需要做的就是启动服务器。

启动 gunicorn 并告诉它使用哪个应用程序和哪个配置文件。从命令行和 myapp.py 文件所在的文件夹运行:

gunicorn -c /etc/gunicorn/mysite.py mysite:app

现在,只启动nginx。

/etc/init.d/nginx start 

service nginx start

希望这对您有所帮助。

关于python - 处理来自 gunicorn 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12858674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com