Centos7.1を実行している単一のサーバーでWebサイトをホストしようとしています。ポート80
でvirtualhostを実行できますが、second-site
のポートを8080
に変更すると、first-site
を指します。ただし、URL http://62.210.xx.xx:8080/
の場合、正しく機能し、second-site
を指します。
私はこのようにしています:
httpd.conf
Listen 80
Listen 8080
also tried
Listen 0.0.0.0:80
Listen 0.0.0.0:8080
but same
commented out for Apache 2.4
#NameVirtualHost 62.210.xx.xx:80
#NameVirtualHost 62.210.xx.xx:8080
ServerAdmin root@localhost
#first-site.com
<VirtualHost 62.210.xx.xx:80>
ServerName first-site.com
ServerAlias www.first-site.com
DocumentRoot /var/www/first-site
</VirtualHost>
#second-site.com
<VirtualHost 62.210.xx.xx:8080>
ServerName second-site.com
ServerAlias www.second-site.com
DocumentRoot /var/www/second-site
</VirtualHost>
netstat -tulpn | grep httpd
tcp6 0 0 :::80 :::* LISTEN 25253/httpd
tcp6 0 0 :::8080 :::* LISTEN 25253/httpd
/etc/Host/
62.210.xx.xx www.first-site.com first-site.com www.second-site.com second-site.com
/usr/sbin/httpd -t
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/httpd/conf/httpd.conf:46
Syntax OK
更新
apachectl -S
AH00558: httpd: Could not reliably determine the server's fully qualified domain name,
using 62.210.xx.xx. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
62.210.xx.xx:8080 m.second-site.com (/etc/httpd/conf/httpd.conf:427)
62.210.xx.xx:80 is a NameVirtualHost
default server first-site.com (/etc/httpd/conf/httpd.conf:363)
port 80 namevhost first-site.com (/etc/httpd/conf/httpd.conf:363)
alias www.first-site.com
port 80 namevhost image.first-site.com (/etc/httpd/conf/httpd.conf:3 77)
port 80 namevhost m.first-site.com (/etc/httpd/conf/httpd.conf:389)
port 80 namevhost second-site.com (/etc/httpd/conf/httpd.conf:401)
alias www.second-site.com
port 80 namevhost image.second-site.com (/etc/httpd/conf/httpd.conf:415)
port 80 namevhost third-site.com (/etc/httpd/conf/httpd.conf:439)
alias www.third-site.com
port 80 namevhost image.third-site.com (/etc/httpd/conf/httpd.conf:453)
ServerRoot: "/etc/httpd"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/etc/httpd/logs/error_log"
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex default: dir="/run/httpd/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex fcgid-pipe: using_defaults
Mutex authdigest-opaque: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex authdigest-client: using_defaults
Mutex fcgid-proctbl: using_defaults
PidFile: "/run/httpd/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="xxxxxxx" id=1000
Group: name="root" id=0
Inigo Floresがすでに指摘したように、これはデフォルトのApacheの動作です。
ブラウザに「second-site.com」と入力すると、常にポート80に接続されます。別のポートにアクセスする場合は、second-site.com:8080のようなURLで指定する必要があります。
Second-site.comのようなサイトにアクセスしたい場合は、別のポートを使用しても意味がありません。
Listen
ステートメントをVirtualHost
と一致させてみてください。
パブリックIP 62.210.xx.xxにのみバインドする場合は、どこでも使用できます。
Listen 62.210.xx.xx:80
Listen 62.210.xx.xx:8080
<VirtualHost 62.210.xx.xx:80>
ServerName first-site.com
ServerAlias www.first-site.com
DocumentRoot /var/www/first-site
</VirtualHost>
<VirtualHost 62.210.xx.xx:8080>
ServerName second-site.com
ServerAlias www.second-site.com
DocumentRoot /var/www/second-site
</VirtualHost>
-または-
そのサーバーのすべてのインターフェースにバインドする場合は、ワイルドカードを使用します。
Listen 80
Listen 8080
<VirtualHost *:80>
ServerName first-site.com
ServerAlias www.first-site.com
DocumentRoot /var/www/first-site
</VirtualHost>
<VirtualHost *:8080>
ServerName second-site.com
ServerAlias www.second-site.com
DocumentRoot /var/www/second-site
</VirtualHost>
基本的に、Listen
ステートメントは、そのIP /ポートにバインドするようApacheに指示します。 0.0.0.0:80を指定すると、ipv4アドレスのみをリッスンします。ポート番号のみを指定すると、ポート80のすべてのインターフェースにバインドされます。
同様に、SYNパケットが着信すると、VirtualHostステートメントはListen
ステートメントに基づいて照合を試みます。
名前ベースの仮想ホストとIP /ポートベースの仮想ホストのどちらを使用するかを決定する必要があります。現在、この2つは混同しています。
サーバーを独自のポートに配置する場合は、それらのポートにNameVirtualHost
を定義しないでください。リクエストが到着するホストとポートに対してそれを定義すると、Apacheはservername
とserveraliases
に基づいて使用するvirtalhost構成を選択します。
その仮想ホストブロックが別のIP /ポートを使用して定義されている場合、Apacheがドメイン名に基づいて仮想ホストを選択する準備ができているかどうかはわかりません。あなたが言っているような音は、何が起こっているのかもしれません。
/etc/hosts
ファイルでは、first-site.com
およびsecond-site.com
を指定します。これらの場合、www.
接頭辞を使用するため、どちらも定義済みの仮想ホストではありません。名前ベースの仮想ホストを使用している場合おそらく、仮想ホストブロックにServerAlias
ディレクティブを追加する必要があります。一方、最初の段落では、参照しているサイトの役に立たない短縮形を使用しています。問題が発生している正確なURLを参照するように変更することをお勧めします。
あなたが経験しているのは、デフォルトの動作 Apacheのドキュメントによる です。
172.20.30.50以外のアドレスへの要求は、メインサーバーから処理されます。ホスト名が不明である、またはHost:ヘッダーがない172.20.30.50へのリクエストは、www.example.comから提供されます。
したがって、second-site.com仮想ホストに到達できるようにするには、 http:// second-site .com:8080 / 。
これらのドメイン名をローカルのhosts
ファイルに含めるようにしてください(例:/etc/hosts
、C:\Windows\System32\drivers\etc\hosts
など)。DNSをまだ設定していない場合。これがオプションでない場合は、DynDNSまたは他のプロバイダーを使用して動的ホスト名を設定し、それをServerName/ServerAliasに使用することもできます。
62.210.xx.xxはサーバーのIPですか、またはNATサーバーの前のIPですか?)VirtualHost上のサーバーの実際のIPと、リクエストが送信されるIPが必要ですサーバーに多くのIPがある場合。