带有 Nginx 和 uWSGI 的 Ubuntu 11.10

带有 Nginx 和 uWSGI 的 Ubuntu 11.10

我正在尝试让 LNP [Linux Nginx Python] 堆栈(这真的是一个东西吗?呵呵)运行,但是遇到了一些困难。

很多博客文章和文档都提到了如何使用 Upstart 来管理 uWSGI 进程,这样做很好,但我注意到软件包是使用 init.d 脚本和一些配置目录安装的/etc/uwsgi/{apps-enabled,apps-available}。所以显然有更好的方法。

我有一些配置文件(如下),但似乎无法启动 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"

uWSGI 配置

% 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

Nginx 配置

% 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

答案1

您已将 /srv/www/site/logs/uwsgi.log 作为日志守护了 uwsgi 应用服务器。uwsgi 日志应包含有关为何无法首先创建 sock 文件的信息。

答案2

查看你的 error.log,它可能是 unix:///tmp/site.sock 的权限问题,在你的 uwsgi conf.ini 中,你可能使用chmod 套接字此处概述的选项:uwsgi 文档

答案3

我总是建议新用户从官方快速入门开始,因为 uWSGI 的构建理念(你可以喜欢也可以不喜欢)是每个应用程序都与其他应用程序不同,并且每个应用程序都需要特定的调整。因此,在不完全理解基本概念的情况下进行配置可能会非常麻烦。

顺便说一句,看起来你有一个接近完全正常工作的配置,我注意到的错误是:

nginx 中的 uwsgi_pass 指令应该是

uwsgi_pass unix:/tmp/site.sock

(无额外斜线)

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

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

另一点需要注意的是:删除“daemonize”选项后,您可以尝试使用“uwsgi configfile”手动运行 uwsgi。这样,您就可以在终端中检查错误。

答案4

我知道这已经很晚了,但经过谷歌搜索后,如果你的套接字没有被创建,你可能忘记从目录创建./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

该目录中找到的某些文件由 uWSGI init.d 脚本作为 uWSGI 配置文件进行处理。

系统启动时,每个配置文件都会使用附加选项启动新的 uWSGI 守护进程实例。此选项的名称基于配置文件扩展名。配置文件的路径作为选项值传递。

更多详细信息请参见: * /usr/share/doc/uwsgi/README.Debian.gz * /etc/default/uwsgi

当然你不必重启系统,你可以sudo service uwsgi restart

笔记:我刚刚意识到您使用的是 11.10 而我正在使用 12.04,所以这可能对您不起作用。

相关内容