0

組み込みモードでapache2 + mod_wsgiを使用して作成および実行したPython WSGIアプリを持っています。それをデーモンモードで実行しようとしています。

問題は、構成 (以下) では、アプリを表示する代わりに、デフォルトの Apache2 が表示されることです。このページは、その運用状況を熱心に述べているにもかかわらず、間違っています。

アプリ名と URL などのみをサニタイズしたので、使用している apache conf 全体が表示されます。

<VirtualHost *:80>
  ServerName app.example.com
  ServerAlias app

  WSGIDaemonProcess appname user=www-data group=www-data processes=5 threads=5 display-name=%{GROUP} maximum-requests=1000
  WSGIScriptAlias / /usr/share/app/app/application.wsgi

  Alias /static /usr/share/app/app/static

  ErrorLog /var/log/apache2/app/error.log
  CustomLog /var/log/apache2/app/access.log common

<Directory /usr/share/app/app>
    WSGIProcessGroup appname
    Order allow,deny
    Allow from All
</Directory>

<Directory /usr/share/app/app/static>
    Order allow,deny
    Allow from All
</Directory>
</VirtualHost>

WSGIProcessGroup オプションをセクション内に配置するか、メイン セクションだけに配置するかに関係なく、これは依然として「動作します!」と表示されます。ページ。

アプリはボトルと toscawidgets を使用し、wsgi バリデーターを使用して、すべてが適切に動作していることを確認します。アプリケーションの構築に使用するコード:

import bottle
import tw.api
from wsgiref.validate import validator
#.... A whole buttload of code
application = bottle.default_app()
application = tw.api.make_middleware(application, stack_registry=True)
application = validator(application)

編集: Python 2.6.5 を使用した mod_wsgi 2.8 と Python 2.7.3 を使用した mod_wsgi 3.3 の両方でこの問題が発生したことにも注意してください。

編集 2: /static/ のエイリアスはまだ機能しているため、まだ VirtualHost にアクセスしているように見えます。WSGIProcessGroup ディレクティブをコメントアウトして Apache を再起動すると、正常に動作しますが、デーモン モードではなく組み込みモードで動作します。

4

2 に答える 2

1

次の点を除いて、構成の mod_wsgi 部分に特に問題はないようです。

user=www-data group=www-data

Apache を実行するユーザーにデフォルト設定されるため、明示的に設定する必要がないため冗長です。特定の必要がない限り、 maximum-requests の使用もお勧めしません。

根本的な問題は、VirtualHost 定義全体が使用されていない可能性が高いです。

VirtualHost に構文エラーを追加して、Apache によって読み取られているかどうかを確認します。「xxx」を含む行を追加するだけで、構文エラーをトリガーするのに十分です。

が読み取られている場合は、名前付き仮想ホストが有効になっているかどうかを確認する必要があります。つまり、適切な NameVirtualHost ディレクティブが存在しますか。

次の問題は、ServerName に指定されたホスト名が実際に Apache で終わるかどうかです。あなたは明らかに「app.example.com」を所有していませんが、実際に使用しているものは実際にこの Apache にアクセスします。Apache をシャットダウンして、再試行してください。連絡が取れない場合は、少なくともそれは正しいでしょう。

その後、同じ ServerName にもサービスを提供しようとしている既存の VirtualHost がないことを確認する必要があります。

于 2012-05-08T03:55:17.827 に答える
-1

この VirtualHost にまったくアクセスしていないと思われます。「NameVirtualHost *:80」はどこにありますか? 実際に app.example.com またはアプリ名を介してサイトにアクセスしていますか?

于 2012-05-08T03:51:55.607 に答える