Ubuntu 10.04を使用しています。
私はDjango atest
という名前の/home/wong2/Code/python/Django2/
の下にプロジェクトを作成します
同じディレクトリにwsgiファイルsetting.wsgi
を作成します
これがsetting.wsgi
の内容です。
import os
import sys
path = '/home/wong2/Code/python/Django2'
if path not in sys.path:
sys.path.append(path)
os.environ["Django_SETTINGS_MODULE"] = "atest.settings"
from Django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
そして、これが私のhttpd.confに追加するものです:
<VirtualHost *:80>
ServerName localhost
WSGIScriptAlias / /home/wong2/Code/python/Django2/setting.wsgi
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
<Directory "/home/wong2/Code/python/Django2/atest">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
問題は、私が http:// localhost にアクセスすると、
禁じられた
このサーバーで/にアクセスする権限がありません。
どうもありがとう。
2番目のディレクトリブロックは、WSGIスクリプトファイルがインストールされている場所と一致しません。 WSGIスクリプトファイルを、ソースコードや他の機密ファイルが存在する場所、つまり同じディレクトリまたはサブディレクトリに貼り付けることは非常に悪い習慣です。代わりに、独自のサブディレクトリに貼り付ける必要があります。したがって:
WSGIScriptAlias / /home/wong2/Code/python/Django2/atest/Apache/setting.wsgi
<Directory "/home/wong2/Code/python/Django2/atest/Apache">
Order allow,deny
Allow from all
</Directory>
したがって、「atest」の下に「Apache」サブディレクトリを作成します。 「setting.wsgi」を「Apache」サブディレクトリに移動し、設定を上記に変更します。
また、Apacheが内部を見ることができないため、ホームディレクトリの制限された権限によって問題が発生する場合もあります。
見に行く:
http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations
これらのアクセス許可の問題と、コードの貼り付け場所やWSGIスクリプトファイルなどの問題について説明しています。
また読む:
Django 1.5+では、ドキュメントで説明されている推奨される方法を使用する必要があります。
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/
ファイルのアクセス許可が制限されているため、同じ問題が発生しました。
デフォルトでは、ホームフォルダーのユーザーには次の設定があります。
ls -l /home/
drwx ------ 36ユーザーユーザー12288 11月28日20:56ユーザー
つまり、自分以外の誰もそのフォルダを参照することはできません。
フォルダーに実行オプションを追加すると問題が解決しました
chmod o+x /home/user/
ls -l /home/
drwx ----- x 36ユーザーuser 12288 Nov 28 20:56ユーザー
試してみてください http://localhost/index.html これはApacheページを示していますか?
Wsgiがrootで正しく設定されている場合、正しく動作しません。
Webサーバーにwwwフォルダーのディレクトリリストを要求している可能性があるため、このエラーメッセージが表示されます。
edit:
私のプロジェクトは常に
/ var/pyproj // pysrc /および/ var/py_proj // server /に配置したサーバーファイル
これが私のwsgiスクリプトへの行き方です
import os, sys
import logging
logger =logging.getLogger("")
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stderr)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)-8s %(messages)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
sys.stdout = sys.stderr
from os.path import abspath, dirname, join
import site
PROJECT_ROOT = abspath(join(dirname(__file__), "../pysrc"))
SETTINGS_LOC = abspath(join(PROJECT_ROOT, ''))
site.addsitedir(SETTINGS_LOC)
os.environ["Django_SETTINGS_MODULE"] = "settings"
from Django.core.management import setup_environ
import settings
setup_environ(settings)
sys.path.insert(0, join(PROJECT_ROOT, "apps"))
from Django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
私はvhost.confを使用します
WSGIDaemonProcess pinax_demo user=www-data group=www-data threads=10 python-path=/var/.virtualenvs/pinax_demo/lib/python2.6/site-packages
<Directory /var/py_proj/pinax_demo/server/>
Order deny,allow
Allow from all
</Directory>
Alias /pinax_demo /var/py_proj/pinax_demo/server/pinax_demo.wsgi
<Location /pinax_demo/>
#WSGIProcessGroup must match the WSGIDaemonProcess
WSGIProcessGroup pinax_demo
SetHandler wsgi-script
Options +ExecCGI
</Location>
これは、次のようなファイルのsites-availableフォルダーに含めます
<VirtualHost *:8080>
DocumentRoot /var/www/
<Directory /var/www/>
Order deny,allow
Allow from all
Options -Indexes FollowSymLinks
DirectoryIndex index.php
AllowOverride None
</Directory>
ServerAdmin [email protected]
LogLevel error
ErrorLog /var/srv_logs/Apache_error.log
CustomLog /var/srv_logs/Apache_access.log combined
#insert
Include /var/py_proj/pinax_demo/server/vhost.conf
Include /var/py_proj/<other>/server/vhost.conf
Include /var/py_proj/<other>/server/vhost.conf
</VirtualHost>
httpd.confは空です。 Apacheは静的ファイルの送信もひどいので、Apacheに転送するために、ポート8080にApacheを設定し、ポート80にnginxを設定しています。あなたは私のサイトで利用可能なファイルのポートを変更するだけでnginxなしでそれを実行できるはずですが、私はそのようにライブに行きません