Instalación de Tengine en CentOS 7 con redirección forzada a HTTPS

Requisitos previos

Sistema operativo: CentOS 7.2 x64
Versión de Tengine: 2.2.0
Dirección IP de ejemplo: 192.168.1.100

Instalación de Tengine desde código fuente

1. Descarga de paquetes fuente

Navegue al directorio de trabajo y descargue las dependencias necesarias.

cd /opt/source
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
wget https://zlib.net/zlib-1.3.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
wget https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2
wget http://tengine.taobao.org/download/tengine-2.2.0.tar.gz
ls -l

2. Compilación e instalación de dependencias

Instale herramientas de desarrollo y compile cada paquete.

yum install -y gcc make autoconf

Compilación de pcre:

tar -xzf pcre-8.45.tar.gz
cd pcre-8.45
./configure --prefix=/opt/pcre
make && make install
cd ..

Compilación de zlib:

tar -xzf zlib-1.3.tar.gz
cd zlib-1.3
./configure --prefix=/opt/zlib
make && make install
cd ..

Compilación de openssl:

tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/opt/openssl --openssldir=/opt/openssl
make && make install
cd ..

Compilación de jemalloc (se requiere bzip2 para descomprimir):

yum install -y bzip2
tar -xjf jemalloc-5.3.0.tar.bz2
cd jemalloc-5.3.0
./autogen.sh
make && make install
cd ..

Configuración de enlaces de bibliotecas:

echo '/opt/pcre/lib/' > /etc/ld.so.conf.d/pcre.conf
echo '/opt/zlib/lib/' > /etc/ld.so.conf.d/zlib.conf
echo '/opt/openssl/lib/' > /etc/ld.so.conf.d/openssl.conf
ldconfig -v | grep -E "pcre|zlib|openssl"

3. Compilación de Tengine

Cree un usuario de sistema para el servicio y compile Tengine con soporte para SSL.

tar -xzf tengine-2.2.0.tar.gz
cd tengine-2.2.0
groupadd -g 80 nginx
useradd -u 80 -g 80 -s /sbin/nologin -M nginx

./configure \
--prefix=/opt/tengine \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre=/opt/source/pcre-8.45 \
--with-zlib=/opt/source/zlib-1.3 \
--with-openssl=/opt/source/openssl-1.1.1w \
--with-jemalloc

make && make install

echo 'export PATH=$PATH:/opt/tengine/sbin' > /etc/profile.d/tengine.sh
source /etc/profile.d/tengine.sh
tengine
netstat -tlnp | grep tengine

4. Configuración del servicio systemd

Cree un archivo de servicio para administrar Tengine con systemctl.

cat > /etc/systemd/system/tengine.service <<EOF
[Unit]
Description=Tengine HTTP Server
After=network.target

[Service]
Type=forking
PIDFile=/opt/tengine/logs/tengine.pid
ExecStartPre=/opt/tengine/sbin/tengine -t
ExecStart=/opt/tengine/sbin/tengine
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target
EOF

tengine -s stop
systemctl daemon-reload
systemctl start tengine
systemctl enable tengine

Configuración de SSL y forzado de HTTPS

1. Gneeración de certificados SSL autofirmados

Genere una clave privada y un certificado para el dominio de ejemplo.

mkdir -p /etc/ssl/midominio
cd /etc/ssl/midominio
openssl req -new -newkey rsa:2048 -sha256 -nodes \
-out midominio.csr \
-keyout midominio.key \
-subj "/C=ES/ST=Madrid/L=Madrid/O=MiEmpresa/OU=TI/CN=midominio.com"

openssl x509 -req -days 365 \
-in midominio.csr \
-signkey midominio.key \
-out midominio.crt

2. Configuración de Tengine para redirección HTTPS

Edite el archivo de configuración principal para redirigir todo el tráfico HTTP a HTTPS.

cat /opt/tengine/conf/nginx.conf
# Contenido relevante:
http {
    server {
        listen 80;
        server_name midominio.com;
        return 301 https://$host$request_uri;
    }
    include vhost/*.conf;
}

Cree un archivo de configuración para el sitio HTTPS.

mkdir -p /opt/tengine/conf/vhost
cat > /opt/tengine/conf/vhost/ssl.conf <<EOF
server {
    listen 443 ssl http2;
    server_name midominio.com;
    
    ssl_certificate /etc/ssl/midominio/midominio.crt;
    ssl_certificate_key /etc/ssl/midominio/midominio.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    
    location / {
        root /opt/tengine/html/ssl_site;
        index index.html;
    }
}
EOF

mkdir -p /opt/tengine/html/ssl_site
echo "Bienvenido a midominio.com" > /opt/tengine/html/ssl_site/index.html
echo "192.168.1.100 midominio.com" >> /etc/hosts

Aplique la configuración y reinicie el servicio.

tengine -t
tengine -s stop && tengine
systemctl status tengine
netstat -tlnp | grep -E "80|443"

3. Método alternativo con metaetiqueta HTML

En lugar de usar la directiva de reescritura, puede implementar una redirección mediante una metaetiqueta en HTML.

# Comentar la línea de redirección en nginx.conf
# return 301 https://$host$request_uri;

# Crear página de redirección
cat > /opt/tengine/html/index.html <<EOF

<html>
<head>
    <meta http-equiv="refresh" content="0;url=https://midominio.com/">
</head>
<body>
    Redireccionando...
</body>
</html>
EOF

Reinicie Tengine para aplicar los cambios y verifique el acceso mediante un navegador web.

Etiquetas: Tengine CentOS 7 SSL HTTPS Nginx

Publicado el 6-10 08:33