Ошибка Apache mod_wsgi: Запрещено У вас нет прав доступа / доступа на этом сервере

Я использую Ubuntu 10.04.
Я создаю проект django в /home/wong2/Code/python/django2/ named atest
и создайте файл 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 это говорит

запрещено

У вас нет разрешения на доступ к этому серверу.

Большое спасибо.

  • Python Selector (библиотека маршрутизации URL), опыт / мнения?
  • «Os.environ» в настройках django.py не может получить переменные системной среды с apache и wsgi
  • Я не могу подключиться к серверу https waitress wsgi
  • Как решить ошибки импорта при попытке развернуть Flask с помощью WSGI на Apache2
  • Python - Отмена печати ()
  • Могу ли я программно запустить сервер приложений WSGI, не блокируя основной поток выполнения?
  • Конфигурация django apache с WSGIDaemonProcess не работает
  • Можно ли создавать потоки в wsgi-приложении?
  • 5 Solutions collect form web for “Ошибка Apache mod_wsgi: Запрещено У вас нет прав доступа / доступа на этом сервере”

    Второй блок каталогов не совпадает с тем, где установлен ваш файл сценария 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> 

    Итак, создайте подкаталог «apache» под «atest». Переместите '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

    С 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 ноя 28 20:56 пользователь

    что никто, кроме вас, не сможет даже просмотреть эту папку.

    Добавление опции выполнения в папку исправил мою проблему

     chmod o+x /home/user/ ls -l /home/ 

    drwx —– x 36 пользователь 12288 ноя 28 20:56 пользователь

    попробуйте http: //localhost/index.html , это показывает страницу apache?

    Если вы правильно настроили wsgi на root, это не будет.

    Вы получаете это сообщение об ошибке, потому что вы можете попросить веб-сервер для списка каталогов www-папки

    редактировать:

    Мои проекты всегда в

    / 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> 

    который я включаю в папку, доступную для сайтов, в файле, который выглядит следующим образом:

     <VirtualHost *:8080> DocumentRoot /var/www/ <Directory /var/www/> Order deny,allow Allow from all Options -Indexes FollowSymLinks DirectoryIndex index.php AllowOverride None </Directory> ServerAdmin oto@example.com 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 и настройка nginx на порт 80, который пересылает в apache. Вы должны просто изменить порт на моем сайте – доступный файл для запуска его без nginx, но я бы не стал жить так

    Вы можете получить сюрприз, где ваш WSGI имеет свой домашний каталог! По моей, по общему признанию, наивной установке wsgi_mod, это / – я был так удивлен, что мне пришлось написать этот скрипт, чтобы убедиться:

     import os def application(environ, start_response): status = '200 OK'; e=os.listdir(os.getcwd()) output = '''WSGI %s<hr>'''%(e) response_headers = [('Content-type', 'text/html'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output] 

    Это означает, что для импортированных приложений потребуется полный путь, который можно найти, например:

     sys.path.append('/home/foo/www/Forms') from DataCommon import page 

    Это рекомендуемый (по Google) подход к этому:

     import sys; path='/home/foo/www/Forms'; if path not in sys.path: sys.path.append(path) 
    Python - лучший язык программирования в мире.