web-dev-qa-db-ja.com

Apache:サブフォルダーをLAN内の別のIPにリダイレクトする

現在、mydomain.comへのすべてのhttpトラフィックを処理するルーターの背後にwebserver1があります。 webserver2を追加したばかりで、mydomain.com/server2トラフィックをそのボックスにリダイレクトしたいと思います。ユーザーにとって、リダイレクトは気付かれるべきではありません(つまり、URLはmydomain.com/server2である必要があり、リダイレクトは舞台裏で行われます)。これをwebserver1のApache構成でどのように設定しますか(webserver2の構成で特別なことを行う必要はないと想定しています)。

私はmod_rewriteを使用して、与えられたアドバイス here を試してみましたが、うまくいかなかったようです:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/server2/
RewriteRule ^/$ http://192.168.1.102/ [P,L]

それが関連している場合、webserver1はmod_wsgiを使用してDjangoアプリをホストし、他のいくつかのアプリはリダイレクトされます。ここにvirtualhost confがあります:

<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>

前もって感謝します。

4
NP01

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]

この例では大文字と小文字が区別されることに注意してください。

3
DerekB

使用する:

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にアプリケーションをマウントする必要があることに注意してください。

また、バックエンドアプリケーションが実行されているように見えるホスト/ポートを調整するためにバックエンドでの構成が必要になる場合があることにも注意してください。ですから、それが問題であることがわかった場合に調査してください。

0