Nginx вверх по течению https не проксирует другие страницы

Возникла странная ситуация, даже я не знаю, как искать в Google, как ее описать... В любом случае, я использую Nginx и проксирую трафик https на вышестоящий сервер. Все отлично с http (с другими доменами), но не может заставить его работать с https...

Вот мой конфиг nginx

upstream umarket { server 192.168.2.11:443; }

# Upstream
server {
    listen 80;
    listen 443 ssl http2;
    server_name  umarket.lt;

    error_log  /var/log/nginx/umarket.lt_error.log;

    add_header Strict-Transport-Security "max-age=31536000";

    ssl on;
    ssl_certificate             /etc/nginx/ssl/umarket.lt/umarket_lt_chained.crt;
    ssl_certificate_key         /etc/nginx/ssl/umarket.lt/server.key;
    ssl_session_cache           builtin:1000 shared:SSL:10m;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers   on;

    proxy_redirect              off;
    proxy_buffering             off;
    proxy_set_header            Host $host;
    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 https;
    proxy_next_upstream         error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_ssl_session_reuse     off;
    proxy_cache_bypass          $http_secret_header;
    proxy_ignore_headers        Set-Cookie;
    proxy_ignore_headers        Cache-Control;

    location = / {

        proxy_pass  $scheme://umarket;

    }

}

Вот что происходит

Как и предполагалось, я не буду использовать ssl для апстрима, вот как выглядит конфги теперь, все тот же результат... Это внутри блока http:

upstream umarket { server 192.168.2.11:80; }

proxy_redirect              off;
proxy_buffering             off;
proxy_set_header            Host $host;
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 http;
proxy_next_upstream         error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_ssl_session_reuse     off;
proxy_cache_bypass          $http_secret_header;
proxy_ignore_headers        Set-Cookie;
proxy_ignore_headers        Cache-Control;

add_header                  X-Cache-Status  $upstream_cache_status;

server {
    listen *:80;
    server_name umarket.lt;
    rewrite ^(.*) https://$host$1 permanent;
}

server {
    listen 443 ssl http2;
    server_name  umarket.lt;

    error_log  /var/log/nginx/umarket.lt_error.log;

    add_header Strict-Transport-Security "max-age=31536000";

    ssl on;
    ssl_certificate             /etc/nginx/ssl/umarket.lt/umarket_lt_chained.crt;
    ssl_certificate_key         /etc/nginx/ssl/umarket.lt/server.key;
    ssl_session_cache           builtin:1000 shared:SSL:10m;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers   on;

    location = / {

        proxy_pass  http://umarket;

    }

}

1 ответ

Решение

Сделайте два серверных раздела на 80 и 443 порта. И используйте порт 80 на вышестоящем сервере, вы уже устанавливаете SSL-соединение на nginx, поэтому нет необходимости использовать SSL-соединение между внешним и внутренним интерфейсом.

Используйте что-то вроде этого для пересылки всех запросов с http на https версию сайта.

server {
    listen 80;
    server_name umarket.lt;
    rewrite ^(.*) https://$host$1 permanent;
}

Решение: также замените местоположение = / на местоположение /. Это решит проблему.

Другие вопросы по тегам