Apache HTTP 2.2가 설치된 Ubuntu 12.04에 서버가 있습니다.
커널 3.2.0.
특정 파일을 다운로드할 때 이상한 동작이 발생합니다.
가상 호스트 구성:
<Directory /var/www/name/*>
...
AllowOverride AuthConfig
# add these accordingly for the MIME types to be compressed
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
<Files *.gz>
SetOutputFilter DEFLATE
Header set Content-Encoding: gzip
Header append Content-Encoding: deflate
</Files>
</Directory>
문제는 알 수 없는 이유로 일부(!) 파일을 다운로드할 수 없는 경우가 있다는 것입니다. 파일이 99% 다운로드되면 속도가 0으로 떨어지고 다운로드가 중지됩니다.
tcpdump
로그에는 특이한 점이 없지만 결과에서 이상한 점을 발견했습니다(다운로드 속도 == 0 이후).
예를 들어 - 다운로드를 시도하는 동안 badfile.gz
:
10:36:37.611369 IP (tos 0x0, ttl 64, id 7954, offset 0, flags [DF], proto TCP (6), length 1420)
37.**.**.176.80 > 10.**.**.25.55981: Flags [.], cksum 0x00a9 (correct), seq 228803:230171, ack 197, win 243, options [nop,nop,TS val 2097666946 ecr 811530774], length 1368
10:36:37.611396 IP (tos 0x0, ttl 64, id 64391, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->933a)!)
10.**.**.25.55981 > 37.**.**.80: Flags [.], cksum 0xac28 (incorrect -> 0xf8fc), seq 197, ack 230171, win 4053, options [nop,nop,TS val 811530824 ecr 2097666946], length 0
Flags [.]
그래서 데이터 전송이 중단됩니다. ( Finalize
내가 아는 한) 플래그가 없습니다.
tcpdump
다른 파일을 다운로드하는 또 다른 예 goodfile.gz
(서버 측의 동일한 Apache 디렉터리에서):
10:39:21.216118 IP (tos 0x0, ttl 64, id 18169, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->47c9)!)
10.**.**.25.55981 > 37.**.**.80: Flags [F.], cksum 0xac28 (incorrect -> 0x83bb), seq 0, ack 1, win 4096, options [nop,nop,TS val 811691867 ecr 2097666946], length 0
확장자/크기/인증 등이 다른 파일은 거의 없지만 문제는 그 중 일부에서만 발생합니다.
따라서 때로는 서버 측을 변경하지 않고도 문제가 발생하는 경우가 있습니다. 때로는 badfile.gz
문제 없이 다운로드되기도 하지만 때로는 (보통) 중단되기도 합니다.
브라우저를 사용하여 다운로드할 때도 마찬가지입니다. Chrome에서 "실패 - 네트워크 오류",Firefox - 그냥 말하세요"아마도 알려지지 않았을 것이다"다운로드 과정 중.
더 많은 정보를 추가할 수 있으면 알려주시기 바랍니다.
몇 가지 예를 들어보세요.
badfile
첫 번째:
$ wget http://static.content.domain.net/assets/json/en-GB/content3.json.gz
...
HTTP request sent, awaiting response... 200 OK
Length: 229874 (224K) [application/x-gzip]
Saving to: 'content3.json.gz.3'
content3.json.gz.3 99%[==============...=====> ] 224.42K --.-KB/s eta 0s
그리고 goodfile
:
$ wget http://static.content.domain.net/assets/json/en-GB/24k.tar.gz
...
HTTP request sent, awaiting response... 200 OK
Length: 24576 (24K) [application/x-gzip]
Saving to: '24k.tar.gz.1'
24k.tar.gz.1 100%[=========...======>] 24.00K --.-KB/s in 0.05s
2015-11-25 10:38:40 (440 KB/s) - '24k.tar.gz.1' saved [24576/24576]
추신: 사무실/데이터 센터 간의 VPN 터널을 포함하여 우리의 네트워크 구성은 충분히 복잡합니다. 이것이 여기서도 이유일 수 있습니다.
PPS 우리는 또한 아주 오래된 시스템을 가지고 있습니다:
# /usr/lib/update-notifier/apt-check --human-readable
205 packages can be updated.
154 updates are security updates.
하지만 지금은 업데이트할 수 없습니다 :-)
답변1
이야기는 계속됩니다. 며칠 전 apt-get update
일부 Ubuntu 12/14 시스템에서도 문제가 발생했습니다. 목록을 다운로드하는 동안 완료되지 않고 중단되었습니다.
NOC 팀은 Cisco ASA의 위협 탐지 설정을 수정하여 "Scan only to Passive"로 변경했습니다.
답변2
우리는 또한 귀하가 설명하신 대로 정확하게 Linux 서버의 다운로드 실패 문제를 알고 있습니다. 여기에서는 Linux 커널 3.x와 Cisco ASA 간의 비호환성을 추적했습니다.
관련된 시스템 중 하나에는 최신 3.x Debian 커널 3.16.0이 있고 ASA 펌웨어 업데이트가 최신 상태입니다.
증상은 100% 재현할 수 없으며 더 큰 파일에만 영향을 미치는 것으로 보이며 외부 네트워크(우리의 경우 인터넷)에서 요청이 들어올 때 악화됩니다.
여기에 로컬 Linux 배포판 저장소가 있는데 인터넷에서 ISO 이미지를 다운로드하는 것은 정말 엉망입니다.
우리는 이 문제를 완화하려고 노력했고 net.ipv4.tcp_sack = 0
심지어 실험을 실행했지만 net.ipv4.tcp_ecn = 0
문제를 완화했지만 모든 서버에서 문제가 해결되지는 않았습니다.
커널 4.2.0으로 마이그레이션한 후 문제가 완전히 해결되었습니다.
또한 우리가 시도한 것보다 더 많은 해결 방법을 설명하는 스레드도 찾았습니다 sysctl
.
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.ipv4.tcp_congestion_control=reno
sysctl -w net.ipv4.tcp_frto=1
sysctl -w net.ipv4.tcp_early_retrans=1
그들은 또한 우리가 알지 못했던 ASA 구성에 대한 수정 사항도 언급했습니다. Cisco 장비가 있고 Cisco 지원이 있는 경우 참여하도록 권장합니다.
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1388786