【发布时间】:2014-10-21 19:01:01
【问题描述】:
好的,所以我已经四处寻找了几个小时,这让我很难过。
我有一个尚未投入生产的应用程序,我的客户希望将其拆分为不太稳定和更稳定的应用程序。所以,我选择将开发版本移动到/var/www/dev,将半稳定版本复制到/var/www/master(在调试之前,半稳定版本也在/var/www,以免严重破坏访问)。这个想法是domain.com 将始终有效,新的东西/测试将在dev.domain.com 上。
因此,according the apache docs,我现在有两个虚拟主机:
<VirtualHost _default_:443>
ServerAdmin email@example.com
DocumentRoot "/var/www/master"
ServerName domain.com
SSLEngine on
# [ssl stuff]
Header add Strict-Transport-Security "max-age=15768000"
WSGIDaemonProcess master_wsgi user=www-data group=www-data
WSGIScriptAlias /master "/var/www/master/src/main.py"
# [ Aliases .... ]
<Directory "/var/www/master/src">
Options +ExecCGI
AddHandler wsgi-script .py
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/master">
Options +ExecCGI
AddHandler wsgi-script .py
Order allow,deny
Allow from all
</Directory>
<Location /master>
# [HTTP auth stuff]
WSGIProcessGroup master_wsgi
</Location>
# modules, cache, error directories, etc
</VirtualHost>
然后复制完全相同的东西,除了:
DocumentRoot "/var/www/dev"
ServerName dev.domain.com
ServerPath /dev/
以及所有其他master 在别名、守护进程等中的实例都变为dev(我确实做了replace-string)。守护进程和进程组是我chasing another SO answer,由于子目录的要求而没有成功(因为显然它们都需要在一个虚拟主机中,但我不能在<Location> 中指定DocumentRoot)
现在,如果我这样做,我得到的只是两者的文件列表。请注意,正确的文件列表,但只是文件列表。
如果我去任何一个并将旧副本所在的WSGIScriptAlias更改为/,它就可以像往常一样从该python文件中正常工作(当然这意味着开发内容实际上指向旧模板,所以这不好,因为我不能更改模板,只能更改脚本,因为 templateDir = os.path.realpath(os.path.dirname(os.path.realpath(__file__)) + "/../templates/") + "/" 始终是 /var/www/templates)。
这不是错误,它只是给出文件列表,所以它指向了正确的位置,但是 WSGIScriptAlias 没有做它应该做的事情?我错过了什么?
如果它是相关的,这是httpd.conf 中相关 VH 之前的内容,尽管我对此表示怀疑:
LoadModule wsgi_module modules/mod_wsgi.so
WSGICallableObject app
WSGIPythonHome /usr/local/bin/python
NameVirtualHost *:80
<VirtualHost *:80>
ServerName domain.com
Redirect permanent / https://domain.com/
## Heading ##</VirtualHost>
【问题讨论】:
标签: python apache apache2 mod-wsgi wsgi