Aller à la recherche

Nginx en mode reverse proxy pour apache

  • Rappel sur l'installation d'apache2 et nginx sous FreeBSD
  • Configuration nginx pour ne servir que le contenu statique
  • Configuration nginx pour renvoyer tout ce qui est dynamique à apache

IReverse proxy nginx et apache sous FreeBSD

Installation des serveurs web

Vous pouvez consulter pour plus de détail les billets "Installer nginx sous FreeBSD" ou "[Installer apache 2.4 sous FreeBSD|https://www.binsp.net/?post/installer-apache-2-4-php7-freebsd" pour plus de détail sur l'installation.

Configurons nginx pour ne servir que du contenu statique

Nous allons reprendre notre domaine example.com et coller un sous domaine static.example.com, afin que les images, les css et js soit délivrés depuis celui-ci. cd /usr/local/etc/nginx/sites Nous allons modifier notre fichier /usr/local/etc/nginx/sites/example.com comme ceci

server {

	###########################
	 # Virtual Host STATIC.EXAMPLE.COM

	listen 192.168.100.80:80;
	server_name  static.example.com;

	location / {
		root 	/srv/www/example.com/static;
		index	index.html;
	}

	location ~\.(css|js)$ {
 		gzip_static     on;
		gzip_vary       on;
		root        /srv/www/example.com/static;
		expires      8d;
		add_header  Pragma public;
		add_header  Cache-Control "public";
	}

	location ~\.(jpg|png|jpeg|gif) {
		root 	/srv/www/example.com/static;
		expires 	14d;
		add_header Pragma public;
		add_header Cache-Control "public";
	}
}

Nginx va renvoyer toute la partie dynamique à apache

Ajoutons ceci à notre fichier "example.com"

server {

	###########################
	 # Virtual Host WWW.EXAMPLE.COM

	listen 192.168.100.80:80;
	server_name www.example.com example.com;

	# On définit une entête X-Real-IP avec l'ip client
	# On envoie toutes les requêtes au serveur apache qui va écouter sur le port 9080
	location / {
		proxy_set_header	X-Real-IP	$remote_addr;
		proxy_set_header 	Host 	$host;
		proxy_pass 	http://192.168.100.80:9080;
	}
}

Apache attend les requêtes d'nginx

Nous allons maintenant modifier le fichier apache afin qu'il écoute sur le port 9080 pour exécuter les requêtes qui lui seront envoyées par nginx. cd /usr/local/etc/apache24/ Modifions tout d'abord le port d'écoute du serveur dans le fichier httpd.conf

Listen 192.168.100.80:9080
ServerName 192.168.100.80:9080

Maintenant voyons le fichier /usr/local/etc/apache/sites/examples.com

<VirtualHost 192.168.100.80:9080>
	ServerAdmin   	admin@example.com
	DocumentRoot 	"/srv/www/example.com/htdocs"
	ServerName	www.example.com example.com

	ErrorLog 		/srv/log/http_error.log

	DirectoryIndex	index.php

	<FilesMatch "\.php$">
	    SetHandler application/x-httpd-php
	</FilesMatch>
	<FilesMatch "\.phps$">
	    SetHandler application/x-httpd-php-source
	</FilesMatch>

	<Directory "/srv/www/example.com/htdocs">
		Options -FollowSymLinks
		AllowOverride None
		Require all granted

		AddOutputFilterByType DEFLATE text/html

	</Directory>

</VirtualHost>	

Démarrons nos services apache et nginx et vérifions qu'ils écoutent bien sur le bon port service apache24 restart service nginx restart sockstat -4l

USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
www      httpd      97520 3  tcp4   192.168.100.80:9080   *:*
www      httpd      97519 3  tcp4   192.168.100.80:9080   *:*
www      httpd      97518 3  tcp4   192.168.100.80:9080   *:*
www      httpd      97517 3  tcp4   192.168.100.80:9080   *:*
www      httpd      97516 3  tcp4   192.168.100.80:9080   *:*
root     httpd      97515 3  tcp4   192.168.100.80:9080   *:*
www      nginx      97495 6  tcp4   *:80                  *:*
root     nginx      97494 6  tcp4   *:80                  *:*

Créons notre arborescence mkdir -p /srv/www/example.com/htdocs/static/{css,js,imgs} Créons notre fichier index.php cat > /srv/www/example.com/htdocs/index.php <<EOF

<html>
	<head>
		<link rel="stylesheet" href="http://static.example.com/css/main.css" />
	</head>
	<body>
		<img src="http://static.example.com/imgs/freebsd.jpg" alt="FreeBSD" />
		<?php 
			 echo '<h1>it works! Nginx -> Apache with php</h1>';
		 ?>
		 <script type="text/javascript" src="http://static.example.com/js/main.js"></script>
	</body>
</html>

Nous ajoutons à notre fichier /etc/hosts côté client 192.168.100.80 static.example.com

nginx s'occupe du statique et apache du dynamique

Voilà, on pourra faire évoluer cette configuration plus tard.

La discussion continue ailleurs

URL de rétrolien : https://www.binsp.net/?trackback/27

Fil des commentaires de ce billet

Page top