web-dev-qa-db-ja.com

仮想ホストが別のポートで機能しない

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
9
Tall boY

Inigo Floresがすでに指摘したように、これはデフォルトのApacheの動作です。

ブラウザに「second-site.com」と入力すると、常にポート80に接続されます。別のポートにアクセスする場合は、second-site.com:8080のようなURLで指定する必要があります。

Second-site.comのようなサイトにアクセスしたい場合は、別のポートを使用しても意味がありません。

1
fetch101

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ステートメントに基づいて照合を試みます。

4
TheCompWiz

名前ベースの仮想ホストとIP /ポートベースの仮想ホストのどちらを使用するかを決定する必要があります。現在、この2つは混同しています。

サーバーを独自のポートに配置する場合は、それらのポートにNameVirtualHostを定義しないでください。リクエストが到着するホストとポートに対してそれを定義すると、Apacheはservernameserveraliasesに基づいて使用するvirtalhost構成を選択します。

その仮想ホストブロックが別のIP /ポートを使用して定義されている場合、Apacheがドメイン名に基づいて仮想ホストを選択する準備ができているかどうかはわかりません。あなたが言っているような音は、何が起こっているのかもしれません。

/etc/hostsファイルでは、first-site.comおよびsecond-site.comを指定します。これらの場合、www.接頭辞を使用するため、どちらも定義済みの仮想ホストではありません。名前ベースの仮想ホストを使用している場合おそらく、仮想ホストブロックにServerAliasディレクティブを追加する必要があります。一方、最初の段落では、参照しているサイトの役に立たない短縮形を使用しています。問題が発生している正確なURLを参照するように変更することをお勧めします。

4
mc0e

あなたが経験しているのは、デフォルトの動作 Apacheのドキュメントによる です。

enter image description here

172.20.30.50以外のアドレスへの要求は、メインサーバーから処理されます。ホスト名が不明である、またはHost:ヘッダーがない172.20.30.50へのリクエストは、www.example.comから提供されます。

したがって、second-site.com仮想ホストに到達できるようにするには、 http:// second-site .com:8080 /

これらのドメイン名をローカルのhostsファイルに含めるようにしてください(例:/etc/hostsC:\Windows\System32\drivers\etc\hostsなど)。DNSをまだ設定していない場合。これがオプションでない場合は、DynDNSまたは他のプロバイダーを使用して動的ホスト名を設定し、それをServerName/ServerAliasに使用することもできます。

3
Inigo Flores

62.210.xx.xxはサーバーのIPですか、またはNATサーバーの前のIPですか?)VirtualHost上のサーバーの実際のIPと、リクエストが送信されるIPが必要ですサーバーに多くのIPがある場合。

1
mick