Я пытаюсь изменить порт, используемый веб-сайтом, с 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 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
вывод:
tcp6 0 0 :::8080 :::* LISTEN 7267/apache2
tcp6 0 0 :::80 :::* LISTEN 7267/apache2
Когда я перезапускаю apache через порт 8080
в моем VirtualHost веб-сайт отключается (не удается подключиться к ошибке веб-сайта в Chrome), если я вернусь к порту 80
, снова все работает правильно.
Что я здесь делаю не так?
ОБНОВИТЬ:
Хост - это линодная машина с Debian 7.
Также у меня не включен SElinux.
В /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
Я думаю, что порт 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
# 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
Если он работает сейчас, вам нужно создать собственную политику SElinux через audit2allow
.
Я предлагаю следующее обходное решение,
проверьте конфигурацию apache
конфигурация apachectl
протестировать страницу с самого сервера и проверить вывод HTTP
wget -O - "локальный хост"
проверьте apache error_log на предмет того, какую ошибку вы получаете, возможно, конфигурация на вашем веб-сайте не позволяет порт 8080
попробуйте использовать только порт 8080, чтобы увидеть, что произойдет
NameVirtualHost *: 8080 Слушать 8080
создать только VirtualHost, прослушивающий порт 8080
Хорошо, я вижу, что порт открыт. Что случилось с
curl -v http://localhost:8080
?
Я почти уверен, что ваша проблема в том, что apache прослушивает ipv6 по крайней мере для :: 1.
Не могли бы вы сообщить мне, хотите ли вы использовать ipv4, ipv6 или оба?
Пожалуйста, запустите следующее и вставьте в вывод:
ifconfig -a
Это должно показать нам все IP-адреса, которые работают на интерфейсах.
Предполагая, что вы используете http://<servername>.<foo.com>
в качестве URL-адреса в Chrome также запустите эти команды, вставьте их в команду и выведите:
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>
Я предполагаю, что вы хотите использовать ipV4, а не ipv6. Если это так, попробуйте следующее:
Измените ваш / 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.
С завитком попробуйте localhost
и <servername>.<foo.com>
.
В соответствии с вашим тестом curl для localhost apache прослушивает 8080 и отвечает, хотя перенаправляет вас с 301 на http: // localhost /, но, похоже, это происходит с сайта по умолчанию.
В соответствии с вашей конфигурацией apache вы настраиваете именованный виртуальный хост с ServerName www.foo.com
Пытаться:
$ telnet localhost 8080
GET / HTTP/1.0
Host: www.foo.com
Завершение двухстрочным возвратом. Если это возвращает контент, это означает, что конфигурация сервера работает нормально. Итак, ваша проблема между вами и вашим сервером.