linux 应古尼科恩的请求

snz8szmq  于 2023-10-16  发布在  Linux
关注(0)|答案(4)|浏览(94)

正在尝试在Rackspace.com上设置服务器。
做了以下几件事:

  • 安装Centos 6.3
  • 安装Python 2.7
  • 使用主页上的“快速入门”安装gunicorn:gunicorn.org/

在快速启动中,似乎初始化了一个“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地址,但似乎导致超时。
我不确定是否有:

  • 需要安装的其他东西。Nginx在gunicorn网站的“deploy”下被提及。看起来Nginx是一个代理服务器,这让我很困惑,因为我以为Gunicorn是一个服务器。我不知道为什么我需要两个服务器。
  • 需要在Gunicorn中配置的内容
  • 需要在服务器本身上配置的内容
  • 一些完全不同的事情需要去做,以实际满足一个请求,

下一步是什么?
太感谢你了!

olmpazwi

olmpazwi1#

由于gunicorn是您的案例中的Web服务器,Nginx将充当后台代理,将HTTP请求从Nginx传递到gunicorn。
所以,我将在这里列出在同一台机器上运行简单Nginx和Gunicorn配置的步骤。

*从nginx配置开始

转到你的**/etc/nginx/nginx.conf**,在http{}下确保你有:/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 webserver了:

通常我使用配置文件的方式,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

希望这对你有帮助。

6yjfywim

6yjfywim2#

看看快速入门指南,你可能应该跑

(tutorial) $ ../bin/gunicorn -w 4 myapp:app

这应该会产生一条看起来有点像这样的线:

Listening at: http://127.0.0.1:8000

还有其他人看看你能不能在这个地址上访问你的网站。
还要注意,127.0.0.1是IP地址;只能从主机本身访问。要让gunicorn绑定到另一个选项,按照Jan-Philip的建议,传递它--bind 0.0.0.0:80
既然你提到了rackspace,你可能需要调整防火墙设置,以允许传入连接到所需的端口。

dxpyg8gm

dxpyg8gm3#

您目前还没有开发Web应用程序。因此,我假设您现在的目标是建立一个开发环境。目前,使用大多数框架中包含的开发Web服务器开发Web应用程序,例如。 flask

无论使用什么框架,都要让开发Web服务器监听0.0.0.0,这样服务就能监听所有配置的网络接口,并确保端口对外开放(检查Rackspace设置)。

当您完成应用程序的开发或正在研究现有应用程序时,您必须以可靠的方式部署它。那么,nginx后面的gunicorn是一个选择。
我会大致回答你的问题。看来你得多读一点了:-)

  • Nginx在gunicorn网站上的“deploy”下提到。看起来Nginx是一个代理服务器,这让我很困惑,因为我以为Gunicorn是一个服务器。我不知道为什么我需要两个服务器。

Nginx是一个全功能的Web服务器。它因其性能和稳定性而受到赞赏。人们使用它来服务静态文件(不给动态Web应用程序增加此任务的负担),在必要时将请求转发到Web应用程序,用于SSL终止和负载平衡。请注意,这是一个不完整的图片。
gunicorn是一个服务WSGI应用的服务器。它主要管理实际执行Web应用程序的工作进程。

    • 一些需要在gunicorn中配置的东西。这需要在服务器上进行配置。一些完全不同的事情,需要做才能真正满足请求。

实际上,你可以用无数种方式优化你的Linux机器(为了性能,例如。增加文件描述符限制和安全性)。在gunicorn中,您可以配置工作进程的数量以及更多。如果你有nginx作为前端,甚至是另一个负载均衡器,这个有自己的配置。您可以看到,对于实际场景中的实际部署,您的设置可能会变得非常复杂。这可不是小事。
然而,对于使用WSGI应用程序,只需正确地设置您的开发框架,这在大多数情况下非常简单,并确保没有防火墙问题。仅此而已

nx7onnlm

nx7onnlm4#

您可能只需要绑定到localhost:8000(127.0.0.1:8000)以外的其他对象即可

假设你在一个python venv中,或者可以从命令行运行gunicorn --help,那么你应该看到一个选项:

-b ADDRESS, --bind ADDRESS
    The socket to bind. [['127.0.0.1:8000']]

正如你所看到的,* 默认值是只绑定到localhost,127.0.0.1,所以如果你能够使用localhost地址访问端点,但不能从主机外部的地址访问它,例如从本地或远程网络 * 那么你的问题很可能通过简单地绑定到所有接口/地址来解决。
添加--bind参数。例如,我正在运行我的应用程序:

gunicorn -w 4 'server:app' --bind 0.0.0.0:8000

相关问题