Задать вопрос
@Sandr0oo

DOCKER + VLESS + NGINX. Как настроить сайт и VLESS на одном порту?

Я пытаюсь настроить nginx так, чтобы по одному порту был доступен VLESS И тестовый сайт. Запускаю я всё в docker compose:
services:
  helloworld:
    container_name: helloworld-2
    image: crccheck/hello-world
    expose:
      - 8000
  nginx:
    image: nginx-stream
    container_name: nginx-stream
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./http.conf.d:/opt/nginx/http.conf.d
      - ./stream.conf.d:/opt/nginx/stream.conf.d
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    restart: unless-stopped
  cerbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    command: certonly --webroot -w /var/www/certbot --keep-until-expiring --email mail@test.ru --domain exemple.com --agree-tos
  x-ray:
    image: teddysun/xray  
    container_name: x-ray-nginx
    volumes:
      - /etc/xray2:/etc/xray2
      - ./certbot/conf:/etc/letsencrypt
    expose:
      - 9001
    restart: always

Еще для этого я пересобрал контейнер nginx, чтобы подключить stream:
FROM debian:bookworm

RUN apt-get update && apt-get -y upgrade && \
    apt-get install -y wget libpcre3-dev build-essential libssl-dev zlib1g-dev && \

    rm -rf /var/lib/apt/lists/*

WORKDIR /opt

RUN wget http://nginx.org/download/nginx-1.27.3.tar.gz && \
    tar -zxvf nginx-1.*.tar.gz && \
    cd nginx-1.* && \
    ./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-http_ssl_module --with-ipv6 --with-threads --with-stream --with-stream_ssl_module --with-http_v2_module --with-stream_ssl_preread_module && \
    make && make install && \
    cd .. && rm -rf nginx-1.*

# nginx user
RUN adduser --system --no-create-home --disabled-login --disabled-password --group nginx

# config dirs
RUN mkdir /opt/nginx/http.conf.d && mkdir /opt/nginx/stream.conf.d

ADD nginx.conf /opt/nginx/conf/nginx.conf
ADD zero_downtime_reload.sh /opt/nginx/sbin/zero_downtime_reload.sh

WORKDIR /

EXPOSE 80 443

CMD ["/opt/nginx/sbin/nginx", "-g", "daemon off;"]

Вот так выглядит мой /opt/nginx/stream.conf.d/*.conf:
log_format stream_access '$remote_addr - [$time_local] "$ssl_preread_server_name" $status $bytes_sent';

access_log /opt/nginx/logs/stream_access.log stream_access;

map $ssl_preread_server_name $sni_name {
    hostnames;
    exemple.com           www;
    *.exemple.com         www;
    default              xray;
}

upstream xray {
    server 127.0.0.1:9001;
}

upstream www {
    server 127.0.0.1:7443;
}

server {
    listen            443;
    listen            [::]:443;
    proxy_pass        $sni_name;
    ssl_preread       on;
    proxy_protocol    on;
}

А вот мой /opt/nginx/http.conf.d/*.conf:
server_tokens off;
charset utf-8;

server {
    listen 80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

server {
    listen 7443 ssl;
    http2 on;
    ssl_certificate     /etc/letsencrypt/live/exemple.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;
    server_name exemple.com;
    root /var/www/html;
    index index.php index.html index.htm;

    location ~ /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location /test {
        proxy_pass http://helloworld-2:8000/;
    }
}

Подскажите, пожалуйста, что здесь не так? Что нужно исправить. Ни тестовый сайт, ни VLESS не работают. Ответы в других вопросах я видел, но что-то мне ничего не помогло.
Если я полностью убираю stream и меняю порт на 443 в http конфиге, то тестовый сайт открывается.
  • Вопрос задан
  • 72 просмотра
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы