Приветствую.
Nginx reverse proxy настроен так, что сначала сам редиректит запросы, приходящие на 80 порт, на 443 порт себе же (серты терминируются на нём же), далее он проксирует на другой вебсервер с nginx на порт 80. Этот второй сервер без ssl-сертов. В общем-то стандартная схема использования.
В случае с WordPress-ом у него прописано в wp-config.php такой код:
if ( (!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) ||
(!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) {
$_SERVER['HTTPS'] = 'on';
Он соотвественно сообщает обратно браузеру, что он в режиме https. И проблем не возникает.
Однако, попробовал вместо WP поставил WinterCMS (он же OctoberCMS). И в этом случае браузер не отрисовывает стили и js-скрипты, а консоль ругается, что Mixed Content.
Можно ли сделать на стороне вебсервера nginx, чтобы он сообщал браузеру, что вебприложение работает на https? Это дабы не менять код вебприложения, тем самым получить независимость от того, какое вебприложение используется.
Если нельзя, то, подскажите, пожалуйста, что нужно прописать на стороне WinterCMS ?
Вот на всякий случай конфиг nginx reverse proxy:
server {
listen 80;
server_name MY_WEB_DOMAIN;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name MY_WEB_DOMAIN;
ssl_certificate /etc/letsencrypt/live/MY_WEB_DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/MY_WEB_DOMAIN/privkey.pem;
ssl_dhparam /etc/nginx/ssl/dhparam2048.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
#Задаём заголовок https
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://10.0.5.4:80;
}
}
А вот конфиг вебсервер nginx, на котором вертится сайт (вебприложение):
# Upstream to abstract backend connection(s) for php
upstream php {
server unix:/var/run/php-fpm/php-fpm.sock;
}
server {
## Your website name goes here.
server_name MY_WEB_DOMAIN;
real_ip_header X-Real-IP;
set_real_ip_from 203.0.113.3/32;
set_real_ip_from 10.0.5.0/29;
root /var/www/MY_WEB_DOMAIN_wintercms/www;
index index.html index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}