Diario

Obtener IP del cliente del balanceador de carga AWS ELB y registrarlo en registros

1 Mins read

AWS
ELB
EC2
Apache 2.4.39

Cuando se utiliza un balanceador de carga, los registros del servidor web como Apache solo muestran la IP del ELB, y no aparece la dirección IP del cliente original.

En el caso de AWS ELB, la IP del cliente se encuentra en el encabezado «X-Forwarded-For», por lo que es necesario configurar el servidor web para registrar este valor.

Ejemplo de adición a Apache conf

LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
Read more
Diario

AWS ELB WordPress SSL https Configuración con Load Balancer

3 Mins read

AWS
ELB (Load Balancer)
SSL
Apache 2.4.39
Wordpress 5.1

■Entorno de comunicación
PC Cliente

(port:443)

ELB[Configuración de certificado SSL][Regla ELB redirige acceso externo 80 a 443]

(port:80)

EC2(Solo necesita configuración port 80 dentro de EC2)

■Problema
・Acceso desde navegador a https principal (443)
・Dentro de EC2 está configurado como entorno 80, así que WordPress genera URLs en header (css, etc) como http (80)
・Cuando el navegador encuentra http (80) diferente de la URL principal en header, lo detiene como error de seguridad
・El html no se muestra correctamente en el navegador

■Patrón solo con rewrite en .htaccess

# BEGIN K.Miyakoshi

# AWS ELBからのアクセスをHTTPSへ変更する
SetEnvIf X-Forwarded-Proto ^https$ HTTPS=on

# httpアクセスをhttpsへリダイレクトする
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

# END K.Miyakoshi

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

■Patrón con configuración completa en vhost.conf como «conf.d»

#============================================
# ELB Registro común K.Miyakoshi
#============================================
# AWS ELB compatible [%{X-Forwarded-For}i] añadido para obtener IP del cliente
LogFormat "%{X-Forwarded-For}i:%{X-Forwarded-Port}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" elb-accesslog
ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %{X-Forwarded-For}i:%{X-Forwarded-Port}i %a] %M% ,\ referer\ %{Referer}i"

# AWS ELB compatible Excluir acceso de health check del registro normal
SetEnvIf User-Agent "ELB-HealthChecker.*" nolog
# AWS ELB compatible Configuración para generar acceso de health check en archivo de registro separado
SetEnvIf User-Agent "ELB-HealthChecker.*" elb-log
# Excluir img, js, etc del registro
SetEnvIf Request_URI "\.(gif|jpg|png|ico|jpeg|js|css)$" nolog

# Configuración de registro normal
CustomLog logs/access_log elb-accesslog env=!nolog
ErrorLog logs/error_log

#============================================
# ELB WordPress Solución redireccionamiento https(443)→http(80)
#============================================
# Si AWS ELB está recibiendo en https, habilitar HTTPS
SetEnvIf X-Forwarded-Proto ^https$ HTTPS=on

# Redireccionamiento de acceso http a https
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
	RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

#============================================
# default
# Se utiliza para health check de ELB (Alias también es válido)
#============================================
<VirtualHost _default_:80>
	ServerName _default_:80
	ServerAdmin admin@hoge.com

	DocumentRoot "/opt/lampp/htdocs"
	<Directory "/opt/lampp/htdocs">
		AllowOverride All
		Options FollowSymLinks
		Require all granted

		Options +IncludesNoExec
		AddOutputFilter INCLUDES html
	</Directory>

	CustomLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/htdocs/access_%Y%m%d.log 86400 540" elb-accesslog env=!nolog
	CustomLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/htdocs/elb_%Y%m%d.log 86400 540" elb-accesslog env=elb-log
	ErrorLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/htdocs/error_%Y%m%d.log 86400 540"

</VirtualHost>

