Ошибка 403 при попытке запустить CherryPy за Apache

Я пытаюсь запустить CherryPy за Apache с помощью mod_rewrite, как описано в документации CherryPy (BehindApache, ModRewrite), и он не работает.

Изменить: ранее мое описание этой проблемы было несколько неточным. Кажется, я забыл перезапустить Apache во время некоторых моих попыток. Я существенно пересмотрел вопрос.

Когда я запускаю свою программу (очень простую программу «hello world», похожую на первый обучающий файл, поставляемый с CherryPy), кажется, что она работает нормально. Если я запускаю curl "http://127.0.0.1:8080" со своего сервера, я вижу результат и какую-то запись об этом в журнале CherryPy.

Однако, если я попытаюсь получить доступ к сайту из своего браузера, я получаю сообщение об ошибке 403 Forbidden, говорящее: «У вас нет разрешения на доступ к / на этом сервере». Я не вижу никаких записей об этом в журнале CherryPy. Я попытался поместить RewriteRule (RewriteRule ^(.*) http://127.0.0.1:8080$1 [proxy]) в соответствующий раздел VirtualHost моего файла httpd.conf как с косой чертой, так и без нее, и оба раза я получил одну и ту же ошибку. В моем журнале ошибок Apache я вижу такие строки:

[Пн, 27 сентября, 15:54:11 2010] [ошибка] [клиент 123.45.67.89] попытка сделать удаленный запрос из mod_rewrite без включенного прокси: прокси:http://127.0.0.1:8080/

Вместо этого я попытался поместить RewriteRule в файл .htaccess моего сайта и получил ошибку 404 Not Found с такими строками в моем журнале ошибок:

[Пн, 27 сентября, 13:31:54 2010] [ошибка] [клиент 123.45.67.89] Попытка обслуживать каталог: прокси:http://127.0.0.1:8080/

Я по-прежнему не видел никаких записей в журнале CherryPy.

Я решил посмотреть, что произойдет, если я попытаюсь получить доступ к сайту без запущенного CherryPy, и получил то же самое. Как будто Apache безуспешно пытается связаться с программой CherryPy, если я помещаю строку в httpd.conf, и совершенно не подозревает об этом, когда я помещаю строку в .htaccess.

Кто-нибудь здесь знает, почему это происходит, и что с этим делать? Я пробовал все, что мог придумать. Мой сайт работает на частном сервере DreamHost с Debian 4.3.2-1.1, Apache 2.2.15, Python 2.6.5 и CherryPy 3.1.2.

Редактировать 2: lazy1, я попробовал ваше предложение, и это не помогло. Я получаю те же ошибки 403.


person Elias Zamaria    schedule 27.09.2010    source источник


Ответы (2)


Я запускаю CherryPy за Apache очень похожим образом. Apache сам обслуживает статический контент, а любые URL-адреса, начинающиеся с «cp», обслуживаются CherryPy. CherryPy прослушивает порт 8500. Вот что у меня работает в httpd.conf:

RewriteMap escape int:escape
  [...]
RewriteRule ^/cp\/(.*) http://localhost:8500/cp/${escape:$1} [L,P]

Это внутри определения VirtualHost (ну, строка RewriteMap вне его, но вы поняли)

Очевидно, вы должны убедиться, что mod_proxy загружается. Ознакомьтесь также с документацией по RewriteRule.

В моей конфигурации CherryPy у меня есть:

server.socket_host = "127.0.0.1"
server.socket_port = 8500

Удачи!

person Bill Gribble    schedule 30.09.2010
comment
Я попытался включить mod_proxy, а затем всякий раз, когда я пытаюсь получить доступ к чему-либо в домене моего сайта, я получаю ошибку 500. Я не знаю, почему это происходит. В журнал ошибок вообще ничего не добавляется. Я все равно попробовал ваше предложение, и оно не сработало. - person Elias Zamaria; 30.09.2010
comment
Есть ли какие-то особые параметры, которые мне нужно установить в mod_proxy, чтобы он работал правильно? Я не очень знаком с этим. - person Elias Zamaria; 30.09.2010
comment
Убедитесь, что у вас есть и mod_proxy, и mod_proxy_http; см. документацию mod_proxy для получения дополнительной информации: - person Bill Gribble; 30.09.2010
comment
Я попытался также включить mod_proxy_http, и, кажется, это работает! Спасибо. Если я не столкнусь с какими-либо серьезными проблемами, связанными с этой проблемой, до окончания периода вознаграждения, я присужу вознаграждение вам. - person Elias Zamaria; 01.10.2010

Вы можете попробовать привязать cherrypy к 0.0.0.0 (все интерфейсы)

    cherrypy.config.update({"server.socket_host" : "0.0.0.0"})
person lazy1    schedule 27.09.2010