Estou tendo problemas para me conectar a um serviço da web local (página da web padrão do Apache2). Quando faço uma solicitação HTTP:GET simples usando wget
o servidor retorna 503 Service unavailable
. No entanto, quando eu sudo wget
, eu recebo 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]
Como isso é possível?
Comparando alguns detalhes:
$ 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---
...
Por que minha solicitação está indo para um proxy?
O proxy é um gateway/firewall, mas estou surpreso que esta solicitação esteja saindo desta máquina. Comportamento comparável pode ser observado com curl
e python3.urllib
.
Aqui estão alguns detalhes do sistema
$ 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
Responder1
Depois de alguma pesquisa, tentei isso:
$ env | grep proxy
http_proxy=http://10.10.1.30:3128
https_proxy=https://10.10.1.30:3128
É isso que está fazendo com que o , wget
envie a solicitação ao proxy.curl
urllib
Isso resolve temporariamente o problema:
$ unset http_proxy
$ wget localhost
Eu fiz isso para descobrir onde estava sendo definido:
$ cd /etc
$ grep -rw http_proxy
profile.d/proxy.sh:export http_proxy=http://10.10.1.30:3128
Agora sempre que uso uma ferramenta que precisa se conectar a um servidor local, só preciso da unset
variável. Em seguida, restaure-o sempre que eu usar uma ferramenta que se conecte à internet.