我在连接本地 web 服务(apache2 默认网页)时遇到问题。当我使用wget
服务器执行简单的 HTTP:GET 请求时,返回503 Service unavailable
。但是,当我 时sudo wget
,我得到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]
这怎么可能?
比较一些细节:
$ 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---
...
为什么我的请求会发给代理?
代理是网关/防火墙,但我很惊讶这个请求竟然离开了这台机器。 和 可以观察到类似的curl
行为python3.urllib
。
以下是系统的一些细节
$ 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
答案1
经过一些研究我尝试了这个:
$ env | grep proxy
http_proxy=http://10.10.1.30:3128
https_proxy=https://10.10.1.30:3128
这就是导致将请求发送到代理的wget
原因。curl
urllib
这暂时解决了该问题:
$ unset http_proxy
$ wget localhost
我这样做是为了弄清楚它被设置在哪里:
$ cd /etc
$ grep -rw http_proxy
profile.d/proxy.sh:export http_proxy=http://10.10.1.30:3128
现在,每当我使用需要连接到本地服务器的工具时,我只需要unset
该变量。然后每当我使用连接到互联网的工具时,就可以恢复它。