我正在使用mod_wsgi将我的Django项目配置为在Apache上运行.我试图在apache上的'cflow'目录下运行Django,但是遇到重定向问题.
我的apache conf看起来像这样:
...
WSGIScriptAlias /cflow "C:\Program Files\Apache Software Foundation\Apache2.2\wsgi\django.wsgi"
<Directory "C:\Program Files\Apache Software Foundation\Apache2.2\wsgi">
Order allow,deny
Allow from all
</Directory>
<Directory "C:\Projects\myproject\src">
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果用户未登录,则会将/cflow/somepage.html的请求重新发送到/accounts/login?next=/cflow/somepage.html.这个新地址不在django root(cflow)之下,因此apache以404 Not Found响应.
我的问题是如何将Django重定向映射到apache上的应用程序根目录下?即我如何使/ accounts/...页面改为/ cflow/accounts/...?
谢谢你的帮助.
我有两个不同的Django"项目",我想使用mod_wsgi在单个域上运行.使用mod_python,我相信有一种方法可以做到这一点,其中某些url路径将映射到一个Django项目,而其他路径映射到另一个项目,所有这些都在服务器级别.
是否可以使用mod_wsgi执行此操作,如果是,如何执行此操作?
我考虑过的事情:Apache虚拟主机描述中的内容,application.wsgi文件中的内容等等.但我还没弄清楚具体如何做到这一点.
谢谢!
我目前正在使用两个Django应用程序(说A&B)通过Apache托管在同一个域上(但在不同的端口上提供服务).我相信我的设置是正确的,但我在两个网站上随机获得500.500 on A(例如)发生在请求被提供之后B(反之亦然).
在检查错误日志(都说A例如),我看到A的WSGI模块试图访问B的settings.py文件(这显然不会发生在那里,因为项目路径是不同的),这确实发生了另外,B的wsgi引发了一个例外,抱怨缺少A的settings.py文件].我不确定他们为什么要查找其他设置文件,所有视图的导入(对于settings.py)都是特定于各个项目的.
这是我的设置:
A正在港口服务8080,B正在港口服务80.
虚拟主机:
<VirtualHost *:8080>
ServerAdmin x@x.net
ServerName string1
Alias /static/ /home/PATH_TO_PROJECT_A/static/
<Directory /home/PATH_TO_PROJECT_A/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /home/PATH_TO_PROJECT_A/wsgi.py
<Directory /home/PATH_TO_PROJECT_A>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
LogLevel warn
ErrorLog /SOME_PATH/errorA.log
CustomLog /SOME_PATH/accessA.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName string1
ServerAdmin x@x.net
Alias /APP_B/static/ /home/PATH_TO_PROJECT_B/static/
<Directory /home/PATH_TO_PROJECT_B/static>
Order …Run Code Online (Sandbox Code Playgroud) 我想让我的Flask应用程序在CentOS服务器上运行.基本上问题是我安装了Python 2.6,/usr/bin其中安装了系统默认和Python 3.4 /usr/local/bin.我想使用Python 3.4 virtualenv或至少Python 3.4解释器来运行我的应用程序mod_wsgi.
我已经创建了virtualenv ~/virtualenvs/flask.
我有这个WSGI脚本:
import os
import sys
from logging import Formatter, FileHandler
APP_HOME = r"/home/fenikso/Album"
activate_this = os.path.join("/home/fenikso/virtualenvs/flask/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, APP_HOME)
os.chdir(APP_HOME)
from app import app
handler = FileHandler("app.log")
handler.setFormatter(Formatter("[%(asctime)s | %(levelname)s] %(message)s"))
app.logger.addHandler(handler)
application = app
Run Code Online (Sandbox Code Playgroud)
并在Apache中配置以下:
<VirtualHost *:80>
ServerName album2.site.cz
Alias /static "/home/fenikso/Album/static"
Alias /photos "/home/fenikso/Album/photos"
Alias /thumbs "/home/fenikso/Album/thumbs"
WSGIScriptAlias / "/home/fenikso/Album/wsgi.py"
<Directory "/home/fenikso/Album">
AllowOverride None
Allow from all
</Directory>
<Directory "/home/fenikso/Album/static">
AllowOverride None
Allow from …Run Code Online (Sandbox Code Playgroud) 我的网站是用Python编写的,目前在Apache的mod_python下运行.最近我不得不加入一些让我认为可能值得将网站转换为mod_wsgi的丑陋黑客.但我已经习惯了使用一些mod_python的的工具类的,特别是FieldStorage和Session(有时Cookie),并从扫描PEP 333,我看不出有任何等同于这些.(这并不奇怪,因为我了解这些实用程序不属于WSGI规范)
问题是,我可以在WSGI中使用这些mod_python实用程序类的"标准"(即通常接受的)替换,还是我/我应该自己编写?
(仅供参考:目前正在使用Python 2.5)
我在CentOS上部署了一个Django应用程序.这是我的httpd.conf文件的样子:
WSGISocketPrefix /var/run/wsgi
<VirtualHost *:80>
WSGIDaemonProcess safe python-path=/usr/lib/python2.6/site-packages
WSGIProcessGroup safe
WSGIScriptAlias / /opt/safe/safe/wsgi.py
<Directory /opt/safe/safe/>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的 TEMPLATE_DIRS
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
"/opt/safe/static/templates",
"/var/www/html/static/templates",
)
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的管理员/电子邮件设置:
ADMINS = (
# ('Your Name', 'your_email@example.com'),
('David', 'david@localhost'),
)
SEND_BROKEN_LINK_EMAILS = True
DEFAULT_FROM_EMAIL = 'david@localhost'
SERVER_EMAIL = DEFAULT_FROM_EMAIL
Run Code Online (Sandbox Code Playgroud)
在我的模板目录中,我已经定义了一个自定义500.html文件.当我设置我settings.py …
基本hello.wsgi工作正常.其他django应用程序也完美地与完全相同的virtualenv版本.
mod_wsgi 挂起约10分钟(!!!),我发现没有什么能指出我的问题(loglevel debug):
[Tue Mar 25 23:11:08.878578 2014] [:info] [pid 4719:tid 140720591648640] mod_wsgi (pid=4719): Attach interpreter ''.
[Tue Mar 25 23:11:08.879171 2014] [:info] [pid 4717:tid 140720591648640] mod_wsgi (pid=4717): Attach interpreter ''.
[Tue Mar 25 23:11:10.891348 2014] [authz_core:debug] [pid 4730:tid 140720477226752] mod_authz_core.c(802): [client 127.0.0.1:40844] AH01626: authorization result of Require all granted: granted
[Tue Mar 25 23:11:10.891391 2014] [authz_core:debug] [pid 4730:tid 140720477226752] mod_authz_core.c(802): [client 127.0.0.1:40844] AH01626: authorization result of <RequireAny>: granted
[Tue Mar 25 23:11:10.891489 2014] [authz_core:debug] …Run Code Online (Sandbox Code Playgroud) 我的Apache 2.2.15服务器有点问题.我正在用mod_wsgi运行一个Django应用程序.我激活了WSGIPassAuthorization On,这使得Basic auth运行良好.但我最近实施了OAuth2.0来保护我的API(隐式授权),我认为Apache不会让它通过,因为它的形式是"授权:承载令牌".我想这是"持票人"的问题,但我不知道如何避免这种情况.
我试过了 :
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
Run Code Online (Sandbox Code Playgroud)
在httpd.conf,.htaccess(设置之后AllowOverride All)和我的vhost中.无所事事,无效.我整天都在网上爬行,除了这两个解决方案之外什么都没找到.
先感谢您 !
编辑:
OS : RedHatEL6.4
Apache : 2.2.15
Django: 1.6.6 w/ django-oauth-toolkit
Python: 2.7.8
Run Code Online (Sandbox Code Playgroud) 我有一个基本的"hello world"Flask app运行.
我使用Apache 2.4在Ubuntu 14.04上.我已经安装了mod_wsgi.
我创建了一个~/web/piFlask/venv/用于安装virtualenv创建的Python2的瓶子.
但是,我希望我的flaskapp导入我编写的Python3.x模块.
我需要做些什么来实现这一目标?
我尝试创建~/web/piFlask/venv3/并修改~/web/piFlask/piFlask.wsgi:
import os, sys
PROJECT_DIR = '/home/pi/web/piFlask'
activate_this = os.path.join(PROJECT_DIR, 'venv3/bin', 'activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, PROJECT_DIR)
from piFlask import app as application
application.debug = True
Run Code Online (Sandbox Code Playgroud)
但我认为这还不够.这个.wsgi实际上是一个将由mod_wsgi执行的Python文件,我肯定会使用Py2.x解释器来执行.
因此,如果我理解正确,mod_wsgi会启动系统Python以执行此.wsgi,这将启动我的~/web/piFlask/venv/解释器以实际处理请求.
我想我可以通过WSGIPythonPath /home/pi/web/piFlask/venv3/lib/python3.4/site-packages在/etc/apache2/mods-available/wsgi.conf中设置来说服mod_wsgi使用系统Python3或我自己的venv3/...
但我在某个地方发现了一条说明你必须为Py3编译mod_wsgi的指令,并且底部很快就会出现这个问题.
到目前为止,我按照这个建议重新加载代码:
https://code.google.com/archive/p/modwsgi/wikis/ReloadingSourceCode.wiki
这具有缺点,即每N秒仅检测到代码变化.我可以使用N = 0.1,但这会导致无用的磁盘IO.
AFAIK可以通过python获得linux内核的inotify回调.
是否有更快的方法来检测代码更改并重新启动wsgi处理程序?
我们在linux上使用守护进程模式.
有兴趣为什么我想要这个.这是我的设置:
大多数人使用" manage.py runserver"进行开发,并使用其他一些wsgi部署进行生产.
在我的背景下,我们自动创建了新系统,产品和开发系统大多相同.
一个操作系统(linux)可以托管N个系统(虚拟环境).
开发人员可以使用runserver或mod_wsgi.使用runserver有一个好处,它易于调试,mod_wsgi具有不需要首先启动服务器的好处.
mod_wsgi有一个好处,你知道URL: https://dev-server/system-name/myurl/
使用runserver,您不知道端口.使用案例:您想要从内部维基链接到开发系统....
我们过去使用过mod_wsgi的代码重新加载的脏黑客攻击:maximum-requests=1但这很慢.
mod-wsgi ×10
django ×7
apache ×6
python ×4
flask ×2
inotify ×1
mod-python ×1
oauth-2.0 ×1
python-3.x ×1
redirect ×1