Ce exemple vise à mettre en place un reverse proxy qui redirigera les requêtes /admin vers le serveur web bo-srv et les requêtes / vers les serveurs frontaux.
On dispose des VMs suivantes :
- front-srv : 192.168.0.49
- bo-srv : 192.168.0.46
- rp-srv : 192.168.0.47
Le serveur rp-srv aura besoin de résoudre les noms d'hôtes des serveurs web, il faudra pour cela renseigner leurs correspondances dans le fichier /etc/hosts où avoir recours à un résolveur DNS (Installation et paramétrage d'un résolveur DNS avec Bind 9 sur Debian 7).
1 - Paramétrage d'Apache sur le frontal et le bo
Edition du fichier de configuration de ports pour spécifier le port 8080 pour les serveurs apache de front-srv et bo-srv :
nano /etc/apache2/ports.conf
Listen 8080
Redémarrage d'Apache :
service apache2 restart
Paramétrage des vhost :
- Sur bo-srv :
nano /etc/apache2/sites-available/bo-srv
<VirtualHost *:8080>
ServerName bo-srv
ServerAdmin admin@domain.tld
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- Sur front-srv :
nano /etc/apache2/sites-available/front-srv
<VirtualHost *:8080t>
ServerName front-srv
ServerAdmin admin@domain.tld
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
2 - Installation et paramétrage d'Nginx sur rp-srv
Installation des packets :
apt-get install nginx
Edition de la configuration :
nano /etc/nginx/nginx.conf
user www-data;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_comp_level 5;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/plain text/html text/css image/x-icon application/x-javascript;
gzip_vary on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Edition de proxy.conf :
nano /etc/nginx/conf.d/proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;
Edition de la configuration du site default :
nano /etc/nginx/sites-enabled/default
server {
listen 80;
server_name webapp.local;
access_log /var/log/webapp.access.log;
error_log /var/log/webapp.nginx_error.log debug;
location / {
proxy_pass http://front-srv:8080/;
}
location /admin {
proxy_pass http://bo-srv:8080/admin;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
}
Redémarrage d'Nginx :
service nginx restart
3 - Test
3 - Test
On va pourvoir tester dans le navigateur d'une machine cliente en appelant l'url de l'hôte virtuel du reverse proxy nginx :
http://webapp.local
Ne pas oublier de résoudre la FQDN par le fichier host où un résolveur DNS.