Webサイトで使用されるポートを80から8080に変更しようとしています。
これが私の/etc/Apache2/ports.conf
です:
NameVirtualHost *:80
NameVirtualHost *:8080
Listen 80
Listen 8080
これが私のVirtualHostファイルです:
<VirtualHost *:8080>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin [email protected]
ServerName www.foo.com
ServerAlias foo.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html index.php
DocumentRoot /var/www/foo.com/
</VirtualHost>
netstat -lntp
出力:
tcp6 0 0 :::8080 :::* LISTEN 7267/Apache2
tcp6 0 0 :::80 :::* LISTEN 7267/Apache2
VirtualHostのポート8080
を使用してApacheを再起動すると、Webサイトがダウンします(ChromeのWebサイトエラーに接続できませんでした)。ポート80
に戻すと、すべてが正常に機能します。
私はここで何が間違っているのですか?
更新:
ホストはDebian7を搭載したlinodeマシンです。
また、SElinuxを有効にしていません。
/etc/hosts
構成:
127.0.0.1 <foo.com> <serverhostname>
127.0.1.1 debian
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ポート8080は正しく開いていると思います。これが、iptables -L -n -v
の出力です。
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
467 36136 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 127.0.0.0/8 reject-with icmp-port-unreachable
103K 11M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
600 35296 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
30 1532 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
42 2308 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
6860 411K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
44 2848 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
860 57824 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
968 67687 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
curl -v http://localhost:8080
出力:
* About to connect() to localhost port 8080 (#0)
* Trying ::1...
* connected
* Connected to localhost (::1) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.26.0
> Host: localhost:8080
> Accept: */*
>
* additional stuff not fine transfer.c:1037: 0 0
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 301 Moved Permanently
< Date: Mon, 10 Jun 2013 09:58:08 GMT
< Server: Apache/2.2.22 (Debian)
< X-Powered-By: PHP/5.4.4-14
< X-Pingback: http://www.foo.com/xmlrpc.php
< Location: http://localhost/
< Vary: Accept-Encoding
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to Host localhost left intact
* Closing connection #0
たぶん、ポート8080はiptablesによってブロックされています。使用する iptables -L -n -v
iptablesが有効になっていて、ポート8080へのパケットを効果的にブロックしているかどうかを確認します。
Netstatの出力から、ポート8080がipv6でリッスンしているように見えます。接続にipv6を使用していますか?
Httpdはipv4をリッスンしていますか?
実行できますかnetstat -lntp|grep 80
そして、あなたが関連すると思うビットを単に貼り付けるのではなく、すべての出力を表示します。
どのディストリビューションを実行していますか? SElinuxが有効になっていて、リクエストが拒否されている可能性があります。
SElinuxがenbaledされているかどうかを確認します
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
現在のモードが強制されている場合は、トラブルシューティング中に無効にしてみてください。
#setenforce 0
現在機能している場合は、audit2allow
を介してカスタムSElinuxポリシーを作成する必要があります。
次の回避策をお勧めします。
apacheの構成を確認してください
apachectl configtest
サーバー自体からページをテストし、HTTP出力を確認します
wget -O- "localhost"
apache error_logをチェックして、どのような種類のエラーが発生しているかを確認してください。おそらく、Webサイトの構成でポート8080が許可されていません。
ポート8080のみを使用して、何が起こるかを確認してください
NameVirtualHost *:8080リッスン8080
ポート8080でリッスンしているVirtualHostのみを作成します
はい、ポートが開いているようです。何が起こったのか
curl -v http://localhost:8080
?
あなたの問題は、Apacheが少なくとも:: 1をipv6でリッスンしていることだと確信しています。
Ipv4、ipv6、またはその両方を使用するかどうかを教えてください。
以下を実行して、出力を貼り付けてください。
ifconfig -a
これにより、インターフェイスで実行されているすべてのIPアドレスが表示されます。
chromeのURLとしてhttp://<servername>.<foo.com>
を使用していると仮定すると、次のコマンドも実行して、コマンドに貼り付けて出力します。
Dig <servername>.<foo.com>
Dig <servername>
Dig -t A <servername>.<foo.com>
Dig -t A <servername>
Dig -t AAAA <servername>.<foo.com>
Dig -t AAAA <servername>
私はあなたがipv6ではなくipV4を使いたいと思っていると思います。その場合は、これを試してください。
/ etc/hostsを次のように変更します。
127.0.0.1 localhost
10.0.0.1 <servername>.<foo.com> <servername>
# The following lines are desirable for IPv6 capable hosts
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ただし、10.0.0.1をipv4アドレスに置き換えてください。次に、Apacheを再起動します。そして、ブラウザとcurlで再試行してください。
Curlを使用して、localhost
と<servername>.<foo.com>
を試してください。
ローカルホストへのcurlテストによると、Apacheは8080をリッスンして応答していますが、301でhttp:// localhost /にリダイレクトしていますが、これはデフォルトサイトからのもののようです。
Apache confingに従って、ServerNamewww.foo.comで名前付き仮想ホストを構成しています。
試してみてください:
$ telnet localhost 8080
GET / HTTP/1.0
Host: www.foo.com
2行で終了します。それがコンテンツを返している場合は、サーバー構成が正常に機能していることを意味します。だからあなたの問題はあなたとあなたのサーバーの間にあります。