服务器访问外网需要走HTTP代理 http://proxy.example.com
curl 、wget 工具的使用要使用代理,如何在 /etc/profile 中配置?
要在 /etc/profile
中配置代理,使 curl
和 wget
等命令通过指定的 HTTP 代理访问外网,请按以下步骤操作:
步骤 1:编辑 /etc/profile
使用 root 权限编辑文件:
sudo vi /etc/profile
步骤 2:添加代理配置
在文件末尾添加以下内容(替换实际用户名、密码和代理地址):
# 设置 HTTP 和 HTTPS 代理
export http_proxy="http://username:password@proxy.example.com"
export https_proxy="http://username:password@proxy.example.com"
# 可选:设置不经过代理的地址(如内网、本地)
export no_proxy="localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8"
# 同步大写变量(部分工具兼容大写)
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export NO_PROXY="$no_proxy"
关键说明:
-
变量作用:
-
http_proxy
/https_proxy
:分别控制 HTTP 和 HTTPS 流量的代理。 -
no_proxy
:排除代理的地址(逗号分隔),支持 IP 段(如192.168.0.0/16
)。 -
注意:
wget
默认使用小写变量(http_proxy
),而curl
兼容大写和小写。
-
-
特殊字符处理:
- 如果密码包含特殊字符(如
@
、:
、%
),需进行 URL 编码:-
@
→%40
-
:
→%3A
- 空格 →
%20
- 例如:密码
p@ss:w rd
应编码为p%40ss%3Aw%20rd
。
-
- 如果密码包含特殊字符(如
-
端口指定:
- 如果代理使用非标准端口(如
8080
),需显式声明:export http_proxy="http://username:password@proxy.example.com:8080"
- 如果代理使用非标准端口(如
步骤 3:应用配置
保存文件后,执行以下命令使配置立即生效(或重启终端):
source /etc/profile # 对所有新终端会话生效
测试代理
-
测试
curl
:curl -I http://example.com
观察返回的 HTTP 状态码(如
200 OK
)。 -
测试
wget
:wget -O /dev/null http://example.com
检查是否成功下载(无错误提示)。
常见问题排查
-
代理未生效:
- 确认已执行
source /etc/profile
。 - 检查变量名拼写(大小写敏感)。
- 使用
echo $http_proxy
验证变量值。
- 确认已执行
-
认证失败:
- 检查用户名/密码是否正确。
- 确认特殊字符已正确编码。
- 通过浏览器访问代理地址测试认证。
-
代理连接超时:
- 确保代理地址可访问:
telnet proxy.example.com 80 # 测试代理端口连通性
- 确保代理地址可访问:
安全建议
-
限制权限:如果只需为当前用户设置代理,可改用
~/.bashrc
代替/etc/profile
。 - 密码安全:避免在共享环境中明文存储密码,考虑使用代理的 IP 白名单或密钥认证。
通过以上配置,curl
、wget
及其他支持标准代理环境变量的工具(如 git
、apt
等)均可自动使用代理。
如何给 yum 设置代理 ,安装 rpm包?
要为 yum 设置 HTTP 代理以访问外网安装 RPM 包,请按以下步骤操作:
方法 1:修改全局配置文件(推荐)
-
编辑
/etc/yum.conf
文件:sudo vi /etc/yum.conf
-
在文件末尾添加代理配置(根据代理类型选择一种):
# HTTP/HTTPS 代理(无认证) proxy=http://proxy.example.com # 如果代理需要认证 proxy=http://username:password@proxy.example.com # 指定端口(如 8080) proxy=http://proxy.example.com:8080
保存并退出(在 vi 中按
Esc
后输入:wq
)。
方法 2:临时设置环境变量
# 设置代理环境变量
export http_proxy=http://proxy.example.com
export https_proxy=http://proxy.example.com
# 运行 yum 命令(仅当前终端有效)
sudo yum install package-name
验证代理是否生效
sudo yum update # 测试网络访问
注意事项
-
代理格式:
- 基础代理:
http://proxy.example.com:端口
- 带认证:
http://用户:密码@proxy.example.com:端口
- 基础代理:
-
特殊配置:
- 排除内网地址(在
/etc/yum.conf
中添加):proxy_exclude=*.internal-domain.com,192.168.1.*
- 排除内网地址(在
-
代理协议:
- 如果代理支持 HTTPS,建议使用
https://
前缀提高安全性。
- 如果代理支持 HTTPS,建议使用
完成配置后,yum 将通过指定代理访问外网资源安装 RPM 包。如遇问题,可通过 yum -v debug
查看详细日志排查。
如何给 java工程启动设置http代理?
要为 Java 工程设置 HTTP 代理启动,可通过以下几种方式实现:
方式一:启动时添加 JVM 参数(推荐)
java -Dhttp.proxyHost=proxy.example.com \
-Dhttp.proxyPort=80 \
-Dhttps.proxyHost=proxy.example.com \
-Dhttps.proxyPort=80 \
-jar your-application.jar
方式二:设置环境变量(适用于所有 Java 应用)
# 临时设置(当前会话有效)
export JAVA_OPTS="-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=80"
java $JAVA_OPTS -jar your-application.jar
# 永久设置(添加到 ~/.bashrc 或 /etc/profile)
echo "export JAVA_OPTS=\"-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=80\"" >> ~/.bashrc
source ~/.bashrc
方式三:代码中设置(需修改源码)
public class Main {
public static void main(String[] args) {
// 设置代理
System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "80");
// 如果需要认证
System.setProperty("http.proxyUser", "username");
System.setProperty("http.proxyPassword", "password");
// 启动应用
SpringApplication.run(Main.class, args);
}
}
特殊场景处理
-
代理需要认证:
java -Dhttp.proxyHost=proxy.example.com \ -Dhttp.proxyPort=80 \ -Dhttp.proxyUser=your_username \ -Dhttp.proxyPassword=your_password \ -jar app.jar
-
排除内部地址不走代理:
java -Dhttp.nonProxyHosts="localhost|127.*|192.168.*|*.internal" \ -Dhttp.proxyHost=proxy.example.com \ -jar app.jar
-
HTTPS 代理设置:
java -Dhttps.proxyHost=proxy.example.com \ -Dhttps.proxyPort=443 \ -jar secure-app.jar
验证代理是否生效
在代码中添加测试语句:
System.out.println("HTTP Proxy: " + System.getProperty("http.proxyHost"));
System.out.println("HTTPS Proxy: " + System.getProperty("https.proxyHost"));
注意事项
-
敏感信息安全:避免在命令行直接暴露密码,建议:
- 使用配置文件读取凭证
- 通过环境变量传递密码
export PROXY_PASS=your_password java -Dhttp.proxyPassword=$PROXY_PASS ...
-
容器环境:若在 Docker 中运行,需在 Dockerfile 或启动命令中添加:
ENV JAVA_TOOL_OPTIONS "-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=80"
Maven/Gradle:构建时也需要单独设置代理(与运行时无关)
推荐优先使用启动参数方式(方式一),既不需要改代码,又能保持环境干净。对于需要认证的代理,建议结合系统密钥库或配置中心管理凭证。
如何给运行在服务器上的docker设置代理?
要为运行在服务器上的 Docker 设置代理,使其能够通过 HTTP 代理 http://proxy.example.com
访问外网,需分两部分配置:Docker 守护进程(用于拉取镜像等操作)和 Docker 容器内部网络访问。
一、配置 Docker 守护进程(Daemon)使用代理
此步骤让 Docker 引擎本身(如 docker pull
)通过代理访问外网。
1. 创建代理配置文件
为 systemd 管理的 Docker 服务创建环境变量配置文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
2. 添加代理设置
在文件中写入以下内容(替换 http://proxy.example.com
为实际代理地址):
[Service]
Environment="HTTP_PROXY=http://proxy.example.com"
Environment="HTTPS_PROXY=http://proxy.example.com"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.internal"
-
NO_PROXY
:指定不走代理的地址(如内网服务、私有镜像仓库等,按需修改)。
3. 应用配置并重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
4. 验证守护进程代理
systemctl show --property=Environment docker
若输出包含 HTTP_PROXY
和 HTTPS_PROXY
则配置成功。
二、配置容器内部使用代理(容器内访问外网)
容器内部访问外网时需单独设置代理,有两种方法:
方法1:运行时传递环境变量(推荐)
在 docker run
命令中添加环境变量:
docker run \
-e HTTP_PROXY=http://proxy.example.com \
-e HTTPS_PROXY=http://proxy.example.com \
-e NO_PROXY=localhost,127.0.0.1 \
your_image
方法2:在 Dockerfile 中设置环境变量
在 Dockerfile 中固化代理配置(慎用,会限制镜像通用性):
ENV HTTP_PROXY="http://proxy.example.com"
ENV HTTPS_PROXY="http://proxy.example.com"
ENV NO_PROXY="localhost,127.0.0.1"
三、验证代理生效
-
守护进程代理验证
运行以下命令测试 Docker Hub 访问:docker pull hello-world
观察是否能正常拉取镜像。
-
容器内代理验证
启动一个临时容器测试网络:docker run --rm -e HTTP_PROXY=http://proxy.example.com alpine wget -O- http://example.com
若返回网页内容,则容器内代理生效。
注意事项
代理格式
若代理需认证,使用http://username:password@proxy.example.com
格式。NO_PROXY
的重要性
避免本地服务(如数据库)的流量误走代理,务必在NO_PROXY
中添加内网地址。-
DNS 解析问题
若代理域名无法解析,在/etc/hosts
中添加静态解析:x.x.x.x proxy.example.com
Docker 版本兼容性
以上方法适用于较新的 Docker 版本(≥ v17.07)。
通过以上步骤,Docker 守护进程及容器均可通过代理访问外网。
docker build 构建镜像,如何设置代理?
为 Docker Build 设置代理
在 Docker build 过程中设置代理有两种主要方法,确保构建过程中拉取基础镜像、下载依赖包等操作能通过代理访问外网:
方法 1:通过构建参数传递代理设置(推荐)
这是最灵活的方式,不会硬编码代理到 Dockerfile 中:
docker build \
--build-arg http_proxy=http://proxy.example.com \
--build-arg https_proxy=http://proxy.example.com \
--build-arg no_proxy="localhost,127.0.0.1,internal.example.com" \
-t your-image-name .
在 Dockerfile 中接收这些参数:
# 声明构建参数
ARG http_proxy
ARG https_proxy
ARG no_proxy
# 设置环境变量(所有后续RUN指令都会使用)
ENV http_proxy=$http_proxy
ENV https_proxy=$https_proxy
ENV no_proxy=$no_proxy
# 构建你的镜像
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
curl \
git
# ... 其他构建步骤 ...
# 可选:清除代理设置(避免代理信息保留在最终镜像中)
ENV http_proxy=
ENV https_proxy=
ENV no_proxy=
方法 2:直接在 Dockerfile 中设置代理(不推荐)
这种方法会将代理信息硬编码到 Dockerfile 中,降低了镜像的可移植性:
# 设置代理环境变量
ENV http_proxy=http://proxy.example.com
ENV https_proxy=http://proxy.example.com
ENV no_proxy=localhost,127.0.0.1
# 后续构建步骤
FROM alpine:latest
RUN apk add --no-cache curl git python3
方法 3:配置 Docker 守护进程全局代理(影响所有构建)
如果你希望所有构建操作都使用代理,可以配置 Docker 守护进程:
- 创建配置文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
- 添加代理设置:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com"
Environment="HTTPS_PROXY=http://proxy.example.com"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com"
- 应用配置:
sudo systemctl daemon-reload
sudo systemctl restart docker
验证代理是否生效
在 Dockerfile 中添加测试步骤:
RUN echo "Testing proxy..." \
&& curl -v http://www.example.com \
&& curl -v https://www.google.com
构建时观察日志,确保请求通过代理:
docker build --no-cache -t proxy-test .
注意事项
-
代理格式:
- 需要认证的代理:
http://username:password@proxy.example.com:port
- 避免在 Dockerfile 中硬编码认证信息(有安全风险)
- 需要认证的代理:
-
NO_PROXY 设置:
--build-arg no_proxy="localhost,127.0.0.1,.example.com,192.168.0.0/16"
- 包含所有不应通过代理访问的地址
- 使用逗号分隔多个值
- 支持域名后缀(
.example.com
)和 CIDR 表示法
-
区分大小写:
- Linux 系统通常使用小写(
http_proxy
) - 某些工具可能需要大写(
HTTP_PROXY
) - 最佳实践是同时设置:
ENV http_proxy=$http_proxy HTTP_PROXY=$http_proxy
- Linux 系统通常使用小写(
-
清除代理:
- 在构建结束前清除代理环境变量,防止泄漏到最终镜像:
# 在构建完成前取消代理设置 ENV http_proxy= https_proxy= no_proxy=
- 在构建结束前清除代理环境变量,防止泄漏到最终镜像:
选择方法 1(构建参数)是最佳实践,它既保持了 Dockerfile 的可移植性,又能灵活应对不同构建环境的代理需求。