#============================================
# taro.hoge.com
#============================================
<VirtualHost *:80>
	ServerName taro.hoge.com
	ServerAdmin admin@hoge.com

	DocumentRoot "/opt/lampp/taro"
	<Directory "/opt/lampp/taro">
		AllowOverride All
		Options FollowSymLinks
		Require all granted
	</Directory>

	CustomLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/taro/access_%Y%m%d.log 86400 540" elb-accesslog env=!nolog
	# Si está configurado en AWS ELB vinculado al DNS [taro.hoge.com] se genera el registro
	CustomLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/taro/elb_%Y%m%d.log 86400 540" elb-accesslog env=elb-log
	ErrorLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/taro/error_%Y%m%d.log 86400 540"

</VirtualHost>

#============================================
# jiro.hoge.com
#============================================
<VirtualHost *:80>
	ServerName jiro.hoge.com
	ServerAdmin admin@hoge.com

	DocumentRoot "/opt/lampp/jiro"
	<Directory "/opt/lampp/jiro">
		AllowOverride All
		Options FollowSymLinks
		Require all granted
	</Directory>

	CustomLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/jiro/access_%Y%m%d.log 86400 540" elb-accesslog env=!nolog
	# Si está configurado en AWS ELB vinculado al DNS [jiro.hoge.com] se genera el registro
	CustomLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/jiro/elb_%Y%m%d.log 86400 540" elb-accesslog env=elb-log
	ErrorLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/jiro/error_%Y%m%d.log 86400 540"

</VirtualHost>

#============================================
Read more
Diario

Configuración inicial de instancia AWS EC2 Amazon Linux 2 AMI 2.0 con soporte de idioma japonés

1 Mins read

Actualización de bibliotecas

sudo yum update

Configuración de hora – Establecer zona horaria Asia/Tokio
sudo timedatectl
sudo timedatectl set-timezone Asia/Tokyo

Configuración de idioma japonés #localectl ja_JP.utf8
localectl
sudo localectl set-locale LANG=ja_JP.utf8
localectl
cat /etc/locale.conf
sudo localectl set-keymap jp106
cat /etc/vconsole.conf

Herramientas de desarrollo

Instalar bibliotecas necesarias para compilación
sudo yum -y groupinstall base "Development tools"

Instalar el comando nkf necesario para procesamiento de japonés
wget "https://ja.osdn.net/dl/nkf/nkf-2.1.4.tar.gz" -O nkf-2.1.4.tar.gz
tar zxvf nkf-2.1.4.tar.gz
cd nkf-2.1.4/
sudo make && sudo make install
cd ..
rm -rf nkf-2.1.4
rm -f nkf-2.1.4.tar.gz
sudo ln -s /usr/local/bin/nkf /usr/bin/nkf

Configuración automática de hora y actualización

sudo yum -y install chrony

sudo vi /etc/chrony.conf

#------------------------------------
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# En comentario
# pool 2.amazon.pool.ntp.org iburst

# Agregar
server ntp.nict.jp iburst
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst
#------------------------------------

sudo systemctl restart chronyd
sudo systemctl enable chronyd

#Verificar
sudo chronyc sources

mailx

Entorno de correo que siempre se necesita. Esta AMI no viene con mailx preinstalado, así que lo instalamos para uso administrativo.
※sendmail [postfix] viene preinstalado

# Trabajar como root
sudo su -

# No hay módulo, así que el comando mail no funciona. Instalar
yum install mailx

# Eliminar mails antiguos a root por si acaso
sed -i '/^root:/d' /etc/aliases

# Mail a root
echo "root: hoge@hogetaro.com" >> /etc/aliases

# Aplicar cambios
newaliases

# Prueba
echo testtaro | mail root

# Volver al usuario
exit

※AWS gestiona estrictamente el puerto de envío de correo «25». Si se envía una cantidad considerable de mensajes externamente, existe la posibilidad de ser bloqueado. En ese caso, siga el proceso de aprobación.
Para configurar un servidor SMTP adecuado, se requiere aprobación.
https://forums.aws.amazon.com/thread.jspa?threadID=153660

telnet

telnet es muy útil. Instálelo si lo prefiere.

sudo yum -y install telnet
Read more