经过很长时间的共享主机,我正在把我的东西移动到一个VPS,并有必要了解Nginx + uWSGI部署我的应用程序(python)。 花了几个星期的时间学习基础知识之后,我正在设置我的本地机器(ubuntu 11.04)在Nginx + uWSGI上运行我的应用程序。 我正在使用“Hello world”Ubuntu 10.10 linode指南 。 设置很简单,但是当我运行http://localhost/或http://127.0.0.1我每次都得到一个502 Bad Gateway。 欣赏如何让设置工作的指针。 我的nginx.conf: [我备份了默认的nginx conf(工作正常,当我打到http://localhost/时显示“Welcome to Nginx”),并用linode指南中的这个自定义nginx conf取而代之,它把nginx链接到uWSGI服务器。 ] worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name localhost; access_log /srv/www/myHostname/logs/access.log; error_log /srv/www/myHostname/logs/error.log; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9001; } location /static { root /srv/www/myHostname/public_html/static/; […]
到目前为止,我一直在尝试使用uWSGIreplace构build的许多kludgy服务器代码,并在监督下为Python wsgi应用程序进行设置。 我正在同时运行几十个这样的小项目(Django,Flask等)。 目前我在Virtualhost模式下运行,我允许NGINX基本上调用应用程序。 但是,似乎重新加载function“触摸重新加载”是为了一个特定的文件。 有没有办法使用“触摸重新加载”来监视正在运行的模块,通过指定每个站点或自动? 或者有没有办法让触摸重新加载被configuration为每个应用程序? 我也看到了皇帝模式,这似乎可能是一个稍微不好的替代品,但我不确定我的用例是否会导致数十甚至数百个进程产卵。 我喜欢虚拟主机模式,因为它基本上共享了所有应用程序的工作者池,这对我来说似乎是最有效的。 当前configuration: uWSGI <uwsgi> <vhost-host/> <master/> <gid>www-data</gid> <uid>www-data</uid> <catch-exceptions/> <socket>/var/tmp/uwsgi.sock</socket> <chmod-socket/> <idle>300</idle> <processes>6</processes> <no-orphans/> <enable-threads/> <reload-mercy>5</reload-mercy> <threads>10</threads> <no-default-app/> <touch-reload/> <!– <reload-on-rss>128</reload-on-rss> Reload at 128MB of RSS (memory usage) –> </uwsgi> 更新: 在做了一些关于uWSGI如何处理closures空闲工作人员的研究后,我想我终究需要皇帝模式。 我想要做的是让很less使用的应用程序不占用资源,而且使用的应用程序占用更多的资源。 我试图做到这一点,同时保持一个像PHP-FPM一样简单的托pipe部署。 虚拟模式实现了这一点,但似乎closures所有的工作人员,只有所有的应用程序已经空闲,这是没有用的,如果任何应用程序收到稳定的stream量。 如果不真实,我很乐意在这个问题上予以纠正。 使用皇帝模式的缺点是我将不得不为每个应用程序(Blech!)制作套接字文件和configuration文件。 我仍然想知道是否有可能实现上述每个应用程序重新加载。
错误信息: uWSGI worker 5 screams: UAAAAAAH my master disconnected: i will kill myself !!! 我使用uWSGI作为服务器在Ubuntu 12.04上保存我的金字塔应用程序
我想设置我的nginx conf,以便我可以为我的多个Django项目提供相关文件。 最终,我希望每个应用程序在www.example.com/app1,www.example.com/app2等都可用。它们都从位于各自项目根目录中的“静态文件”目录提供静态文件。 项目结构: Home Ubuntu Web www.example.com ref logs app app1 app1 static bower_components templatetags app1_project templates static-files app2 app2 static templates templatetags app2_project static-files app3 tests templates static-files static app3_project app3 venv 当我使用下面的conf时,服务我在/ static / location中指定的应用程序的静态文件没有问题。 我也可以访问在他们的位置find的不同的应用程序。 但是,我不知道如何同时为所有的应用程序提供所有的静态文件。 我已经研究了使用“try_files”命令的静态位置,但不知道如何看它是否工作。 Nginx Conf – 只为一个应用程序提供静态文件: server { listen 80; server_name example.com; server_name www.example.com; access_log /home/ubuntu/web/www.example.com/logs/access.log; […]
我有一个运行于端口8080的Bottle-webserver的Python应用程序。现在我将通过wsgi文件将Nginx连接到Bottle-webserver。 现在,我有一个wsgi文件,但我怎么能用Nginx执行这个? Nginxconfiguration中的哪些命令(default.conf)是否需要? 也许我的想法是错误的。 有人能给我一些清晰吗? 我有这个在Nginx的configuration: server { location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; } } 现在,我在日志中看到(111: Connection refused) while connecting to upstream)的错误(111: Connection refused) while connecting to upstream) 。 任何人的想法?
我在我的uWSGI日志中获得了以下回溯,我不知道从哪里开始寻找解决办法: DAMN ! worker 5 (pid: 29056) died 🙁 trying respawn … Respawned uWSGI worker 5 (new pid: 29088) DAMN ! worker 6 (pid: 29080) died 🙁 trying respawn … Respawned uWSGI worker 6 (new pid: 29089) !!! uWSGI process 29089 got Segmentation Fault !!! *** backtrace of 29089 *** uwsgi(uwsgi_backtrace+0x2e) [0x468a9e] uwsgi(uwsgi_segfault+0x21) [0x468e61] /lib/x86_64-linux-gnu/libc.so.6(+0x36d40) […]
我知道可以在NGinx中使用error_page来服务静态文件,但是我想知道是否可以通过UWsgi提供的本地(插入式)Flask应用程序来服务URL。 这是NGinxconfiguration: server { listen 80; server_name www.myproject.com; access_log /var/log/nginx/myproject_frontend.access.log; error_log /var/log/nginx/myproject_frontend.error.log; # Something like : error_page 404 uwsgi_pass unix:/tmp/uwsgi_myproject.sock;/errors/404 location / { try_files $uri @yourapplication; } location @yourapplication { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi_myproject.sock; } } 这可能吗? 它会工作,而不是一个套接字,我会只允许本地(127.0.0.1)访问? 谢谢你的支持。
我正在使用django,uwsgi和nginx。 我已经尝试nginx和django文件来提供静态文件。 我的conf文件是: http { upstream django { server 127.0.0.1:8000; } server { listen 80; server_name 192.xx.xx.x; root /path/to/project/; location /static/ { alias /path/to/static/; } location / { include /etc/nginx/uwsgi_params; uwsgi_pass django; uwsgi_param Host $host; uwsgi_param X-Real-IP $remote_addr; uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto; } } } 我的configuration文件是真的吗? 我可以在server_name部分使用IP地址吗? (IP地址是我的机器IP)
我试图用nginx连接到由ubuntu-server上运行的supervisord控制的uwsgi服务应用程序来testing一个试验系统。 应用程序是用virtualenv中的Flask编写的,虽然我不确定这是否相关。 为了testing系统,我用flask创build了一个简单的hello world。 我希望nginx和uwsgi都以www数据用户的身份运行。 如果我从root shell“手动”启动uwsgi我可以看到uwsgi进程在适当的用户(www-data)下运行。 虽然,如果我让supervisor启动应用程序发生了一些奇怪的事情 – uwsgi进程正在我的用户(friendzis)下运行。 因此,套接字文件被创build在错误的用户下,nginx无法与我的应用程序通信。 注意:在Windows Server 2008下,linux服务器作为Hyper-V VM运行。 相关configuration: [uwsgi] socket = /var/www/sockets/cowsay.sock chmod-socket = 666 abstract-socket = false master = true workers = 2 uid = www-data gid = www-data chdir = /var/www/cowsay/cowsay pp = /var/www/cowsay/cowsay pyhome = /var/www/cowsay module = cowsay callable = app 监 [program:cowsay] […]
我正在ubuntu 10.04下运行一个uwsgi–python服务器。 我用upstart来启动/停止一个uwsgi守护进程(为uwsgi设置daemonize选项)。 启动和停止命令工作正常,但是当我尝试重新加载我的工作,它将无法正常工作。 原因是新贵把错误的东西与我的工作联系在一起,这也是一个过程,而不是一个主stream程。 主进程产生第三个(两个foremonization),并期待守护进程节点的新贵期望第二个分叉进程是主要的。 所以我想知道是否有办法强迫upsart将我的工作与uwsgi主进程ID或任何其他解决方法与这个问题的工作?