带有Nginx和uWSGI的Ubuntu 11.10

我试图得到一个LNP [Linux的Nginx Python]堆栈(这是甚至是一个东西?嘿),但我有一些困难。

很多博客文章和文档似乎都围绕使用Upstart来pipe理uWSGI进程,这很好,但是我注意到在/etc/uwsgi/{apps-enabled,apps-available} uwsgi中安装了init.d脚本和一些configuration目录的软件包/etc/uwsgi/{apps-enabled,apps-available} 。 所以显然有一个更好的方法来做到这一点。

我有一些configuration文件(下面),但我似乎无法启动uwsgi进程,运行init.d脚本什么也不做,报告成功,但失败(甚至没有日志)。

当我直接执行uWSGI我得到这个:

 % sudo uwsgi -i /etc/uwsgi/apps-enabled/site.ini tmp = / [uWSGI] getting INI configuration from /etc/uwsgi/apps-enabled/site.ini 

/usr/lib/uwsgi/plugins/python27_plugin.so

另外值得注意的是,当我尝试访问该网站时抛出的错误:

 % cat logs/error.log 2012/01/08 23:26:12 [crit] 9167#0: *13 connect() to unix://tmp/site.sock failed (2: No such file or directory) while connecting to upstream, client: 60.241.99.33, server: mysite.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix://tmp/site.sock:", host: "mysite.com" 

uWSGIconfiguration

 % cat /etc/uwsgi/apps-enabled/config.ini [uwsgi] uid = www-data gid = www-data home = /srv/www/site/myapp socket = /tmp/site.sock pythonpath = /srv/www/site/virtualenvs/default harakiri = 60 daemonize = /srv/www/site/logs/uwsgi.log plugins = http,python 

Nginxconfiguration

 % cat /etc/nginx/sites-enabled/mysite.com server { listen 80; server_name mysite.com; access_log /srv/www/site/logs/access.log; error_log /srv/www/site/logs/error.log; root /srv/www/site/public_html; index index.html index.htm; location / { uwsgi_pass unix:///tmp/site.sock; include uwsgi_params; } location ~ /\. { access_log off; log_not_found off; deny all; } location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; } } 

我在用着

 % dpkg --get-selections | grep uwsgi libapache2-mod-uwsgi install uwsgi install uwsgi-core install uwsgi-plugin-http install uwsgi-plugin-python install % dpkg --get-selections | grep nginx nginx-common install nginx-extras install nginx-full deinstall 

一些版本信息

 % nginx -V nginx: nginx version: nginx/1.0.5 nginx: TLS SNI support enabled nginx: configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_perl_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-development-kit --add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-upstream-fair --add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-lua --add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-http-push --add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-upload-progress --add-module=/build/buildd/nginx-1.0.5/debian/modules/nginx-secure-download % uwsgi --version uWSGI 0.9.8.1-debian 

用/srv/www/site/logs/uwsgi.log作为日志守护了uwsgi应用服务器。 uwsgi日志应该包含为什么无法首先创buildsock文件的信息。

看看你的error.log,它可能是unix:///tmp/site.sock的一个权限问题,在你的uwsgi conf.ini中,你可能使用这里列出的chmod-socket选项: uwsgi docs

我总是build议新用户从官方快速入门开始,因为uWSGI是以每个应用程序与其他应用程序不同的想法(您可以喜欢与否)为基础构build的,每个应用程序都需要特定的调整。 因此,在没有完全理解基本概念的情况下对其进行configuration可能是一个真实的(真实的)PITA。

顺便说一下,它看起来像你有一个接近完全工作的configuration,我注意到的错误的东西是:

nginx中的uwsgi_pass指令应该是

uwsgi_pass unix:/tmp/site.sock

(没有额外的斜线)

您不需要在uWSGI实例中加载http插件,因为nginx本地使用uwsgi协议。

确保/ srv / www / site / logs可以由www-data用户写入,最后(作为build议),开始使用TCP套接字,因为它们不需要权限,并且可以使用像netstat这样的工具轻松检查。

另外一个注意事项:在删除“守护进程”选项后,可以尝试使用“uwsgi configfile”手动运行uwsgi。 这样你可以检查你的terminal的错误。

我知道这是相当晚,但谷歌搜了很多之后如果你的套接字没有被创build,你可能忘了创build一个链接从./apps-enabled目录到./apps-available

 sudo ln -s /etc/uwsgi/apps-available/mysite.ini /etc/uwsgi/apps-enabled/mysite.ini 

$ cat /etc/uwsgi/apps-enabled/README读取

在这个目录中find的一些文件被uWSGI init.d脚本处理为uWSGIconfiguration文件。

在每个configuration文件的系统引导时,新的uWSGI守护程序实例将以附加选项启动。 该选项的名称基于configuration文件扩展名。 configuration文件path作为选项值传递。

查看更多详细信息:* /usr/share/doc/uwsgi/README.Debian.gz * / etc / default / uwsgi

当然你不必重新启动系统,只需要sudo service uwsgi restart

注:我刚刚意识到你正在使用11.10,我正在使用12.04,所以这可能不适合你。