Конфигурация Nginx, подобная Synology reverse proxy

#nginx #config #synology

#nginx #конфигурация #synology

Вопрос:

Я пытаюсь настроить nginx (на основе bitname / nginx: latest) как эквивалент Synology reverse proxy. Это связано с отсутствием перенаправления с использованием подстановочных знаков в Synology. При этом я сталкиваюсь со многими проблемами; поэтому я прошу помощи для правильной настройки nginx.

требования

  • Обновление HTTPS
  • Перенаправить любой поддомен с подстановочными знаками (443) на порт 30’000
  • Скрыть порт перенаправления от видимости пользователя
  • Должны поддерживаться веб-узлы (в следующем заголовке Synology: обновление $ http_upgrade И подключение $connection_upgrade)

Пример

Текущий код (пока не работает)

 # Test
server {
    listen 8080;
    server_name ~^(.*).my-example.com$;
    access_log /opt/bitnami/nginx/logs/yourapp_access.log;
    error_log /opt/bitnami/nginx/logs/yourapp_error.log;
 
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;
 
        proxy_pass https://$host:30000$request_uri/;
        proxy_redirect off;
    }
}

# Catch malicious requests
server {
   listen 8080 default_server;
   listen [::]:8080 default_server;
   server_name _;
 
   return 444;
}
 

Ответ №1:

Я смог решить свою проблему и хотел бы поделиться результатами. Единственное, чего я не понимаю, так это зачем перенаправлять.my-example в порядке как proxy_pass. Это привело бы к тому же самому маршруту (вероятно, бесконечному циклу). Обратная связь / улучшение будут оценены!

 # custom code for hop by hop headers
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
 
# Upgrade connection
server {
    listen 8080 default_server;
    listen [::]:8080 default_server;
    server_name _;
    
    return 301 https://$host$request_uri;
}
 
# Redirect Subdomains (incl. Web-Socket)
server {
    listen 8443 ssl;
    
    ssl_certificate      /certs/server.crt;
    ssl_certificate_key  /certs/server.key;
    
    server_name my-example.de portal.my-example.de;
    access_log /opt/bitnami/nginx/logs/yourapp_access.log;
    error_log /opt/bitnami/nginx/logs/yourapp_error.log;
 
    location / {
        proxy_set_header     X-Real-IP $remote_addr;
        proxy_set_header     HOST $http_host;
        proxy_set_header     X-NginX-Proxy true;
 
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection $connection_upgrade;
 
        proxy_pass https://redirect.my-example.de:30000;
        proxy_redirect off;
    }
}
# Catch malicious requests
server {
   listen 8443 default_server;
   listen [::]:8443 default_server;
   
   ssl_certificate      /certs/server.crt;
   ssl_certificate_key  /certs/server.key;
   
   server_name _;
 
   return 444;
}