LINUX.ORG.RU

NGINX upstream не работает при подключении 443 SSL порта

 , ,


0

1

Друзья, всем привет.

Есть сайт, который через порт 8080 дает доступ к API расширению. По обычному http протоколу все работает на ура. Вот пытаюсь его на ssl протокол перевести, и тут есть un problema… Сам сайт отображается по ssl без проблем, но upstream api никак не получается настроить.

Система:
Ubuntu 16.04.6 LTS
nginx/1.10.3

Вот конфиг при котором все ОК на http протоколе:

server {
        listen 80;
        listen [::]:80;

        server_name mysite.com www.mysite.com;

        root /home/user/mysite/www/dist;
        index index.html;


        location / {
               try_files $uri $uri/ =404;
        }

        location /api {
                proxy_pass http://api;

        }

}


upstream api {
    server 127.0.0.1:8080;
}

Вот конфиг на https протоколе:

server {
        listen 80;
        listen [::]:80;
        server_name mysite.com www.mysite.com;
      # return 301 https://$host$request_uri;

        root /home/user/mysite/www/dist;
        index index.html;

        location / {
               try_files $uri $uri/ =404;
        }

        location /api {
                proxy_pass http://api;
        }

}

server {
        listen  443 ssl;
        server_name mysite.com www.mysite.com;

        ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot
        ssl_dhparam /etc/nginx/dhparam.pem;


        root /home/user/mysite/www/dist;
        index index.html;

        location / {
               try_files $uri $uri/ =404;
        }

        location /api {
                proxy_pass http://api;
        }
}


upstream api {
    server 127.0.0.1:8080;
}

При таком конфиге http версия тоже работает ок, https версия - сайт коннектит, API нет. Если ставлю редирект return 301 сайт коннектит, API нет.

Как я понял, в location /api нужно указывать https proxy_pass https://api и путь где лежит сертификат и ключ только в случае, если хочешь сделать отдельно только upstream api по SSl подключению, а сам сайт оставить на http протоколе.

Весь мануал NGINX-а перерыл, чет не пойму, что ему надобно еще.


Ответ на: комментарий от antech

Определился, удалил из хттп :)

server {
        listen 80;
        listen [::]:80;
        server_name mysite.com www.mysite.com;
        return 301 https://$host$request_uri;
}

server {
        listen  443 ssl;
        server_name mysite.com www.mysite.com;

        ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot
        ssl_dhparam /etc/nginx/dhparam.pem;


        root /home/user/mysite/www/dist;
        index index.html;

        location / {
               try_files $uri $uri/ =404;
        }

        location /api {
                proxy_pass http://api;
        }
}


upstream api {
    server 127.0.0.1:8080;
}

NGINX перезапустил, куки почистил, без изменений, сайт видит, API нет

mcbay ()
Ответ на: комментарий от antech

Курлом по upstream:
curl https://mysite.com:8080/

curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received
Если курлом на работающий API по HTTP ничего вообще не происходит после ввода. Зато на 443 порте исходный код страницы загружает.

В эррор логах NGINX только это: 2021/09/10 19:42:53 [notice] 17962#17962: signal process started, есть еще error.log.1 там то же самое только больше)

Логи аптрима у меня не настроено логирование, нужно разобраться как сделать.

mcbay ()
Ответ на: комментарий от mcbay

Для этих приложений у меня, обычно, такой шаблон проксирования

        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;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;

        #поддержка Socket.IO если нужно
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
Twissel ★★★★★ ()
Последнее исправление: Twissel (всего исправлений: 2)
Ответ на: комментарий от iljuase

в директории /var/lib/nginx/ в файле access.log появляется запись только при обращении к сайту, загрузке его в браузере или курлом curl https://mysite.com:443/, если курлом на 8080 порт, на котором upstream - в логах не появляется ничего, ни в access.log, ни в error.log

mcbay ()
Ответ на: комментарий от Twissel

Скопи-пастил

server {
        listen 80;
        listen [::]:80;
        server_name mysite.com www.mysite.com;
        return 301 https://$host$request_uri;
}

server {
        listen  443 ssl;
        server_name mysite.com www.mysite.com;

        ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot
        ssl_dhparam /etc/nginx/dhparam.pem;


        root /home/user/mysite/www/dist;
        index index.html;

        location / {
               try_files $uri $uri/ =404;
        }

        location /api {
           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;
           proxy_set_header Host $http_host;
           proxy_set_header X-NginX-Proxy true;

           proxy_pass http://127.0.0.1:8080;
           proxy_redirect off;

           #поддержка Socket.IO если нужно
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";



        }
}


upstream api {
    server 127.0.0.1:8080;
}

без изменений, и в логах тоже ничего

mcbay ()