
Я пытаюсь настроить обратный прокси с nginx под docker, чтобы иметь возможность доступа к «бэкенд» устройствам (страница входа в NAS, страница входа в маршрутизатор) через разные location
директивы, proxy_pass
но я не могу в этом разобраться. Мой фактический *.conf (использующий определенный apps.conf)
server {
listen 80;
server_name DDNS_NAME LOCAL_DOCKER_HOST;
location / {
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
access_log /var/log/nginx/access_log.txt;
error_log /var/log/nginx/error_log.txt;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4";
server_name DDNS_NAME LOCAL_DOCKER_HOST;
ssl_certificate xxx;
ssl_certificate_key xxx;
location / {
proxy_pass http://LOCAL_DOCKER_HOST:9000/; #portainer
}
location /NAS {
proxy_pass http://NAS_LOCAL; #nas webUI
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
работает location /
на 95%, потому что он фактически загружает интерфейс Portainer, но затем я не могу установить консольное соединение внутри него, похоже, что Portainer использует другой порт/сокет/что-то еще при подключении к консоли контейнера... в любом случае, я могу обойтись без него.
черт возьми, это location /NAS
... этоcurl -L DDNS_NAME/NAS -vvvv
> GET /NAS HTTP/1.1
> Host: DDNS_NAME
> User-Agent: curl/7.68.0
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Server: nginx/1.19.5
< Date: Tue, 01 Dec 2020 16:23:02 GMT
< Content-Type: text/html; charset=iso-8859-1
< Content-Length: 212
< Connection: keep-alive
< Location: /r51201,/desktop,/login.html
<
* Ignoring the response-body
* Connected to DDNS_NAME (PUBLIC_IP) port 443 (#1)
> GET /r51201,/desktop,/login.html HTTP/1.1
> Host: DDNS_NAME
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Server: nginx/1.19.5
< Date: Tue, 01 Dec 2020 16:23:02 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 19
< Connection: keep-alive
< Cache-Control: max-age=31536000
< X-Content-Type-Options: nosniff
< X-Xss-Protection: 1; mode=block
<
404 page not found
он получает ответ от правильного устройства (так что начальный прокси работает), потому что он получает перенаправление на , */r51201,/desktop,/login.html
но браузер (или curl -L) пытается загрузить ресурсы с DDNS_NAME/r51201,/desktop,/login.html
, и, конечно же, я получаю 404. Я борюсь с этим неделями, пробую бесконечные комбинации proxy_set_header, но, возможно, я не могу найти правильную.
Конечно, я настроил выходные данные, чтобы скрыть личную информацию, и у меня есть несколько пользователей, с которыми location
я хотел бы связаться, но все они делают одно и то же, поэтому я сообщил только об одном.
заранее спасибо