尝试在Rackspace.com上设置服务器。
做了以下事情:
在快速入门中,似乎已初始化“hello world”应用程序:
创建文件“ myapp.py ”:
(tutorial) $ vi myapp.py (tutorial) $ cat myapp.py
“ 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地址,但这似乎导致超时。
我不确定是否有:
接下来的步骤是什么?
非常感谢!
答案 0 :(得分:33)
因为gunicorn是你服务器上的一个Web服务器,Nginx将作为一个后代理,将来自Nginx的HTTP请求传递给gunicorn。
因此,我将在此处介绍在同一台机器上运行的简单Nginx和Gunicorn配置的步骤。
转到 /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配置文件可以是普通的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
希望这有帮助。
答案 1 :(得分:18)
查看快速入门指南,您可能应该运行
(tutorial) $ ../bin/gunicorn -w 4 myapp:app
应该产生一条看起来有点像的行:
Listening at: http://127.0.0.1:8000
其中。看看你是否可以通过该地址访问您的网站。
另请注意127.0.0.1
是环回地址;只能从该主机本身访问。为了让gunicorn绑定到不同的选项,传递它--bind 0.0.0.0:80
,正如Jan-Philip建议的那样。
由于您提到了rackspace,因此可能需要调整防火墙设置以允许到所需端口的传入连接。
答案 2 :(得分:6)
看起来您目前还没有开发过Web应用程序。所以,我认为你现在的目标是建立一个开发环境。目前,使用大多数框架中包含的开发Web服务器开发Web应用程序,例如烧瓶中。
无论您使用何种框架,请使开发Web服务器侦听0.0.0.0,以便服务正在侦听所有已配置的网络接口,并确保该端口对外开放(检查Rackspace设置) 强>
当您完成应用程序的开发或正在查看现有应用程序时,您必须以可靠的方式部署它。然后,在nginx背后的gunicorn是一个选择。
我会粗略地回答你的问题。它看起来你需要阅读更多: - )
Nginx是一个功能齐全的网络服务器。它的性能和稳定性令人赞赏。人们使用它来提供静态文件(不会给使用此任务的动态Web应用程序带来负担),在必要时将请求转发给Web应用程序,用于SSL终止和负载平衡。请注意,这是一张不完整的图片。
gunicorn是一个服务WSGI应用程序的服务器。主要是,它管理实际执行Web应用程序的工作进程。
实际上,您可以以无限的方式优化您的Linux盒子(为了提高性能,例如增加文件描述符限制和安全性)。在gunicorn中,您可以配置工作进程的数量等等。如果你有nginx作为前端或甚至另一个负载均衡器,这个有自己的配置。您会发现,在实际场景中,您的设置可能会变得非常复杂。这不是微不足道的。
但是,要使用WSGI应用程序,只需正确设置开发框架,这在大多数情况下非常简单,并确保没有防火墙问题。就是这样。