Mixed Contentのエラーについて

バージョン 8.5.15 を使用して、会社のホームページを作っています。
トップページのヘッダー部に設置した会社ロゴの画像についての質問です。
トップページでは問題なく表示されていますが、他のページに遷移すると
Mixed Contentのエラーでリンク切れになってしまいます。

該当のホームページは以下です。
https://gsy.ryohin-insatsu.com/index.php

解決方法についてアドバイスをお願いいたします。

@Ryohin_conc5
ソースを見ると、画像を読み込んでいるリンクが http になっています。
https じゃないといけないです。

サーバーはどこに置いていますか?

ご確認ありがとうございます。
エックスサーバーに置いております。

なお、ブロックのソースコードは以下のとおりです。

会社ロゴ

ソースコードを貼り付けて投稿すると画像が表示されてしまったので、
画面ショットを添付いたします。

エックスサーバーのマニュアルで以下の記述がありました。
「Webサイト内のソースを確認し、リンク先のURLが「http://」で始まるものがある場合は「https://」へと変更するか、「相対パス」で指定するように修正してください。」

エックスサーバーのマニュアルURL
https://www.xserver.ne.jp/manual/man_server_fullssl.php

そこで、絶対パスにしていた画像を、相対パスに変更しましたが、
結果は同じでした。

1 Like

Xサーバーをお使いということで、
一度、サーバーのコントロールパネルから、

  • X アクセラレータ
  • サーバーキャッシュ設定

image

の設定を確認してくれますか?

おそらく ON になっていると思います。

ON/OFF を試していただけますか?

確認したところ、両方ともOFFになっておりました。
ONに変更したり、ブラウザキャッシュ設定もOFFにしたりしましたが、
変化はありませんでした。

PHPのバージョンが古い(PHP5.6.40)のが悪さしているのでしょうか。
エックスサーバーのコントロールパネルの PHPバージョン切替のページには、
以下のように記載されています。

===(引用ここから)======

PHPの高速化に関する設定(FastCGI、キャッシュモジュール)が標準で有効になります。

  • 各PHPバージョンとも、「FastCGI」が標準で有効になります。
    設定を変更することはできません。
  • PHPバージョンに応じて、以下のキャッシュモジュールが標準で有効になります。
    PHP8.2.9 / PHP8.1.22 / PHP8.0.30 / PHP7.4.33 / PHP7.3.33 / PHP7.2.34 / PHP7.1.33 / PHP7.0.33 / PHP5.6.40 / PHP5.5.38…「OPcache」が標準で有効
    PHP5.4.16 / PHP5.3.3…「APC」が標準で有効
    設定を変更することはできません。
    ===(引用ここまで)======

同じドメインに同居しているサイトの都合で、PHPのバージョンを
今以上に上げることができません。

@Ryohin_conc5 この、https にアクセスしているのに、サイト内のリンクが http になってしまうというケースはよくあります。

そのケースは、間に、ロードバランサーが介在している場合です。

ロードバランサーが介在すると、途中で通信が http (非SSL)になることが多いです。

そうすると Concrete CMS は、非SSLで通信が来ていると勘違いします。

すいませんが、以下の管理画面のページに訪問して、結果を共有してくれますか?

管理画面 → システムと設定 → 権限とアクセス → Trusted Proxy
[サイトURL]/index.php/dashboard/system/permissions/trusted_proxies

ここで、「現リクエストで、次のヘッダーが見つかりました。」でヘッダーが現れるか確認してください。

例えば、私のとあるサイトであれば、以下のような表示になります。

私の場合は
「X-Forwarded-For と X_Forwarded_Proto が」見える等です。

よろしくお願いします。

なるほど、そういうケースがあるのですね。
ご指定のページの結果を共有させていただきます。

いまさらながらですが、フォーラムの「はじめにお読みください」を読みました。
(すみません、存在に気付いてませんでした)

環境情報を以下にお知らせします。

concrete5 Version

Core Version - 8.5.15
Version Installed - 8.5.15
Database Version - 20220319043123

Database Information

Version: 10.5.21-MariaDB-log
SQL Mode:

concrete5 Packages

None

concrete5 Overrides

None

concrete5 Cache Settings

Block Cache - On
Overrides Cache - On
Full Page Caching - Off
Full Page Cache Lifetime - Every 6 hours (default setting).

Server Software

Apache

Server API

cgi-fcgi

PHP Version

5.6.40

PHP Extensions

apc, apcu, bcmath, bz2, calendar, cgi-fcgi, Core, ctype, curl, date, dba, dom, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, imap, intl, json, ldap, libxml, mbstring, mcrypt, mysql, mysqli, openssl, pcre, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, Phar, posix, pspell, Reflection, session, shmop, SimpleXML, soap, sockets, SPL, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tokenizer, wddx, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib

PHP Settings

