在 Ubuntu 服务器中为所有应用程序全局设置代理

在 Ubuntu 服务器中为所有应用程序全局设置代理

Ubuntu 服务器 16/18。

服务器内部运行着很多应用程序,包括但不限于docker、npm、maven、gradle等。

我很厌倦为每个应用程序设置代理。是否可以全局设置?

注意:当我说全局时,我的意思是每个连接,包括通过docker build或run过程下载的包apt-get、下载的工件。maven/gradle/npm

答案1

一个解决方案是在每个进程中设置环境变量。

我想这192.168.88.88:3128是我的 squid 代理的 IP 端口。

在 ubuntu 18.04 上(我的测试机器)

你必须 :

  1. /etc/environment通过添加以下行进行修改:
FTP_PROXY="http://192.168.88.88:3128/"
HTTPS_PROXY="http://192.168.88.88:3128/"
HTTP_PROXY="http://192.168.88.88:3128/"
NO_PROXY="localhost,127.0.0.0/8,::1"
ftp_proxy="http://192.168.88.88:3128/"
http_proxy="http://192.168.88.88:3128/"
https_proxy="http://192.168.88.88:3128/"
no_proxy="localhost,127.0.0.0/8,::1"
  1. 修改/etc/systemd/system.conf该部分[Manager],添加以下一行:
DefaultEnvironment="FTP_PROXY=http://192.168.88.88:3128/" "HTTPS_PROXY=http://192.168.88.88:3128/" "HTTP_PROXY=http://192.168.88.88:3128/" "NO_PROXY=localhost,127.0.0.0/8,::1" "ftp_proxy=http://192.168.88.88:3128/" "http_proxy=http://192.168.88.88:3128/" "https_proxy=http://192.168.88.88:3128/" "no_proxy=localhost,127.0.0.0/8,::1"
  1. 您必须重新启动服务器才能重新启动进程。

  2. 您可以验证每个进程是否具有正确的设置,您可以运行此命令:

(
for PROCPID in /proc/[1-9]* ;
do
    FENV=${PROCPID}/environ ; 
    C=$(sudo strings $FENV | grep -c -i 'proxy.*=' ) ;
    PCMDL=$(sudo strings ${PROCPID}/cmdline | tr '\n' ' ') ;
    PID=$(basename $PROCPID) ;
    PCOMM=$(sudo strings ${PROCPID}/comm) ;
    printf '%s:%s:%s:%s\n' "$C" "$PID" "$PCMDL"  "$PCOMM"
done
) 

此命令对当前正在运行的每个进程执行循环,并计算名称包含代理的环境变量。如果一行以开头8:,则表示您有 8 个包含此进程的环境变量。

相关内容