跳到主要内容

Nginx

概述

本指南将使用 Nginx 作为反向代理来访问 Remnawave 面板。 我们将把域名指向服务器,颁发 SSL 证书并配置 Nginx。

注意

您需要拥有注册的域名才能继续。

将域名指向您的服务器

检查您的服务器 IP 地址。最好使用静态 IPv4 地址。

现在,您需要将域名指向此 IP 地址。

例如:my-super-panel.com -> 193.122.122.122

有两种方法可以做到这一点:

  1. 使用 DNS 提供商(例如 Cloudflare、Google Cloud 等)
  2. 使用注册商(例如 Namecheap 等)

DNS 提供商

如果您使用 Cloudflare,需要将 A/AAAA 记录(分别用于 IPv4 和 IPv6)添加到您的 DNS 记录。

此处登录您的 Cloudflare 账户并选择所需的域名。

在页面左侧,点击 DNS,然后点击 Records。点击 Create record
Type 设置为 A,将 Name 设置为 @

信息

如果要使用子域名,应在 Name 字段中输入子域名(例如 panel)。

IPv4 address 字段中输入您的服务器 IP 地址,然后点击 Save

现在需要等待一段时间让 DNS 记录更新。

信息

Cloudflare 控制面板中的黄色云(域名通过 Cloudflare 代理)和灰色云(域名未通过 Cloudflare 代理)之间有很大区别。

如果 Cloudflare 在您的地区运行良好,最好通过 Cloudflare 代理域名。(黄色云)

static

一些 DNS 提供商有不同的界面,但整体过程是相同的。

颁发 SSL 证书

现在需要颁发 SSL 证书。最简单的方式是使用 acme.sh

注意

本指南只涵盖为面板域名颁发 SSL 证书。

安装依赖

sudo apt-get install cron socat

安装 acme.sh

信息

可以使用任何电子邮件地址颁发证书,但建议使用有效地址。

EMAIL 替换为您的电子邮件地址。

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

创建证书目录

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

颁发证书

DOMAIN 替换为您要颁发证书的域名。

注意

不要使用以下域区:.ru、.su、.рф。ZeroSSL 目前不支持这些区域。

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"
信息

请确保服务器上的 8443 端口已开放。颁发证书需要此端口。

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"

这表明证书已颁发。acme.sh 将每 60 天自动续期,只需确保服务器上 8443 端口保持开放(且未被占用)。

Nginx 配置

简单配置

/opt/remnawave/nginx 目录中创建名为 nginx.conf 的文件。

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

粘贴以下配置。

注意

请将 REPLACE_WITH_YOUR_DOMAIN 替换为您的域名。

查看下面的配置,注意红色高亮行。

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

创建 docker-compose.yml

/opt/remnawave/nginx 目录中创建 docker-compose.yml 文件。

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

粘贴以下配置。

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

启动容器

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

在浏览器中打开面板

在浏览器中打开配置的域名,您将看到登录页面。

login-page

故障排除