Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
UWSGIのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
UWSGI
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{Lowercase title}} [[Category:ウェブサーバー]] [[en:UWSGI]] uWSGI は高速で自己回復機能のある、開発者とシステム管理人に優しいアプリケーションコンテナサーバーです。C だけで書かれています。 == インストール == [[公式リポジトリ]]の {{Pkg|uwsgi}} パッケージを[[インストール]]してください。パッケージをコンパクトにするために、プラグインは付属していません。外部プラグインは別にインストールする必要があります。C で書かれているためとても効率的なソフトウェアです。{{Pkg|gunicorn}} など Python で書かれた代替も存在しますが、どうしても動作は遅くなってしまいます。 == サービスの起動 == {{Note|アプリケーション (Python アプリケーション) ごとにそれぞれ uwsgi サービスのインスタンスを作成するのが一番シンプルな構成です。uwsgi サービスを有効化・起動する前に、{{ic|/etc/uwsgi/}} の中に同一の名前の設定ファイルを作成してください。以下では {{ic|/etc/uwsgi/helloworld.ini}} を使っています。}} スタートアップ時にデフォルトで uwsgi サービスを有効にするには、次を実行: # systemctl enable uwsgi@helloworld これで {{ic|/etc/uwsgi/helloworld.ini}} 設定されたアプリケーションのサービスが有効になります。また、以下のコマンドを使ってソケットインターフェイスで有効にすることも可能です: # systemctl enable uwsgi@helloworld.socket もしくは、[http://uwsgi-docs.readthedocs.org/en/latest/Emperor.html Emperor モード] サービスを実行することができます。このモードを使うと uwsgi インスタンスで (emperor と呼ばれる) メインスーパーバイザーを使って様々なアプリ (vassal と呼ばれます) が動くようになります。有効にするには、次を入力: # systemctl enable emperor.uwsgi ソケットを使うこともできます: # systemctl enable emperor.uwsgi.socket Emperor の設定は {{ic|/etc/uwsgi/emperor.ini}} にあります。 == 設定 == {{Note|標準インストールでは {{ic|/etc/uwsgi/archlinux.ini}} は付属していません。}} {{ic|/etc/uwsgi/}} 内のファイルを編集することで設定ができます。パッケージに含まれているビルドファイルは {{ic|/etc/uwsgi/archlinux.ini}} に存在します。 詳しくは [http://uwsgi-docs.readthedocs.org/en/latest/ uwsgi のドキュメント] を見て下さい。 {{Note|全てのオプションのリストは次の資料を参照してください: http://uwsgi-docs.readthedocs.org/en/latest/Options.html 。}} ===== アプリケーションの設定 ===== 以下は python をサポートするシンプルな例です。pacman で community リポジトリから {{Pkg|uwsgi-plugin-python}} または {{Pkg|uwsgi-plugin-python2}}{{Broken package link|パッケージが存在しません}} プラグインをインストールする必要があります。 [uwsgi] chdir = /srv/http/helloworld module = helloworld plugins = python 以下のような構文を使うことで uwsgi を別個に実行することも可能です: {{Note|pacman でインストールした uwsgi から {{ic|--wsgi-file}} オプションを使うことはできません。公式ガイドではソースからビルドすることを推奨しています (http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#installing-uwsgi-with-python-support を参照)。}} uwsgi --socket 127.0.0.1:3031 --plugin python2 --wsgi-file ~/foo.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191 --uid --gid 上記のコマンドを root で実行するのは止めてください。 ==== Php アプリケーション ==== uwsgi の php プラグインをインストール: {{Pkg|uwsgi-plugin-php}} {{hc|/etc/uwsgi/mysite.ini|<nowiki> [uwsgi] ; maximum number of worker processes processes = 4 ; the user and group id of the process once it’s started uid = http gid = http socket = /run/uwsgi/%n.sock master = true chdir = /srv/http/%n ; php plugins = php ; jail our php environment php-docroot = /srv/http/%n php-index = index.php ; clear environment on exit vacuum = true </nowiki>}} Nginx 設定: location = /index.php { include uwsgi_params; uwsgi_modifier1 14; uwsgi_pass unix:/run/uwsgi/mysite.sock; } ===== Nginx の設定 ===== location / { root /usr/share/nginx/html; index index.html index.htm; include uwsgi_params; # uwsgi_pass unix:/var/run/uwsgi/helloworld.sock; uwsgi_pass 127.0.0.1:3031; } == ヒントとテクニック == uWSGI が提供する一部の機能は、[[公式リポジトリ]] で提供される [[systemd]] サービスファイルを使用してアクセスすることはできません。 これらの変更点については、次のセクションで説明します。詳細については、[https://sleepmap.de/2016/securely-serving-webapps-using-uwsgi/] を参照してください。 === ソケットのアクティブ化 === ソケットアクティベーションを使用して、次のことを行います。 * Web サーバーを unix ソケットに誘導し、アプリケーションを実行している uWSGI インスタンスを起動します。 * アイドリング時間が経過すると、uWSGI によってアプリケーションがクローズされます。 * アプリケーションがアクセスされた後、ウェブサーバが再びアプリケーションを起動できるようにしたい。 uWSGI には、インスタンスにアプリケーションを閉じるための設定が用意されています。 {{hc|/etc/uwsgi/example.ini|<nowiki> [uwsgi] # ... # set idle time in seconds idle = 600 # kill the application after idle time was reached die-on-idle = true # ... </nowiki>}} しかし、現在の {{ic|uwsgi@.service}} ファイルはこれを許さない。なぜなら、[[systemd]] はゼロ以外の終了コードを失敗として扱い、それによってユニットを失敗としてマークするからであり、さらに {{ic|1=Restart=always}} ディレクティブはアイドル時間後に終了することを無意味にしてしまうからです。 これを修正するには、終了コードを追加します。終了コードは、アプリケーションを単独で閉じた後に uWSGI がリストに提供する可能性があり、[[systemd]] が {{ic|SuccessExitStatus}} ディレクティブを使用して成功として処理します (詳細については、[https://sleepmap.de/2016/securely-serving-webapps-using-uwsgi/] を参照) {{hc|/etc/systemd/system/uwsgi-socket@.service|<nowiki> [Unit] Description=uWSGI service unit After=syslog.target [Service] ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/%I.ini ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -INT $MAINPID Type=notify SuccessExitStatus=15 17 29 30 StandardError=syslog NotifyAccess=all KillSignal=SIGQUIT [Install] WantedBy=multi-user.target </nowiki>}} これにより、アイドル後の Kill 機能を使用してソケットを適切にアクティブ化できるようになります。 === uWSGI サービスの強化 === Web アプリケーションは実際に公開されており、その品質と基礎となる言語のセキュリティに応じて、実行するのが他のアプリケーションよりも危険なものもあります。 安全でない可能性のある Web アプリケーションへの対処を始める良い方法は、それらを刑務所に入れることです。 [[systemd]] には、使用できる機能がいくつかあります。 次の例を見てください (詳細については、{{man|5|systemd.exec}} および [https://sleepmap.de/2016/securely-serving-webapps-using-uwsgi/] を参照してください。) {{hc|/etc/systemd/system/uwsgi-secure@.service|<nowiki> [Unit] Description=uWSGI service unit After=syslog.target [Service] ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/%I.ini ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -INT $MAINPID Type=notify SuccessExitStatus=15 17 29 30 StandardError=syslog NotifyAccess=all KillSignal=SIGQUIT PrivateDevices=yes PrivateTmp=yes ProtectSystem=full ReadWritePaths=/etc/webapps /var/lib/ ProtectHome=yes NoNewPrivileges=yes [Install] WantedBy=multi-user.target </nowiki>}} {{Note| * {{ic|1=NoNewPrivileges=yes}} は [[Mailman]] の cgi フロントエンドでは動作しません!この設定を併用したい場合は削除してください。 * さらに強固にしたいのであれば、名前空間を使うことをお勧めします。このトピックについては [https://uwsgi-docs.readthedocs.io/en/latest/Namespaces.html uWSGI namespaces documentation] をご覧ください。 }} === uWSGI ソケットのアクセシビリティ === {{Pkg|uwsgi}} のデフォルト (アプリケーションごと) ソケットユニット ({{ic|uwsgi@.socket}}) では、システム上のすべてのユーザーに読み取りおよび書き込みアクセスが許可されます。 ただし、systemd では、より細かく粒度の高いアクセス管理が可能です ({{man|5|systemd.socket}} を参照) これにより、UNIX ソケットへのアクセスをより制限することができます。 (事前に [[tmpfiles]] を使って作成する必要があります。参考は [[ウェブアプリケーションパッケージガイドライン]] を参照してください)、その [[グループ]] とファイルの [[パーミッション]] を変更することで、ソケットは [[root]] と [[ウェブサーバー]] だけがアクセスできるようになり、Web アプリケーションを独自のユーザーとして実行できるようになります: {{hc|/etc/systemd/system/uwsgi-secure@.socket|<nowiki> [Unit] Description=Socket for uWSGI %I [Socket] ListenStream=/run/%I/%I.sock SocketGroup=http SocketMode=0660 [Install] WantedBy=sockets.target </nowiki>}} == トラブルシューティング == === Apache httpd === ==== AH00957: uwsgi: attempt to connect to 127.0.0.1:0 (*) failed ==== デフォルトの uWSGI ポート (3031) は、(現時点では?) Apache httpd サーバーでは機能しません。詳細については、[https://github.com/unbit/uwsgi/issues/1491] を参照してください。 == 参照 == * [http://uwsgi-docs.readthedocs.org/en/latest 公式ドキュメント] * [https://github.com/unbit/uwsgi-docs UWsgi Github] * [http://blog.kgriffs.com/ Fluffy White Stuff Benchmark] * [http://flask.pocoo.org/docs/deploying/uwsgi/ Flask uwsgi deploying] * [https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/uwsgi/ Django and uWSGI] * [https://www.youtube.com/watch?v=tD6UCfPCVLA Flask with uwsgi and nginx video] * [http://uwsgi-docs.readthedocs.org/en/latest/Apache.html Apache and uwsgi]
このページで使用されているテンプレート:
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Lowercase title
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
UWSGI
に戻る。
検索
検索
UWSGIのソースを表示
話題を追加