我在路由器后面有 webserver1,目前它为所有到 mydomain.com 的 http 流量提供服务。我刚刚添加了 webserver2,想将 mydomain.com/server2 流量重定向到该服务器。对于用户来说,重定向应该是不可察觉的(即 URL 应该只是 mydomain.com/server2,重定向在后台进行)。如何在 webserver1 的 apache 配置中设置此功能(我假设 webserver2 的配置不需要做任何特殊操作)?
我已经尝试了给出的建议这里,使用 mod_rewrite,但它似乎没有起到作用:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/server2/
RewriteRule ^/$ http://192.168.1.102/ [P,L]
如果相关的话,webserver1 使用 mod_wsgi 托管一个 django 应用程序,还有一些其他应用程序被重定向。以下是虚拟主机配置:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.mydomain.com
ServerAlias 127.0.0.1
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/server2/
RewriteRule ^/$ http://192.168.1.102 [P,L]
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
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
<Directory /var/www/mydomain>
Order allow,deny
Allow from all
</Directory>
...
WSGIDaemonProcess mydomain user=user group=user threads=25
WSGIProcessGroup mydomain
WSGIScriptAlias / /home/user/mydomain/apache/django.wsgi
Alias /phpmyadmin /usr/share/phpmyadmin/
</VirtualHost>
提前致谢。
答案1
Mod_Rewrite 比 mod_proxy 更灵活。取消注释其加载行。
这里进行简单比较http://www.wellho.net/mouth/1376_Choosing-between-mod-proxy-and-mod-rewrite.html
<VirtualHost *:80>
RewriteEngine on
# just in case (don't want to accidentally expose all the internal servers) !
ProxyRequests off
# define a log file
RewriteLog /var/log/apache/server2.rewrite.log
RewriteLogLevel 1
# add the tailing / if not there
RewriteRule ^/server2$ http://www.mydomain.com/server2/ [R] [L]
# proxy the request to internal url
RewriteRule ^/server2/(.*) http://192.168.1.102/$1 [P]
请注意,此示例区分大小写。
答案2
使用:
ProxyPass /server2 http://192.168.1.102/server2
您可能还需要 ProxyPassReverse。请参阅 Apache 文档:
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
请注意,后端 mod_wsgi 必须将应用程序安装在与前端出现和代理相同的子 URL 上。
还请注意,可能需要在后端进行配置,以调整后端应用程序在哪个主机/端口上运行,以便后端的 URL 重建在使用时正常工作。因此,如果您发现这是一个问题,请进行研究。