我试图弄清楚如何将服务器的特定别名转发到特定的django Web应用程序,同时,在用户的浏览器中保留URL地址栏以仅显示服务器别名。
更具体一点:
这是我公司的内部网项目。我们有一个很大的Linux服务器,可以完成大量的计算工作,并且还运行apache来提供各种网页和应用程序。我当前的django应用程序运行于:
http://deptserver.example.com/mydjangoapps/myapp
但是,如果我的用户可以使用它,我会很喜欢它:
http://myapp.example.com/
(我已经让IT人员通过DNS中的CNAME将myapp.example.com转发到deptserver.example.com)
我无法破解apache服务器上的任何内容,因为它服务于关键的东西,但我确实能够添加诸如VirtualHost或一些url重写规则等内容。
这是我在apache httpd.conf文件中设置的django:
<Location "/mydjangoapps">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mydjangopath.settings
PythonOption django.root /mydjangoapps
PythonPath "['/home/me/mydjangopath'] + sys.path"
PythonDebug On
</Location>
而且,这是在启用网站的默认文件中(即我无法破坏服务器的这一部分):
<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
</VirtualHost>
在上面的VirtualHost中,我尝试使用mod_rerwite:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^myapp\.example\.com
RewriteRule ^(.*) mydjangoapps/myapp$1
哪个不起作用,因为它认为mydjangoapps / myapp是文件路径而不是URL路径,因此它给出了400错误。我希望它转发到URL路径。
我也试过这个:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^myapp\.example\.com
RewriteRule ^(.*) http://deptserver.example.com/mydjangoapps/myapp$1
只是将用户转发到该长网址。
这些是我想过的但没有尝试过的东西: 虚拟主机 mod_rewrite的 别号 代理 (?) port(将我自己的apache服务器放在主服务器的不同端口上)
这样做的最佳方式(或唯一方法)是什么?
谢谢!
答案 0 :(得分:2)
请您的IT人员在该方框的网络接口上添加另一个IP地址(例如a.b.c.d),然后将myapp.example.com路由到该新的IP地址。
这样,您可以设置一个完全独立的VirtualHost:
<VirtualHost a.b.c.d:80>
# Your configuration here
</VirtualHost>
<VirtualHost *:80>
# The existing configuration here, unchanged
</VirtualHost>
然后,您只需将<Location "/mydjangoapps">
更改为<Location "/">
,即可通过http://myapp.example.com/
的浏览器访问您的网站。
答案 1 :(得分:1)
正如AndrewF所说,VirtualHosts是前往这里的方式。如果您不想使用IP地址,可以使用name-based virtual hosting:
进行设置NameVirtualHost *:80
<VirtualHost *:80>
ServerName myapp.example.com
(...etc...)
然后,该位配置将仅响应myapp.example.com上的请求,让标准配置接收其他所有内容。
在评论后进行编辑如果您使用的是基于Debian的系统,您似乎就像提到sites-enabled
一样,那么您不应该在httpd.conf中添加任何内容 - 所有特定于站点的内容都应该在一个单独的文件中。此文件应该放在sites-available
中,然后运行sudo a2ensite my_site_file
以将其符号链接到启用站点的目录。