Forward Proxy
L'esercizio è simile a quello del Forward Proxy di Apache.
Creazione della directory di esercizio:
cd ~/ex
mkdir 03net2-ccli-cproxy-cweb
cd 03net2-ccli-cproxy-cweb
Creazione dello scaffolding:
mkdir ccli cproxy cweb
touch ccli/Dockerfile docker-compose.yml
tree
Il client ccli
rimane quello del precedente esercizio:
vim ccli/Dockerfile
FROM alpine:3.7
MAINTAINER John Smith <john@stormforce.ac>
RUN apk --update add --no-cache openssh tcpdump curl
CMD ["/bin/sleep","1000000"]
Il cproxy
sarà un'immagine nginx:alpine
. Il server web target rimane un'immagine httpd:2.4-alpine
, come in precedenza.
Creaiamo un volume docker per la persistenza della configurazione:
docker volume create ngproxy-conf
Il docker-compose.yml
è:
vim docker-compose.yml
version: '3.6'
services:
one:
build: ccli
image: ccli
container_name: one
hostname: one
cap_add:
- ALL
networks:
net1:
ipv4_address: 192.168.101.11
two:
image: nginx:alpine
container_name: two
hostname: two
cap_add:
- ALL
volumes:
- ngproxy-conf:/etc/apache2
networks:
net1:
ipv4_address: 192.168.101.10
net2:
ipv4_address: 192.168.102.10
three:
image: httpd:2.4-alpine
container_name: three
hostname: three
cap_add:
- ALL
networks:
net2:
ipv4_address: 192.168.102.12
networks:
net1:
name: net1
ipam:
driver: default
config:
- subnet: 192.168.101.0/24
net2:
name: net2
ipam:
driver: default
config:
- subnet: 192.168.102.0/24
volumes:
ngproxy-conf:
external: true
Partenza del progetto:
docker compose up -d
Collegamento al server nginx:
docker exec -ti two sh
Nella directory di configurazione:
cd /etc/nginx
Modifichiamo il file di configurazione di default:
vi conf.d/default.conf
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://$http_host$uri$is_args$args;
}
}
La direttiva proxy_pass
abilita il server come Forward Proxy.
La stringa http://$http_host$uri$is_args$args
invia al server downstream la stessa URI che ha ricevuto dal client.
I componenti sono:
$http_host
- URL della richiesta originale$uri
- path della richiesta originale$is_args
- query string della richiesta originale$args
- altri argomenti della richiesta orinale
Testare la configurazione col comando:
nginx -t
Restartare il server col comando:
nginx -s reload
Uscire:
exit
Connettersi a one e provare se il proxy funziona:
docker exec -ti one sh
export http_proxy=http://192.168.101.10:8080
curl http://192.168.102.12