web-dev-qa-db-ja.com

Apache mod_wsgiエラー:禁止このサーバー上で/にアクセスする権限がありません

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 にアクセスすると、

禁じられた

このサーバーで/にアクセスする権限がありません。

どうもありがとう。

15
wong2

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スクリプトファイルなどの問題について説明しています。

また読む:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

17

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/

9
neosergio

ファイルのアクセス許可が制限されているため、同じ問題が発生しました。

デフォルトでは、ホームフォルダーのユーザーには次の設定があります。

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ユーザー

6
Viktor

試してみてください 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なしでそれを実行できるはずですが、私はそのようにライブに行きません

0
Plahcinski