ip real con frontal proxy nginx, backend apache y wordpress Blackhold

Tabla de contenido

Por fin he encontrado la solución! otra de estas tareas pendientes que hacía que una instalación no funcionase como era esperado! en este caso me encuentro con dos frontales de nginx que actúan como proxy http y detrás de ellos está un wordpress sobre apache. Hace un tiempo, hice un post similar a éste, pero detrás estaba otro nginx.

Así que aquí dejo la solución.

Frontal nginx
En este caso tengo 2 ficheros, el de la configuración del dominio y otro con la configuración específica para los wordpress almacenado en el directorio snippets

# vi /etc/nginx/sites-available/lamardebits.org
server { listen 80; listen [::]:80; server_name lamardebits.org www.lamardebits.org; return 301 https://lamardebits.org$request_uri; #root /var/www/html/; include snippets/certbot.conf;
} server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name lamardebits.org; include snippets/certbot.conf; # Aquí s'inclou el servidor intern i la protecció específica de WP include snippets/wordpress10.conf; ssl_certificate /etc/letsencrypt/live/lamardebits.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/lamardebits.org/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_trusted_certificate /etc/letsencrypt/live/lamardebits.org/chain.pem;
}

Y la configuración específica para los wordpress

# vi /etc/nginx/snippets/wordpress10.conf
include conf.d/external-log.conf;
location / { proxy_pass http://172.31.0.145:6081; include proxy_params; location ~ \.php$ { proxy_pass http://172.31.0.145:6081; include proxy_params; location ~* wp\-login\.php { client_max_body_size 40M; proxy_pass http://172.31.0.145:6081; include proxy_params; include snippets/lmdb-protected.conf; } } proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 128; fastcgi_read_timeout 300; proxy_read_timeout 300; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; add_header X-Frame-Options SAMEORIGIN; }

La configuración de proxy de nginx la tengo así

# vi /etc/nginx/conf.d/proxy.conf
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
client_max_body_size 32M; proxy_read_timeout 1800;
proxy_connect_timeout 1800;
proxy_send_timeout 1800;
send_timeout 1800; 

Backend apache + wordpress

A continuación en el contenedor con el apache y el wordpress, lo primero será habilitar el módulo remoteip

# a2enmod remoteip
# service apache2 restart

El fichero de configuración lo dejaremos así

# vi /etc/apache2/conf-available/remoteip.conf
## Log format config
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded # Header config
RemoteIPHeader X-Real-IP
#RemoteIPHeader X-Client-IP
RemoteIPInternalProxy 127.0.0.1
RemoteIPTrustedProxy 172.31.0.0/16

En esta parte, he estado meses atascada por culpa de la línea RemoteIPHeader, que debe estar comentada.

RemoteIPInternalProxy es la ip de localhost 127.0.0.1

RemoteIPTrustedProxy el rango de IPs o IPs separadas por espacio de las IPs de los frontales de nginx

A continuación en el fichero de configuración de apache (puerto 80 ya que el https está en los frontales)

# vi /etc/apache2/sites-available/wordpress.conf
###############################################
# La Mar de Bits
###############################################
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/wp/ # This helps applications behind a proxy know that the pages # were originally requested over https # Prevents browser blocking content because of MIXED CONTENT SetEnvIf X-Forwarded-Proto https HTTPS=on <LocationMatch "/server-status|/phpfpm-status"> AllowOverride None </LocationMatch> <Directory "/var/www/wp"> Options -Indexes AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/wp.lmdb.error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/wp.lmdb.access.log combined env=!forwarded CustomLog ${APACHE_LOG_DIR}/wp.lmdb.access.log proxy env=forwarded RewriteEngine On RewriteOptions inherit
</VirtualHost>

Reiniciamos apache y cuando hagamos por ejemplo un comentario si todo es correcto ya debería salir la IP pública y no la IP del frontal de nginx.

Fuente obtenida de: https://blackhold.nusepas.com/2021/05/01/ip-real-con-frontal-proxy-nginx-backend-apache-y-wordpress/

INFORMACION DEL PUBLICADOR
Picture of Kamal Majaiti
Kamal Majaiti
Administrador de sistemas e informático por vocación.
COMPARTELO EN REDES
Publica un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.