GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar nginx como proxy inverso para Apache en Ubuntu 16.04

Este tutorial muestra cómo puede configurar nginx como un proxy inverso frente a un servidor web Apache2 en Ubuntu 16.04. nginx (pronunciado "motor x") es un servidor HTTP gratuito, de código abierto y de alto rendimiento. nginx es conocido por su estabilidad, rico conjunto de características, configuración simple y bajo consumo de recursos.

1 nota preliminar

En este tutorial, utilizo el nombre de host server1.example.com con la dirección IP 192.168.1.100. Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda.

Supongo que tiene un vhost de Apache existente (usaré el vhost predeterminado de apache en este tutorial) que está escuchando en el puerto 80 en la dirección IP 192.168.1.100 que desea usar como proxy a través de nginx. Usaré el tutorial LAMP de Ubuntu como base. Tenga en cuenta que este tutorial solo cubre http, no https (SSL).

2 Configuración de Apache

Lo primero que tenemos que hacer es configurar nuestro Apache vhost para escuchar en localhost (127.0.0.1) en un puerto no utilizado que no sea 80 (por ejemplo, 8000). Abra /etc/apache2/ports.conf...

nano /etc/apache2/ports.conf

... y modifique las líneas NameVirtualHost y Listen para que el puerto 80 use el puerto 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>

A continuación, abra el archivo de configuración de vhost (por ejemplo, /etc/apache2/sites-available/000-default.conf)...

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

... y cambie la línea para usar la dirección IP 127.0.0.1 y el puerto 8000:

<VirtualHost 127.0.0.1:8000>
[...]

Configuraremos nginx como un proxy transparente, es decir, pasará la dirección IP del usuario original en un campo llamado X-Forwarded-For al backend Apache. Por supuesto, Apache debe registrar la dirección IP del usuario original en sus registros de acceso en lugar de la dirección IP de nginx (127.0.0.1). Hay dos formas de lograr esto:

1) Podemos modificar la línea LogFormat en /etc/apache2/apache2.conf y reemplazar %h con %{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) En Debian/Ubuntu, podemos instalar el módulo Apache libapache2-mod-rpaf que se encarga de registrar la dirección IP correcta:

apt-get -y install libapache2-mod-rpaf

Después de todos estos cambios, reinicie Apache:

service apache2 restart

3 Configuración de nginx

Si nginx aún no está instalado, instálelo de la siguiente manera:

apt-get -y install nginx

Cree sus enlaces de inicio del sistema y asegúrese de que esté iniciado:

systemctl enable nginx.service
service nginx restart

Ahora debería estar escuchando en el puerto 80.

Algunos parámetros de proxy estándar están en el archivo /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;

Como incluiremos ese archivo más adelante en la parte de proxy de nuestro nginx vhost para example.com, es posible que desee agregar más directivas de proxy a ese archivo si lo desea, p. de la siguiente manera:

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;

Ahora modifique el vhost predeterminado para nginx; asegúrese de que use la misma raíz de documento que Apache vhost para example.com (por ejemplo, /var/www/html) para que nginx pueda entregar archivos estáticos directamente sin pasar la solicitud a 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;
}
}

Esta es una configuración muy simple que enviaría todas las solicitudes a Apache.

Vuelva a cargar nginx para que los cambios surtan efecto:

service nginx reload

Ahora puede escribir el nombre de host del servidor o la IP 192.168.1.100 en su navegador, y debería ver el sitio web predeterminado de Apache, pero esta vez entregado a través de nginx.

Como dije antes, esta es una configuración muy simple que envía todas las solicitudes a Apache. Pero debido a que nginx entrega archivos estáticos mucho más rápido (como JavaScript, CSS, imágenes, archivos PDF, archivos HTML estáticos, etc.) que Apache, es una buena idea dejar que nginx entregue estos archivos directamente. Esto se puede hacer agregando una nueva ubicación para estos archivos, p. de la siguiente manera:

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)$ { } }

Recargar nginx:

service nginx reload

Incluso puede configurar un encabezado HTTP Expires para estos archivos para que los navegadores almacenen en caché estos archivos (consulte Hacer que los navegadores almacenen en caché archivos estáticos en nginx para obtener más detalles):

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; } }

Ahora podemos llevar esta configuración un paso más allá al permitir que nginx sirva tantas solicitudes como pueda y solo pase las solicitudes restantes más los archivos PHP a 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; } }

Recargar nginx:

service nginx reload

Por supuesto, puede ajustar esta configuración aún más, por ejemplo, utilizando nginx proxy_cache (si su aplicación lo permite; por ejemplo, debe asegurarse de que las capturas de pantalla o los carritos de compras no se almacenen en caché, y que los usuarios registrados siempre obtenga una copia nueva de la página) o si su aplicación tiene un caché de página completa, nginx podría acceder directamente al caché de página completa en tal caso (puede encontrar un ejemplo en este tutorial:Cómo acelerar Drupal 7.7 con Boost y nginx (Debian Squeeze)).

4 Enlaces

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

Ubuntu
  1. Cómo configurar Nginx como proxy inverso en Ubuntu 20.04

  2. Cómo instalar Odoo 10 en Ubuntu 16.04 con Apache como proxy inverso

  3. Cómo instalar Odoo 11 en Ubuntu 16.04 con Nginx como proxy inverso

  4. Cómo instalar Odoo 10 en Ubuntu 16.04 con Nginx como proxy inverso

  5. Cómo instalar Flectra en Ubuntu 20.04 con Nginx como proxy inverso

Cómo configurar Nginx como proxy inverso para Apache en Debian 11

Cómo instalar Rocket.chat con proxy inverso nginx en Ubuntu 20.04

Cómo configurar Nginx como proxy inverso para Apache en Debian 11

Cómo instalar Nginx en Ubuntu 15.04

Cómo configurar Nginx como proxy inverso para Apache en Ubuntu 18.04 VPS

Cómo instalar NGINX como proxy inverso para Apache en Ubuntu 18.04