Ich habe Probleme, eine Verbindung zu einem lokalen Webservice herzustellen (Standardwebseite von Apache2). Wenn ich eine einfache HTTP:GET-Anfrage mache, wget
gibt der Server zurück 503 Service unavailable
. Wenn ich jedoch sudo wget
, bekomme ich 200 OK
.
$ wget localhost
--2023-03-02 04:58:46-- http://localhost/
Connecting to 10.10.1.30:3128... connected.
Proxy request sent, awaiting response... 503 Service Unavailable
2023-03-02 04:58:46 ERROR 503: Service Unavailable.
$ wget 127.0.0.1
--2023-03-02 04:59:13-- http://127.0.0.1/
Connecting to 10.10.1.30:3128... connected.
Proxy request sent, awaiting response... 403 Forbidden
2023-03-02 04:59:13 ERROR 403: Forbidden.
$ sudo wget localhost
--2023-03-02 04:59:32-- http://localhost/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10701 (10K) [text/html]
Saving to: ‘index.html’
index.html 100%[=================>] 10.45K --.-KB/s in 0s
2023-03-02 04:59:32 (365 MB/s) - ‘index.html’ saved [10701/10701]
Wie ist das möglich?
Vergleich einiger Details:
$ wget localhost --debug | $ sudo wget localhost --debug
... | ...
---request begin--- | ---request begin---
GET http://localhost/ HTTP/1.1 | GET / HTTP/1.1
User-Agent: Wget/1.21 | User-Agent: Wget/1.21
Accept: */* | Accept: */*
Accept-Encoding: identity | Accept-Encoding: identity
Host: localhost | Host: localhost
Connection: Keep-Alive | Connection: Keep-Alive
Proxy-Connection: Keep-Alive |
---request end--- | ---request end---
Proxy request sent, awaiting response... | HTTP request sent, awaiting response...
---response begin--- | ---response begin---
HTTP/1.1 503 Service Unavailable | HTTP/1.1 200 OK
Server: squid/3.5.28 | Server: Apache/2.4.54 (Debian)
Mime-Version: 1.0 | Last-Modified: Tue, 09 Aug 2022 17:13:01 GMT
Date: Thu, 02 Mar 2023 10:08:29 GMT | Date: Thu, 02 Mar 2023 10:11:58 GMT
Content-Type: text/html;charset=utf-8 | Content-Type: text/html
Content-Length: 3718 | Content-Length: 10701
X-Squid-Error: ERR_DNS_FAIL 0 | ETag: "29cd-5e5d20b6c3ce8"
Vary: Accept-Language | Vary: Accept-Encoding
Content-Language: en | Accept-Ranges: bytes
X-Cache: MISS from mgmt-11102 | Keep-Alive: timeout=5, max=100
Via: 1.1 mgmt-11102 (squid/3.5.28) |
Connection: keep-alive | Connection: Keep-Alive
---response end--- | ---response end---
...
Warum geht meine Anfrage an einen Proxy?
Der Proxy ist ein Gateway/eine Firewall, aber ich bin überrascht, dass diese Anfrage diesen Rechner überhaupt verlässt. Vergleichbares Verhalten ist bei curl
und zu beobachten python3.urllib
.
Hier sind einige Details des Systems
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 host
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ cat /etc/apt/apt.conf.d/99HttpProxy
Acquire::http::Proxy "http://10.10.1.30:3128";
Acquire::http::No-Cache true;
Acquire::http::Pipeline-Depth 0;
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
6: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 78:ac:44:56:dc:b8 brd ff:ff:ff:ff:ff:ff
altname enp24s0f0
inet 10.10.1.1/24 brd 10.10.1.255 scope global eno1
valid_lft forever preferred_lft forever
$ ip route
10.10.1.0/24 dev eno1 proto kernel scope link src 10.10.1.1
$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eno1
iface eno1 inet static
address 10.10.1.1
netmask 255.255.255.0
Antwort1
Nach einigen Recherchen habe ich Folgendes versucht:
$ env | grep proxy
http_proxy=http://10.10.1.30:3128
https_proxy=https://10.10.1.30:3128
Dies ist der Grund wget
, warum curl
, , urllib
die Anforderung an den Proxy sendet.
Dies löst das Problem vorübergehend:
$ unset http_proxy
$ wget localhost
Ich habe Folgendes getan, um herauszufinden, wo es eingestellt wurde:
$ cd /etc
$ grep -rw http_proxy
profile.d/proxy.sh:export http_proxy=http://10.10.1.30:3128
Wenn ich jetzt ein Tool verwende, das eine Verbindung zu einem lokalen Server herstellen muss, muss ich nur unset
die Variable angeben. Anschließend muss ich sie wiederherstellen, wenn ich ein Tool verwende, das eine Verbindung zum Internet herstellt.