Завершение SSL-соединения Nginx + Backend Nginx не работает (получить результат смешанного содержимого в HTTPS)

Я установил 2 веб-сервера nginx из этого руководства https: //www.digitalocean. com / community / tutorials / how-to-set-up-nginx-load-balancing-with-ssl-termination

Проблема в том, что одна простая тестовая php-страница через SSL загружается нормально, но когда я пытаюсь установить какое-то приложение PHP, такое как Moodle, я получил предупреждение о смешанном содержимом и пользовательский интерфейс не работает ... (некоторые в режиме HTTP, некоторые в режиме HTTPS и т. д.)

Как я могу загрузить весь контент по всем HTTPS (исправить смешанное содержимое)?

Вот конфигурация внешнего интерфейса SSL Nginx:

# File: \etc\nginx\sites-available\main.big.vm

upstream mainBigVm {
    server main.big.vm:80;
}

server {
    listen 80;

    listen 443 ssl;
    ssl on;
    ssl_certificate         /etc/nginx/cert.crt;
    ssl_certificate_key     /etc/nginx/cert.key;

    server_name main.big.vm;

    location / {
        proxy_pass http://mainBigVm;
        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 $scheme;
    }
}

А вот конфигурация внутреннего интерфейса Nginx (на сервере main.big.vm):

# File: \etc\nginx\sites-available\default

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

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html index.php;

    server_name _;

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

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5217-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

обновление 170430-1

Я пробовал предлагаемая конфигурация во внешнем интерфейсе, но все еще не работает.

upstream mainBigVm {
    server main.big.vm:80;
}

#suggestion
server {
    listen 80;
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 80;

    listen 443 ssl;
    ssl on;
    ssl_certificate         /etc/nginx/cert.crt;
    ssl_certificate_key     /etc/nginx/cert.key;

    server_name main.big.vm;

    location / {
        proxy_pass http://mainBigVm;
        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 $scheme;
    }
}

update 170501-1

Я тоже заметил странное поведение. Если я ввожу URL-адрес HTTPS с конечной косой чертой, URL-адрес загружается, но если я ввожу без конечной косой черты, каким-то образом URL-адрес преобразуется в HTTP с автоматическим добавлением конца слэша

0
задан 1 May 2017 в 01:05
3 ответа

Наконец-то я заработал. Я нашел мои старые заметки о SSL nginx-реверсивном прокси с Apache, нуждающемся в этом конфиге на

# file \apps\httpd\2225\conf.d\nginx-reverse-proxy.conf

# Make sure mod_env is loaded.
# This make sure variable _SERVER[HTTPS] is set if using Nginx as reverse proxy for Apache
# This will help some application to work, since many apps using _SERVER[HTTPS] to work with SSL
# Make sure Nginx has config: proxy_set_header X-Forwarded-Proto $scheme;

SetEnvIf X-Forwarded-Proto https HTTPS=on

Так как я использую бэкэнд Nginx, я попробовал этот конфиг для тестирования:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5217-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param HTTPS 'on'; # I tested by adding this line to check
}

И Он работает, теперь мой Moodle хорошо загружен в HTTPS Front-End (css, js, изображения и т.д....). Теперь мне просто нужна конфигурация Nginx, похожая на Apache SetEnvIf X-Forwarded-Proto https HTTPS=on ИЛИ убедитесь, что весь мой бэкэнд работает на SSL каждый раз

Update 170502: Я получил этот пример здесь https://stackoverflow.com/questions/4848438/fastcgi-application-behind-nginx-is-unable-to-detect-that-https-secure-connectio

1
ответ дан 4 December 2019 в 16:16

В вашем интерфейсе слушайте 80, а затем немедленно перенаправить это на постоянный 443

сервер { слушать 80; расположение / { return 301 https: // $ host $ request_uri; } }

0
ответ дан 4 December 2019 в 16:16

Просканируйте исходный HTML-код страницы с предупреждением о смешанном содержимом и посмотрите, какие ресурсы загружаются через HTTP вместо HTTPS. Если они находятся вне ресурсов, вам не повезло. Если они находятся внутри ресурсов, поскольку HTML-страница генерируется вашим кодом PHP, посмотрите, что вы можете сделать в своем программном обеспечении PHP (возможно, некоторая конфигурация?), Чтобы убедиться, что все изображения / CSS / сценарии / и т. Д. Используют https , а не http .

0
ответ дан 4 December 2019 в 16:16

Теги

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