web-dev-qa-db-ja.com

NginxとuWSGIを搭載したUbuntu11.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
6
devians

/srv/www/site/logs/uwsgi.logをログとして使用してuwsgiアプリサーバーをデーモン化しました。 uwsgiログには、そもそもsockファイルを作成できなかった理由に関する情報が含まれている必要があります。

1
kaji

Error.logを見ると、unix:///tmp/site.sockのアクセス許可の問題である可能性があります。uwsgiconf.iniでは、chmod-socketオプションの概要: wsgi docs

1
junz

これはかなり遅いことはわかっていますが、かなりグーグルした後、ソケットが作成されていない場合は、./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読み取り

このディレクトリで見つかった一部のファイルは、uWSGIinit.dスクリプトによってuWSGI構成ファイルとして処理されます。

各構成ファイルのシステム起動時に、新しいuWSGIデーモンインスタンスが追加オプションで開始されます。このオプションの名前は、構成ファイルの拡張子に基づいています。構成ファイルへのパスは、オプション値として渡されます。

詳細については、次を参照してください。* /usr/share/doc/uwsgi/README.Debian.gz */etc/default/uwsgi

もちろん、システムを再起動する必要はありません。Sudo service uwsgi restart

注: 11.10を使用していて、12.04を使用しているので、これが機能しない可能性があることに気づきました。

0
John

UWSGIは、各アプリが他のアプリとは異なり、それぞれに特定の調整が必要であるという考えに基づいて構築されているため、新しいユーザーには常に公式のクイックスタートから始めることをお勧めします。したがって、基本的な概念を完全に理解せずに構成することは、実際の(実際の)PITAになる可能性があります。

ちなみに、ほぼ完全に機能する構成になっているようですが、間違っていることに注意してください。

nginxのuwsgi_passディレクティブは

uwsgi_pass unix:/tmp/site.sock

(追加のスラッシュなし)

Nginxはネイティブでuwsgiプロトコルを使用しているため、uWSGIインスタンスにhttpプラグインをロードする必要はありません。

/ srv/www/site/logsがwww-dataユーザーによって書き込み可能であることを確認し、最後に(提案として)TCPソケットの使用を開始します。これは、アクセス許可が不要で簡単に確認できるためです。 netstatのようなツール。

別の注意:「デーモン化」オプションを削除した後、「uwsgiconfigfile」を使用してuwsgiを手動で実行してみることができます。このようにして、ターミナルのエラーをチェックできます。

0
roberto