web-dev-qa-db-ja.com

Apacheでポート80を8080に変更

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
1
rfc1484

たぶん、ポート8080はiptablesによってブロックされています。使用する iptables -L -n -v iptablesが有効になっていて、ポート8080へのパケットを効果的にブロックしているかどうかを確認します。

4
tim

Netstatの出力から、ポート8080がipv6でリッスンしているように見えます。接続にipv6を使用していますか?

Httpdはipv4をリッスンしていますか?

実行できますかnetstat -lntp|grep 80そして、あなたが関連すると思うビットを単に貼り付けるのではなく、すべての出力を表示します。

3
Jason Tan

どのディストリビューションを実行していますか? 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ポリシーを作成する必要があります。

3
faisch

次の回避策をお勧めします。

  • apacheの構成を確認してください

    apachectl configtest

  • サーバー自体からページをテストし、HTTP出力を確認します

    wget -O- "localhost"

  • apache error_logをチェックして、どのような種類のエラーが発生しているかを確認してください。おそらく、Webサイトの構成でポート8080が許可されていません。

  • ポート8080のみを使用して、何が起こるかを確認してください

    NameVirtualHost *:8080リッスン8080

  • ポート8080でリッスンしているVirtualHostのみを作成します

1
mdiianni

はい、ポートが開いているようです。何が起こったのか

curl -v http://localhost:8080

1
dr-evil

あなたの問題は、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>を試してください。

1
Jason Tan

ローカルホストへのcurlテストによると、Apacheは8080をリッスンして応答していますが、301でhttp:// localhost /にリダイレクトしていますが、これはデフォルトサイトからのもののようです。

Apache confingに従って、ServerNamewww.foo.comで名前付き仮想ホストを構成しています。

試してみてください:

$ telnet localhost 8080
GET / HTTP/1.0
Host: www.foo.com

2行で終了します。それがコンテンツを返している場合は、サーバー構成が正常に機能していることを意味します。だからあなたの問題はあなたとあなたのサーバーの間にあります。

0
Kus