Saltar al contenido principal

Nginx

Descripción general

En esta guía usaremos Nginx como proxy inverso para acceder al panel Remnawave. Apuntaremos un nombre de dominio a nuestro servidor, emitiremos un certificado SSL y configuraremos Nginx.

aviso

Necesitas tener un nombre de dominio registrado para continuar.

Apuntar el dominio a tu servidor

Comprueba la dirección IP de tu servidor. Es mejor usar una dirección IPv4 estática.

Ahora, necesitas apuntar tu nombre de dominio a esta dirección IP.

Por ejemplo, sería my-super-panel.com -> 193.122.122.122.

Hay dos formas de hacerlo:

  1. Usar un proveedor de DNS (p. ej. Cloudflare, Google Cloud, etc.)
  2. Usar un registrador (p. ej. Namecheap, etc.)

Proveedor DNS

Si usas Cloudflare, necesitas agregar un registro A/AAAA (para IPv4 e IPv6 respectivamente) a tus registros DNS.

Inicia sesión en tu cuenta de Cloudflare aquí y selecciona el dominio deseado.

En el lado izquierdo de la página, haz clic en DNS y luego en Records. Haz clic en Create record.
Establece el Type en A y el Name en @.

info

Si quieres usar subdominios, debes ingresar el nombre del subdominio (p. ej. panel) en el campo Name.

Ingresa la dirección IP de tu servidor en el campo IPv4 address y haz clic en Save.

Ahora debes esperar un momento para que se actualicen los registros DNS.

info

Hay una gran diferencia entre la nube amarilla (el dominio está siendo procesado por Cloudflare) y la nube gris (el dominio no está siendo procesado por Cloudflare) en el panel de control de Cloudflare.

Si Cloudflare funciona bien en tu región, es mejor procesar el dominio a través de Cloudflare. (Nube amarilla)

static

Algunos proveedores de DNS tienen una interfaz diferente, pero el proceso general es el mismo.

Emitir un certificado SSL

Ahora necesita emitir un certificado SSL. La forma más sencilla es usar acme.sh.

aviso

Esta guía solo cubre la emisión de certificado SSL para el dominio del panel.

Instalar dependencias

sudo apt-get install cron socat

Instalar acme.sh

info

Puede usar cualquier dirección de correo electrónico para emitir el certificado, pero se recomienda usar una válida.

Reemplace EMAIL con su dirección de correo electrónico.

curl https://get.acme.sh | sh -s email=EMAIL && source ~/.bashrc

Crear una carpeta para los certificados

mkdir -p /opt/remnawave/nginx && cd /opt/remnawave/nginx

Emitir un certificado

Reemplace DOMAIN con el nombre de dominio para el que desea emitir un certificado.

aviso

No use zonas de dominio: .ru, .su, .рф. Actualmente ZeroSSL no soporta estas zonas.

acme.sh --issue --standalone -d 'DOMAIN' --key-file /opt/remnawave/nginx/privkey.key --fullchain-file /opt/remnawave/nginx/fullchain.pem --alpn --tlsport 8443 --reloadcmd "docker exec remnawave-nginx nginx -s reload"
info

Asegúrese de que el puerto 8443 esté abierto en su servidor. Es necesario para la emisión del certificado.

acme.sh --install-cert -d 'DOMAIN' --key-file /opt/remnawave/nginx/privkey.key --fullchain-file /opt/remnawave/nginx/fullchain.pem --reloadcmd "docker exec remnawave-nginx nginx -s reload"

Esto muestra que el certificado ha sido emitido. Acme.sh se encargará de renovar automáticamente el certificado cada 60 días, solo asegúrese de que el puerto 8443 esté abierto (y no ocupado) en su servidor.

Configuración de Nginx

Configuración simple

Cree un archivo llamado nginx.conf en el directorio /opt/remnawave/nginx.

cd /opt/remnawave/nginx && nano nginx.conf

Pegue la siguiente configuración.

aviso

Por favor, reemplace REPLACE_WITH_YOUR_DOMAIN con su nombre de dominio.

Revise la configuración a continuación, busque las líneas resaltadas en rojo.

nginx.conf
upstream remnawave {
server remnawave:3000;
}

server {
server_name REPLACE_WITH_YOUR_DOMAIN;

listen 443 ssl reuseport;
listen [::]:443 ssl reuseport;
http2 on;

location / {
proxy_http_version 1.1;
proxy_pass http://remnawave;
proxy_set_header Host $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;
}

# SSL Configuration (Mozilla Intermediate Guidelines)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;

ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_certificate "/etc/nginx/ssl/fullchain.pem";
ssl_certificate_key "/etc/nginx/ssl/privkey.key";
ssl_trusted_certificate "/etc/nginx/ssl/fullchain.pem";

ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
resolver_timeout 2s;

# Gzip Compression
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/xhtml+xml
application/xml
font/eot
font/otf
font/ttf
image/svg+xml
text/css
text/javascript
text/plain
text/xml;
}

server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;

ssl_reject_handshake on;
}

Crear docker-compose.yml

Cree un archivo docker-compose.yml en el directorio /opt/remnawave/nginx.

cd /opt/remnawave/nginx && nano docker-compose.yml

Pegue la siguiente configuración.

docker-compose.yml
services:
remnawave-nginx:
image: nginx:1.28
container_name: remnawave-nginx
hostname: remnawave-nginx
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
- ./privkey.key:/etc/nginx/ssl/privkey.key:ro
restart: always
ports:
- '0.0.0.0:443:443'
networks:
- remnawave-network

networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true

Iniciar el contenedor

docker compose up -d && docker compose logs -f -t

Abrir el panel en el navegador

Abre el nombre de dominio configurado en el navegador y verás la página de inicio de sesión.

login-page

Solución de problemas