Proxy Inferno

Proxy Inferno

If like me you are or have been confronted with corporate proxies bullshit and whatnot, you might understand this article's title. I cannot even count the amount of time I have lost trying to make things work, fiddling, googling, etc. After running into so many walls, I decided to document my journey through Proxy Hell, one of the missing circles of Hell as described in Dante's Inferno. This list isn't exhaustive but represents the many configurations I had to set up in my former position. Hopefully, it will be of use to you.

apt

Create a new file in /etc/apt/apt.conf.d/ And add the following lines in the file proxy.conf. Create it if it doesn't exist.

Acquire::http::Proxy "<http://user:password@proxy.server>:port/";
Acquire::https::Proxy "<http://user:password@proxy.server>:port/";

git

git config --global http.proxy <http://proxyUsername:proxyPassword@proxy.server.com>:port
git config --global https.proxy <https://proxyUsername:proxyPassword@proxy.server.com>:port

npm

npm config set proxy "<http://"username:password"@proxy.big-corp.com>"
npm config set https-proxy "<http://"username:password"@proxy.big-corp.com>"

If you're running nodejs INSIDE a Docker container you might have to set the proxy for the npm running INSIDE the container before running npm install. Otherwise the install just won't work when building your containers.

Dockerfile

FROM node:14.2.0

ARG HTTP_PROXY

WORKDIR /server
COPY package*.json ./
RUN npm config set proxy $HTTP_PROXY
RUN npm install

This line: ARG HTTP_PROXY declares a docker variable that you can pass when building your container. The RUN npm config set proxy $HTTP_PROXY line sets the proxy for the npm instance running in your container.

Edit your docker-compose file

    build:
      context: .
      args:
        HTTP_PROXY: ${HTTP_PROXY}

It has to be under the build section. Here I set the proxy by calling my machine's environment variable. You can also hardcode the proxy value but it's not really safe.

    build:
      context: .
      args:
        HTTP_PROXY: <http://"username:password"@proxy.big-corp.com>

curl

Edit or create the file located at ~/.curlrc And add this line :

proxy = <http://username:password@ip>:port