본문으로 건너뛰기

Nginx

개요

이 가이드에서는 Remnawave 패널에 접근하기 위한 리버스 프록시로 Nginx를 사용합니다. 도메인 이름을 서버에 연결하고, SSL 인증서를 발급하고, Nginx를 구성합니다.

경고

계속하려면 등록된 도메인 이름이 필요합니다.

도메인을 서버에 연결

서버의 IP 주소를 확인하세요. 고정 IPv4 주소를 사용하는 것이 좋습니다.

이제 도메인 이름을 이 IP 주소에 연결해야 합니다.

예: my-super-panel.com -> 193.122.122.122

이를 수행하는 두 가지 방법이 있습니다:

  1. DNS 공급자 사용 (예: Cloudflare, Google Cloud 등)
  2. 레지스트라 사용 (예: Namecheap 등)

DNS 공급자

Cloudflare를 사용하는 경우 DNS 레코드에 A/AAAA 레코드(각각 IPv4 및 IPv6용)를 추가해야 합니다.

여기서 Cloudflare 계정에 로그인하고 원하는 도메인을 선택합니다.

페이지 왼쪽에서 DNS를 클릭한 다음 Records를 클릭합니다. Create record를 클릭합니다.
TypeA로, 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

문제 해결