max_execution_time - 180
log_errors_max_len - 1024
max_file_uploads - 20
max_input_nesting_level - 64
max_input_time - -1
max_input_vars - 1000
max_multipart_body_parts - -1
memory_limit - 1G
post_max_size - 1G
sql.safe_mode - Off
upload_max_filesize - 1G
ldap.max_links - Unlimited
mysql.max_links - Unlimited
mysql.max_persistent - Unlimited
mysqli.max_links - Unlimited
mysqli.max_persistent - Unlimited
pcre.backtrack_limit - 1000000
pcre.recursion_limit - 100000
pgsql.max_links - Unlimited
pgsql.max_persistent - Unlimited
session.cache_limiter - no value
session.gc_maxlifetime - 7200
soap.wsdl_cache_limit - 5
opcache.max_accelerated_files - 2000
opcache.max_file_size - 0
opcache.max_wasted_percentage - 5

@Ryohin_conc5

返信が遅れてすいません。

やはり、間に、プロキシーサーバーがある様です。

Xサーバーでロードバランサーを使っているような記憶はないのですが、
何か間にサーバーが入っているか心当たりありますか?

もしかして、Cloudflare などのサービスを使われていますか?

ご確認ありがとうございます。

超初心者のため、エックスサーバーを契約してConcrete CMSを
ダウンロードして、テンプレートを少し書き換えただけです。
なので、サーバーを間に入れたり、不明なサービスを入れたりした
心当たりはないのですが・・・。

付け加えますと、.htaccessに以下の記述を入れています。
(httpのアクセスをhttpsにリダイレクトするのに、
ググって、コピペしました)
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
SetEnvIf Request_URI ".
" Ngx_Cache_NoCacheMode

この.htaccessファイルは、親ドメインのpublic_html直下にいます。

Concrete CMSは、親ドメインのpublic_html配下のサブドメインに
インストールしています。

親ドメイン:ryohin-insatsu.com
サブドメイン:gsy.ryohin-insatsu.com

1 Like

@Ryohin_conc5

了解です。

それでは、
application/config/concrete.php というテキストファイルを作成し、
以下の内容でファイルを作成してください。

<?php
/**
 * Always trust incoming request.
 * 
 * For more detail, see: http://symfony.com/doc/current/cookbook/request/load_balancer_reverse_proxy.html
 */
// Get remote address
$remoteIp = $_SERVER['REMOTE_ADDR'];
return [
    'security' => [
        'trusted_proxies' => [
            'ips' => [$remoteIp],
        ],
    ],
];

これで多分、解決すると思います。

ただ、本当であれば、

の記事の様に、Concrete CMS が設置してあるサーバーの前が利用している IP アドレスは何かを X サーバーに問い合わせ、その IP アドレスのみを登録するのがベストとなります。

Xサーバーに以下の内容で問い合わせてくれますか?

========================================
<< ここから>>

Concrete CMS を利用しています。

Xサーバーでは、プロキシサーバーを利用している様ですが、
そのIPのレンジ (CIDR等)を教えていただくことは可能ですか?

Concrete CMS のセキュリティ機能として、プロキシサーバーの IP範囲 (CIDR) 情報を登録しないと強制ログアウトするという機能があります。

Concrete CMS フォーラムで教えてもらいました。
https://forums.concretecms.org/t/mixed-content/7041

よろしくお願いいたします。

========================================
<< ここまで>>

これで、帰ってきた IP アドレス、もしくは CIDR と呼ばれる IP アドレスの範囲を表しているものを、

[サイトURL]/index.php/dashboard/system/permissions/trusted_proxies

に登録してください。

この作業をしたなら、application/config/concrete.php ファイルのカスタマイズは不要 or 削除してください。

よろしくお願いします。

1 Like

ありがとうございます。
設置しまして、パーミッションを755にしたり、ファイルの末尾に
?>
が抜けているのがダメなのかと試してみましたが、変化がないような。。

設置するだけではダメで、何かアクションが必要ですか?
あまり関係がないかも知れませんが、パソコンを再起動したり、
ブラウザで再読み込みしたりしましたが、他に何か必要ですか?

別途、エックスサーバのサポートにも問合せます。

ご案内いただいた方法で解決できました!
昨晩、変化がありませんでした・・と書き込みしましたが、
本日、追加で以下の対応をしました。
・ググったところ、ファイルの末尾の「?>」は不要らしく、削除した。
・管理画面の「システムと設定」にある「キャッシュをクリア」を実行した。
・相対パスに変更していた画像を絶対パスに戻した。
これで、Mixed Contentのエラーが消えました。
助かりました、本当にありがとうございました!

返事が遅れてすいません!

・ググったところ、ファイルの末尾の「?>」は不要らしく、削除した。

これは関係がないと思います。

・管理画面の「システムと設定」にある「キャッシュをクリア」を実行した。

キャッシュが残っていて、
設定変更が適用されていなかったかもしれません。

つまり application/config/concrete.php'ips' => [$remoteIp], の設定を加えたということで良いですよね?

・相対パスに変更していた画像を絶対パスに戻した。

これは関係がないと思います。

とにかく、解決できてよかったです。