まず最初に、これはApacheでの最初の試みなので、私の初心性を許してください:)
基本的な設定は次のとおりです。mysub.domain.com
は、godaddyのDNSマネージャーのCNAMEエントリを介して静的IPに送信されます。 Apache2を実行している私のUbuntu 10 LTSサーバーにヒットします。
そのリクエストを適切な/var/www/mysub
フォルダに転送する仮想ホストエントリがあります。そこにはコンテンツはありませんが、「It Works」ページに行を追加したので、そこに正常に到達したかどうかがわかります。また、Ubuntuサーバーと同じローカルネットワークでWikiサーバーを実行しているMac Miniも持っています。
mysub.domain.com
フォルダの代わりに/var/www/mysub
をミニサーバーにヒットさせたいです。
このサイトや他のサイトで多くの記事を読んだ後、なんとかそれを行うことができました...
私の/var/www/mysub/.htacess
には、別のSFの質問で見つけた次の情報があります(リンクをコピーするのを忘れました)。
RewriteEngine on
RewriteCond %{HTTP_Host} ^mysub.domain.com/*
RewriteRule .* http://192.168.x.x/ [P,L]
mysub.domain.com
をMiniのフロントページにリダイレクトするので、これは不必要に機能します。しかし、もちろん、それ以降のすべてのリンクはミニページをクリックします。私はそれがなぜそうしているのか理解していると思います(mysub.domain.com
で始まるものは、基本的にWikiサーバーのフロントページに向けられます。Wikiサーバー上の後続のリンクにもmysub.domain.com
が含まれているため、常に同じ場所で終わる)
どうしたらいいのかわからない。正直に言うと、実際にはそれらのRewrite行の構文を理解していません。
私は無数の構成エントリの例を見て、それらのいくつかを試しましたが、構文を本当に理解していないと、それは一種の暗闇の中での撮影です。
This は便利な投稿でした this の質問を読んだ後、これを/Apache2/httpd.conf
ファイルに追加してみました
<Location />
ProxyPass http://192.168.x.x
ProxyPassReverse http://192.168.x.x
</Location>
運が悪い。
明らかに、私はいくつかのことを学ぶ必要がありますが、私がしたいことはおそらく非常に単純であるように思えます。何が欠けていますか?
コメントごとの編集
私の/etc/Apache2/httpd.conf
ファイル
ServerName localhost
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName mysub.domain.com
DocumentRoot /var/www/mysub
<Location />
ProxyPass http://192.168.x.x/
ProxyPassReverse http://192.168.x.x/
</Location>
</VirtualHost>
...と私のsites-available/mysub
ファイル...
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName mysub.domain.com
DocumentRoot /var/www/mysub
#ProxyRequests Off
<Location />
ProxyPass http://192.168.1.50/
ProxyPassReverse http://192.168.1.50/
</Location>
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/mysub>
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/www/mysub/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>
Apache2ctl -S
の出力
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server 66-152-109-110.tvc-ip.com (/etc/Apache2/sites-enabled/000-default:1)
port 80 namevhost 66-152-109-110.tvc-ip.com (/etc/Apache2/sites-enabled/000-default:1)
port 80 namevhost domain.com (/etc/Apache2/sites-enabled/domain:1)
port 80 namevhost mysub.domain.com (/etc/Apache2/sites-enabled/mysub:1)
Syntax OK
あなたはとても近いです!
いくつかのメモ:
RewriteCond %{HTTP_Host} ^mysub.domain.com/*
-HTTP_Host
変数にはmysub.domain.com
のみが含まれ、残りのパスは含まれません。
このルールは実際には一致しますが、偶然です。/
文字はありませんが、*
修飾子は/
文字に適用されます。これは、「/
0を無限回繰り返す」ことを意味します。
ApacheはPerl互換の正規表現を使用します。正確なホストに一致させるには、次のようにします。
RewriteCond %{HTTP_Host} ^mysub\.domain\.com$
RewriteRule .* http://192.168.x.x/ [P,L]
-渡されたパスの残りを含まないため、これはホームページのみをロードしています-RewriteRule
の[P]
フラグを使用する場合は、手動で行う必要があります。
これはうまくいくはずです:
RewriteRule (.*) http://192.168.x.x/$1 [P,L]
ProxyPass
の設定はほぼ正しいですが、.htaccess
ファイルの設定によって上書きされるため、使用されません。 .htaccess
を使用すると、パフォーマンスが低下し、セキュリティの問題が発生する可能性があります。Apacheのドキュメントの推奨事項 here を参照してください。
おそらく、最善の方法は、.htaccess
ファイルを完全に削除し、ProxyPass
を使用することです。設定を少し変更してください...
<Location />
ProxyPass http://192.168.x.x/
ProxyPassReverse http://192.168.x.x/
</Location>
...そして、それをhttpd.conf
からサブドメインにサービスを提供している<VirtualHost>
ブロック内に移動します。
末尾のスラッシュが一致し、.htaccess
がなくなるため、これでうまくいくはずです。
これがパズルの最後のピースでした。 this の質問の答えとしてそれを見つけました。
解決策は、これを/etc/Apache2/mods-enabled/proxy.conf
:
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>