http {
server {
listen 80;
server_name ${FAKE_DOMAIN};
return 301 https://$http_host$request_uri;
}
server {
listen 127.0.0.1:10443 ssl;
server_name ${FAKE_DOMAIN};
ssl_certificate ${SSL_DOMAIN_DIR}/fullchain_public.crt;
ssl_certificate_key ${SSL_DOMAIN_DIR}/private.key;
add_header Strict-Transport-Security "max-age=63072000" always;
error_page 403 /403.html;
location = /403.html {
root /usr/share/nginx/html;
allow all;
}
location / {
return 403;
}
}
server {
#listen 127.0.0.1:9443 ssl;
#Только для дебага - чтобы иметь доступ к панели управления по порту.
listen 9443 ssl;
server_name ${PANEL_DOMAIN};
ssl_certificate ${SSL_PANEL_DOMAIN_DIR}/fullchain_public.crt;
ssl_certificate_key ${SSL_PANEL_DOMAIN_DIR}/private.key;
add_header Strict-Transport-Security "max-age=63072000" always;
root /usr/share/nginx/www;
index index.html index.htm;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
#auth_basic "Restricted";
#auth_basic_user_file /etc/nginx/.htpasswd;
location / {
return 503;
}
location /dashboard/ {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8000/dashboard/;
}
location /api/ {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8000/api/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /statics/ {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8000/statics/;
}
location /sub/ {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8000/sub/;
}
}
stream {
map $ssl_preread_server_name $sni_name {
hostnames;
${PANEL_DOMAIN} panel;
default xray;
}
upstream xray {
server 127.0.0.1:8443;
}
upstream panel {
server 127.0.0.1:9443;
}
# for debugging
#log_format stream_routing '$remote_addr [$time_local] '
# 'with SNI name "$ssl_preread_server_name" '
# 'proxying to "$sni_name" '
# '$protocol $status $bytes_sent $bytes_received '
# '$session_time';
server {
listen 443;
listen [::]:443;
proxy_pass $sni_name;
ssl_preread on;
#access_log /var/log/nginx/stream_443.log stream_routing;
}
}
"log": {
"access":"/var/lib/marzban/logs/access.log",
"error":"/var/lib/marzban/logs/error.log",
"loglevel": "debug"
},
"inbounds": [
{
"tag": "VLESS_TCP_REALITY",
# для дебага. Проверить сначала успешное соединение на 8443 (на прямую), а уже потом через 443 (через nginx)
# "listen": "0.0.0.0",
"listen": "127.0.0.1",
"port": 8443,
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"tcpSettings": {},
"security": "reality",
"realitySettings": {
"show": true,
"serverName": "${FAKE_DOMAIN}",
"target": "10433",
"xver": 0,
"serverNames": [
${FAKE_SNI_DOMAINS}
],
"privateKey": "${PRIVATE_KEY}",
"shortIds": [
"${SHORT_IDS}"
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
}
]
Нужно понимать что маскировка XRAY-VLESS REALITY происходит или под реальный чужой домен (google.com, yahoo.com) или по свой фейковый сайт. на том же IP что и XRAY.
если вместо google.com ,будешь прописывать свой домен фейкового сайта, то настройки XRAY будут другие.
Те настройки которые прикладывал ранее, они для своего фейкового сайта который находится на том же хосте что и XRAY и имеют один IP. Если Фейковый сайт в другом контейнере, то "target":"{name_container}:{port}".