GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment installer nginx en tant que proxy inverse pour Apache sur Ubuntu 16.04

Ce tutoriel montre comment vous pouvez configurer nginx en tant que proxy inverse devant un serveur Web Apache2 sur Ubuntu 16.04. nginx (prononcé "moteur x") est un serveur HTTP gratuit, open source et hautes performances. nginx est connu pour sa stabilité, son riche ensemble de fonctionnalités, sa configuration simple et sa faible consommation de ressources.

1 Remarque préliminaire

Dans ce tutoriel, j'utilise le nom d'hôte server1.example.com avec l'adresse IP 192.168.1.100. Ces paramètres peuvent différer pour vous, vous devez donc les remplacer le cas échéant.

Je suppose que vous avez un vhost Apache existant (j'utiliserai le vhost apache par défaut dans ce tutoriel) qui écoute sur le port 80 sur l'adresse IP 192.168.1.100 que vous souhaitez utiliser par proxy via nginx. Je vais utiliser le tutoriel Ubuntu LAMP comme base. Veuillez noter que ce didacticiel couvre uniquement http, pas https (SSL).

2 Configurer Apache

La première chose que nous devons faire est de configurer notre vhost Apache pour qu'il écoute sur localhost (127.0.0.1) sur un port inutilisé autre que 80 (par exemple 8000). Ouvrez /etc/apache2/ports.conf...

nano /etc/apache2/ports.conf

... et modifiez les lignes NameVirtualHost et Listen pour que le port 80 utilise le port 8000 :

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 8000

<IfModule ssl_module>
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Ouvrez ensuite le fichier de configuration vhost (par exemple /etc/apache2/sites-available/000-default.conf)...

nano /etc/apache2/sites-available/000-default.conf

... et modifiez la ligne pour utiliser l'adresse IP 127.0.0.1 et le port 8000 :

<VirtualHost 127.0.0.1:8000>
[...]

Nous allons configurer nginx en tant que proxy transparent, c'est-à-dire qu'il transmettra l'adresse IP de l'utilisateur d'origine dans un champ appelé X-Forwarded-For au backend Apache. Bien sûr, le backend Apache doit enregistrer l'adresse IP de l'utilisateur d'origine dans ses journaux d'accès au lieu de l'adresse IP de nginx (127.0.0.1). Il existe deux façons d'y parvenir :

1) Nous pouvons modifier la ligne LogFormat dans /etc/apache2/apache2.conf et remplacer %h par %{X-Forwarded-For}i :

nano /etc/apache2/apache2.conf
[...]
#LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[...]

2) Sur Debian/Ubuntu, on peut installer le module Apache libapache2-mod-rpaf qui se charge de logger la bonne adresse IP :

apt-get -y install libapache2-mod-rpaf

Après toutes ces modifications, redémarrez Apache :

service apache2 restart

3 Configuration de nginx

Si nginx n'est pas déjà installé, installez-le comme suit :

apt-get -y install nginx

Créez ses liens de démarrage système et assurez-vous qu'il est démarré :

systemctl enable nginx.service
service nginx restart

Il devrait maintenant écouter sur le port 80.

Certains paramètres de proxy standard se trouvent dans le fichier /etc/nginx/proxy_params :

nano /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

Comme nous inclurons ce fichier plus tard dans la partie proxy de notre vhost nginx pour example.com, vous voudrez peut-être ajouter d'autres directives de proxy à ce fichier si vous le souhaitez, par ex. comme suit :

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 100M; client_body_buffer_size 1m; proxy_intercept_errors on; proxy_buffering on; proxy_buffer_size 128k; proxy_buffers 256 16k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_max_temp_file_size 0; proxy_read_timeout 300;

Modifiez maintenant l'hôte virtuel par défaut pour nginx :assurez-vous qu'il utilise la même racine de document que l'hôte virtuel Apache pour example.com (par exemple, /var/www/html) afin que nginx puisse fournir des fichiers statiques directement sans transmettre la requête à Apache :

nano /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
}
}

Il s'agit d'une configuration très simple qui transmettra toutes les requêtes à Apache.

Rechargez nginx pour que les modifications prennent effet :

service nginx reload

Vous pouvez maintenant saisir le nom d'hôte du serveur ou l'adresse IP 192.168.1.100 dans votre navigateur, et vous devriez voir le site Web par défaut d'Apache, mais cette fois via nginx.

Comme je l'ai déjà dit, il s'agit d'une configuration très simple qui transmet toutes les requêtes à Apache. Mais comme nginx fournit des fichiers statiques beaucoup plus rapidement (comme JavaScript, CSS, images, fichiers PDF, fichiers HTML statiques, etc.) qu'Apache, il est judicieux de laisser nginx servir ces fichiers directement. Cela peut être fait en ajoutant un nouvel emplacement pour ces fichiers, par ex. comme suit :

server {
       listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { } }

Recharger nginx :

service nginx reload

Vous pouvez même définir un en-tête HTTP Expires pour ces fichiers afin que les navigateurs mettent ces fichiers en cache (voir Make Browsers Cache Static Files On nginx pour plus de détails) :

server {
       listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { expires 30d; } }

Nous pouvons maintenant pousser cette configuration un peu plus loin en laissant nginx traiter autant de requêtes qu'il peut répondre et ne transmettre que les requêtes restantes plus les fichiers PHP à Apache :

server {
       listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { expires 30d; } location @proxy { proxy_pass http://127.0.0.1:8000; include /etc/nginx/proxy_params; } location ~* \.php$ { proxy_pass http://127.0.0.1:8000; include /etc/nginx/proxy_params; } }

Recharger nginx :

service nginx reload

Bien sûr, vous pouvez affiner encore plus cette configuration, par exemple en utilisant le nginx proxy_cache (si votre application le permet - par exemple, vous devez vous assurer que les captchas ou les paniers ne sont pas mis en cache, et que les utilisateurs connectés obtenez toujours une nouvelle copie de la page) ou si votre application a un cache de page complète - nginx pourrait accéder directement au cache de page complète dans un tel cas (vous pouvez trouver un exemple dans ce tutoriel :Comment accélérer Drupal 7.7 avec Boost et nginx (Debian Squeeze)).

  • nginx :http://nginx.net/
  • Apache :http://httpd.apache.org/
  • Ubuntu :http://www.ubuntu.com/

Ubuntu
  1. Comment configurer Nginx en tant que proxy inverse sur Ubuntu 20.04

  2. Comment installer Odoo 10 sur Ubuntu 16.04 avec Apache comme proxy inverse

  3. Comment installer Odoo 11 sur Ubuntu 16.04 avec Nginx en tant que proxy inverse

  4. Comment installer Odoo 12 sur Ubuntu 18.04 avec Apache comme proxy inverse

  5. Comment installer Odoo 14 sur Ubuntu 20.04 avec Apache comme proxy inverse

Comment configurer Nginx en tant que proxy inverse pour Apache sur Debian 11

Comment installer Rocket.chat avec le proxy inverse nginx sur Ubuntu 20.04

Comment configurer Nginx en tant que proxy inverse pour Apache sur Debian 11

Comment installer Nginx sur Ubuntu 15.04

Comment configurer Nginx en tant que proxy inverse pour Apache sur Ubuntu 18.04 VPS

Comment installer NGINX en tant que proxy inverse pour Apache sur Ubuntu 18.04