2

I'm trying to change the port used by a website from 80 to 8080.

Here is my /etc/apache2/ports.conf:

NameVirtualHost *:80
NameVirtualHost *:8080
Listen 80
Listen 8080

Here is my VirtualHost file:

<VirtualHost *:8080>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin webmaster@foo.com
  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 output:

tcp6       0      0 :::8080       :::*              LISTEN      7267/apache2    
tcp6       0      0 :::80         :::*              LISTEN      7267/apache2

When I restart apache using the port 8080 in my VirtualHost, the website goes down (could not connect to website error in chrome), if I change back to port 80, all works correctly again.

What am I doing wrong here?

UPDATE:

The host it's a linode machine with Debian 7.

Also I do not have SElinux enabled.

The /etc/hosts config:

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

I think the port 8080 it's correctly open, here is the output of 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 output:

* 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
rfc1484
  • 201

7 Answers7

4

Maybe Port 8080 is blocked by iptables. Use iptables -L -n -v to see if iptables is enabled and effectively blocking packets to port 8080.

MadHatter
  • 81,580
tim
  • 1,237
3

what distro are you running? You may have SElinux enabled, which is denying your requests.

Check if SElinux is enbaled

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

If the current mode is enforcing try to disable it during troubleshooting:

#setenforce 0

If it's working now you have to create a custom SElinux policy via audit2allow.

faisch
  • 31
3

From your netstat output it looks like port 8080 is listening on ipv6. Are you using ipv6 to connect?

Is httpd listening on ipv4?

Can you run netstat -lntp|grep 80 and show us all of the output instead of just pasting in the bit you think is relevant.

Jason Tan
  • 2,792
1

I suggest following workaround,

  • check apache configuration

    apachectl configtest

  • test the page from the server itself and check HTTP output

    wget -O - "localhost"

  • check apache error_log to what kind of error are you getting, probably a configuration on your website is not allowing port 8080

  • try use only port 8080 to see what happens

    NameVirtualHost *:8080 Listen 8080

  • create only a VirtualHost listening on port 8080

mdiianni
  • 149
1

Ok, I see that port is open. What happend with

curl -v http://localhost:8080

?

dr-evil
  • 377
1

I'm fairly certain your problem is that apache is listening on ipv6 at least for ::1 .

Can you please let me know if you want to use ipv4, ipv6 or both?

Please run the following and paste in the output:

ifconfig -a

That should show us all the IP addresses that are running on interfaces.

Assuming you are using http://<servername>.<foo.com> as the URL in chrome then please also run these commands are paste in the command and output:

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>

I'm assuming you want to use ipV4 not ipv6. If that is the case try this:

Change your /etc/hosts to look like this:

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

But replace the 10.0.0.1 with your ipv4 address. Then restart apache. And try again with your browser and with curl.

With curl try localhost and <servername>.<foo.com>.

Jason Tan
  • 2,792
0

As per your curl test to localhost apache is listening to 8080 and responding although redirecting you with a 301 to http:// localhost/ but that seems to come from the default site.

As per your apache confing you are configuring a named virtual host, with ServerName www.foo.com

Try:

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

Ending with two line returns. If that is returning content it means that server configuration is working fine. So your problem is between you and your server.

Kus
  • 41