web-dev-qa-db-ja.com

1つのApacheインスタンスで複数のサイトを実行する方法

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

192.168.2.8/site1と192.168.2.8/site2のような単一のApacheインスタンスで実行する2つのサイトが必要です。

私は輪になって行きましたが、現時点では、「sites-available(sites-enabledにリンク)」の2つのconfファイルがあります。

<VirtualHost *:2000>

ServerAdmin [email protected]
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 [email protected]
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を実行しています...

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

編集

別の「ガイド」に従ってください...

私は今、利用可能なサイトでこれを設定しました:

<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日を通して機能するようになったガイドにはこれが見つからなかったので、これが良い解決策かどうかはわかりません。しかし、少なくとも私が今したいように機能しています。

48
Exbi

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

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

このトピックで見つけることができる最良のドキュメントは、Apacheマニュアルの virtual Host ドキュメントです。

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

取得していた最初のエラーは、NameVirtualHost行とは異なるポートを使用していたためです。 80以外のポートからサイトを提供したい場合は、各ポートにNameVirtualHostエントリが必要です。

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

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

NameVirtualHost *:80

Apacheが何をしたいのかがわかったので、vhost定義をセットアップできます。

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

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

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

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

70
bradym

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

開いた

/etc/httpd/conf/httpd.conf

Listen 81
Listen 82
Listen 83

<VirtualHost *:81>
    ServerAdmin [email protected]
    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 [email protected]
    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 [email protected]
    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/

Site3:

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

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

5
Srihari Karanth