Apache слушает, но не отвечает
Я работаю над настройкой Apache на моем роутере (на котором я установил Tomato, специальный пакет прошивки на основе linux). Мне удалось установить Apache, и я считаю, что настроил его правильно, но не могу получить значение по умолчанию "Это работает!" страница для загрузки.
Запустив netstat, я вижу значение в столбце "Recv-Q", которое увеличивается каждый раз, когда я пытаюсь получить доступ к обслуживаемому файлу через браузер, но Apache не отвечает или не может ответить на запрос. Хвост Apache error_log также ничего не дает.
Кто-нибудь видит что-то очевидное, или есть какие-то предложения для того, чтобы что-то попробовать? Могу ли я предоставить дополнительную информацию, которая поможет?
Пример вывода netstat (см. 5-ю запись с адресом "::: www":
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:52698 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1338 0.0.0.0:* LISTEN
tcp 4 0 :::www :::* LISTEN
tcp 0 0 :::domain :::* LISTEN
tcp 0 0 :::ssh :::* LISTEN
tcp 0 0 :::telnet :::* LISTEN
tcp 0 0 localhost:52698 :::* LISTEN
tcp 0 0 :::1338 :::* LISTEN
udp 0 0 localhost:38032 0.0.0.0:*
udp 0 0 0.0.0.0:5038 0.0.0.0:*
udp 0 0 0.0.0.0:domain 0.0.0.0:*
udp 0 0 0.0.0.0:bootps 0.0.0.0:*
udp 0 0 0.0.0.0:60648 0.0.0.0:*
udp 0 0 0.0.0.0:49518 0.0.0.0:*
udp 0 0 0.0.0.0:38000 0.0.0.0:*
udp 0 0 :::domain :::*
raw 0 0 0.0.0.0:255 0.0.0.0:* 255
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 13850 /opt/var/apache2/run/cgisock.1325
Apache error_log содержимое:
[Wed Feb 13 16:05:16 2013] [notice] Digest: generating secret for digest authentication ...
[Wed Feb 13 16:05:16 2013] [notice] Digest: done
[Wed Feb 13 16:05:16 2013] [info] APR LDAP: Built with OpenLDAP LDAP SDK
[Wed Feb 13 16:05:16 2013] [info] LDAP: SSL support available
[Wed Feb 13 16:05:16 2013] [info] mod_unique_id: using ip addr 192.168.253.1
[Wed Feb 13 16:05:17 2013] [notice] Apache/2.2.20 (Unix) DAV/2 configured -- resuming normal operations
Обновление: похоже, что брандмауэр блокирует входящие запросы, хотя я открыл порт 80 (и 443).
Сообщения брандмауэра (информация об очищенном адресе, x = локально, y = удаленно):
Feb 13 16:53:15 UBERnet user.warn kernel: DROP IN=vlan2 OUT= MACSRC=xx:xx:xx:xx:xx:xx MACDST=yy:yy:yy:yy:yy:yy MACPROTO=0800 SRC=yyy.yyy.yyy.yyy DST=xxx.xxx.xxx.xxx LEN=48 TOS=0x00 PREC=0x20 TTL=57 ID=48272 DF PROTO=TCP SPT=43229 DPT=80 SEQ=3727060622 ACK=0 WINDOW=65535 RES=0x00 SYN URGP=0 OPT (0204056404020000)
Вывод iptables -L:
Chain INPUT (policy DROP)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
shlimit tcp -- anywhere anywhere tcp dpt:ssh state NEW
shlimit tcp -- anywhere anywhere tcp dpt:1338 state NEW
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp spt:bootps dpt:bootpc
ACCEPT tcp -- anywhere anywhere tcp dpt:1337
ACCEPT tcp -- anywhere anywhere tcp dpt:1338
logdrop all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:www
Chain FORWARD (policy DROP)
target prot opt source destination
all -- anywhere anywhere account: network/netmask: 192.168.253.0/255.255.255.0 name: lan
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
monitor all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
wanin all -- anywhere anywhere
wanout all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain logdrop (2 references)
target prot opt source destination
LOG all -- anywhere anywhere state NEW limit: avg 1/sec burst 5 LOG level warning tcp-sequence tcp-options ip-options macdecode prefix `DROP '
DROP all -- anywhere anywhere
Chain logreject (0 references)
target prot opt source destination
LOG all -- anywhere anywhere limit: avg 1/sec burst 5 LOG level warning tcp-sequence tcp-options ip-options macdecode prefix `REJECT '
REJECT tcp -- anywhere anywhere reject-with tcp-reset
Chain monitor (1 references)
target prot opt source destination
RETURN tcp -- anywhere anywhere WEBMON --max_domains 1000 --max_searches 1000
Chain shlimit (2 references)
target prot opt source destination
all -- anywhere anywhere recent: SET name: shlimit side: source
logdrop all -- anywhere anywhere recent: UPDATE seconds: 60 hit_count: 4 name: shlimit side: source
Обновление: Как примечание, я смог заставить lighttpd работать только с настройкой iptables, поэтому кажется, что это была проблема, специфичная для конфигурации Apache.
3 ответа
Я понятия не имею, в чем может быть проблема, но следующий полезный шаг может состоять в том, чтобы присоединиться к процессу прослушивания (и его форкам) с помощью strace и посмотреть, что происходит, когда вы пытаетесь подключиться.
strace -o apache.strace -f -p $PID
Помещает результат в файл apache.strace.
В цепочке INPUT брандмауэра, logdrop
линия убивает вашу связь. Это универсальная цепочка для удаления всего нежелательного трафика. Обработка правил никогда не достигает веб-правил. Вы должны переместить ПРИНЯТЬ правила выше logdrop
править.
Что-то не так. Apache прослушивает только IPv6. Можете ли вы изменить Listen
параметр в файле конфигурации Apache для
Listen 0.0.0.0:80
А затем перезапустите Apache. Повторите команду netstat еще раз и убедитесь, что выходные данные содержат 0.0.0.0:www или что-то в этом роде по протоколу IPv4.