50

ネットで見つけることができるすべてのガイドに従って、何時間も円を描いて過ごしました。

192.168.2.8/site1 と 192.168.2.8/site2 のように、1 つの Apache インスタンスで 2 つのサイトを実行したい

私はぐるぐる回っていますが、現時点では、「sites-available (sites-enabled にシンボリックリンクされています)」に次のような 2 つの conf ファイルがあります-

<VirtualHost *:2000>

ServerAdmin webmaster@site1.com
ServerName site1
ServerAlias site1

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site1/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site1/logs/error.log
CustomLog /home/user/site1/logs/access.log combined

</VirtualHost>

<VirtualHost *:3000>

ServerAdmin webmaster@site2.com
ServerName site2
ServerAlias site2

# Indexes + Directory Root.
DirectoryIndex index.html
DocumentRoot /home/user/site2/

# CGI Directory
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/

Options +ExecCGI

# Logfiles
ErrorLog /home/user/site2/logs/error.log
CustomLog /home/user/site2/logs/access.log combined

</VirtualHost>

http.conf は次のようになります。

NameVirtualHost *:2000
NameVirtualHost *:3000

現時点では、このエラーが発生しています-

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results

Ports.conf は次のようになります (ただし、これを編集する必要があると言及されているガイドはありません)。

NameVirtualHost *:80

Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

これを実行するための簡単な指示を誰かに教えてもらえますか? 私が見つけたすべてのガイドは、異なる方法でそれを行うように言っており、それぞれが異なるエラーにつながります. 私は明らかに何か間違ったことをしていますが、それが何であるかについての明確な説明は見つかりませんでした。

1 つのサイトをポート 2000 でアクセス可能にし、もう 1 つのサイトをポート 3000 でアクセス可能にするだけです (または、それらのポートを選択してテストするだけです)。

Ubuntu サーバー 12.04 を実行しています…</p>

=============

編集

別の「ガイド」に従いました...

これをサイト利用可能で設定しました:

<VirtualHost *:80>
    DocumentRoot "/home/user/site1/"
    ServerName 192.168.2.10/site1
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/user/site2/"
    ServerName 192.168.2.10/site2
</VirtualHost>

これをapache2.confに設定しました:

ServerName site1
ServerName site2

これをports.confに追加しました:

Listen 192.168.2.10:80

==============

編集

これで動作します。これをサイト対応の conf ファイルに入れます。

<VirtualHost *:81>
    DocumentRoot "/home/user/site1/"
    ServerName site1
</VirtualHost>

<VirtualHost *:82>
    DocumentRoot "/home/user/site2/"
    ServerName site2
</VirtualHost>

私はこれをports.confに持っています:

Listen *:80
Listen *:81
Listen *:82

私はこれをapache2.confに持っています:

ServerName site1
ServerName site2

どのガイドにもこれが見つかりませんでした。試行錯誤の 1 日を通して機能するようになったので、これが良い解決策かどうかはわかりません。しかし、少なくとも今は私が望むように機能しています。

4

2 に答える 2

72

あなたの質問は、いくつかの異なる概念を混ぜ合わせています。あなたは、同じドメインを使用して同じサーバー上でサイトを実行したいが、別のフォルダーにあると言い始めました。特別な設定は必要ありません。単一ドメインを実行したら、その docroot の下にフォルダーを作成するだけです。

残りの質問に基づいて、あなたが本当にやりたいことは、同じサーバー上で独自のドメイン名を持つさまざまなサイトを実行することです。

このトピックに関する最良のドキュメントは、apache マニュアルの仮想ホストのドキュメントです。

仮想ホストには、名前ベースと IP ベースの 2 種類があります。名前ベースでは単一の IP アドレスを使用できますが、IP ベースではサイトごとに異なる IP が必要です。上記の説明に基づいて、名前ベースの仮想ホストを使用したいと考えています。

最初に発生したエラーは、回線とは異なるポートを使用していたことが原因でしたNameVirtualHost。80 以外のポートからサイトを提供したい場合は、ポートNameVirtualHostごとにエントリが必要です。

ゼロから始めていると仮定すると、これは見た目よりもはるかに簡単です。

2.3 以前を使用している場合、最初に行う必要があるのは、名前ベースの仮想ホストを使用することを Apache に伝えることです。

NameVirtualHost *:80

2.4 以降を使用している場合は、NameVirtualHost 行を追加しないでください。バージョン 2.4 の Apacheではディレクティブが廃止NameVirtualHostされ、将来のバージョンでは削除される予定です。

仮想ホストの定義:

<VirtualHost *:80>
    DocumentRoot "/home/user/site1/"
    ServerName site1
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/user/site2/"
    ServerName site2
</VirtualHost>

同じポートで必要な数のサイトを実行できます。ServerNameApache にどの vhost を使用するかを伝えるには、異なるというだけで十分です。また、ServerNameディレクティブは常にドメイン/ホスト名であり、パスを含めないでください。

80 以外のポートでサイトを実行することにした場合は、サイトにアクセスするときに常に URL にポート番号を含める必要があります。したがって、http://example.com に移動する代わりに、http://example.com :81に移動する必要があります

于 2012-09-09T21:42:17.613 に答える
5

はい、仮想ホストを使用すると、必要な数の並列プログラムを作成できます。

開ける

/etc/httpd/conf/httpd.conf

Listen 81
Listen 82
Listen 83

<VirtualHost *:81>
    ServerAdmin webmaster@site1.com
    DocumentRoot /var/www/site1/html
    ServerName site1.com
    ErrorLog logs/site1-error_log
    CustomLog logs/site1-access_log common
    ScriptAlias /cgi-bin/ "/var/www/site1/cgi-bin/"
</VirtualHost>

<VirtualHost *:82>
    ServerAdmin webmaster@site2.com
    DocumentRoot /var/www/site2/html
    ServerName site2.com
    ErrorLog logs/site2-error_log
    CustomLog logs/site2-access_log common
    ScriptAlias /cgi-bin/ "/var/www/site2/cgi-bin/"
</VirtualHost>

<VirtualHost *:83>
    ServerAdmin webmaster@site3.com
    DocumentRoot /var/www/site3/html
    ServerName site3.com
    ErrorLog logs/site3-error_log
    CustomLog logs/site3-access_log common
    ScriptAlias /cgi-bin/ "/var/www/site3/cgi-bin/"
</VirtualHost>

Apacheを再起動します

service httpd restart

Site1 を参照できるようになりました:

http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/

サイト 2 :

http://<ip-address>:82/
http://<ip-address>:82/cgi-bin/

サイト 3 :

http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/

スクリプトでパスがハードコーディングされていない場合、Web サイトはシームレスに動作するはずです。

于 2016-04-07T18:01:44.457 に答える