バージョン 8.5.15 を使用して、会社のホームページを作っています。
トップページのヘッダー部に設置した会社ロゴの画像についての質問です。
トップページでは問題なく表示されていますが、他のページに遷移すると
Mixed Contentのエラーでリンク切れになってしまいます。
該当のホームページは以下です。
https://gsy.ryohin-insatsu.com/index.php
解決方法についてアドバイスをお願いいたします。
バージョン 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
そこで、絶対パスにしていた画像を、相対パスに変更しましたが、
結果は同じでした。
Xサーバーをお使いということで、
一度、サーバーのコントロールパネルから、
の設定を確認してくれますか?
おそらく ON になっていると思います。
ON/OFF を試していただけますか?
確認したところ、両方ともOFFになっておりました。
ONに変更したり、ブラウザキャッシュ設定もOFFにしたりしましたが、
変化はありませんでした。
PHPのバージョンが古い(PHP5.6.40)のが悪さしているのでしょうか。
エックスサーバーのコントロールパネルの PHPバージョン切替のページには、
以下のように記載されています。
===(引用ここから)======
同じドメインに同居しているサイトの都合で、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 が」見える等です。
よろしくお願いします。
いまさらながらですが、フォーラムの「はじめにお読みください」を読みました。
(すみません、存在に気付いてませんでした)
環境情報を以下にお知らせします。
Core Version - 8.5.15
Version Installed - 8.5.15
Database Version - 20220319043123
Version: 10.5.21-MariaDB-log
SQL Mode:
None
None
Block Cache - On
Overrides Cache - On
Full Page Caching - Off
Full Page Cache Lifetime - Every 6 hours (default setting).
Apache
cgi-fcgi
5.6.40
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
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
返信が遅れてすいません。
やはり、間に、プロキシーサーバーがある様です。
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
了解です。
それでは、
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 削除してください。
よろしくお願いします。
ありがとうございます。
設置しまして、パーミッションを755にしたり、ファイルの末尾に
?>
が抜けているのがダメなのかと試してみましたが、変化がないような。。
設置するだけではダメで、何かアクションが必要ですか?
あまり関係がないかも知れませんが、パソコンを再起動したり、
ブラウザで再読み込みしたりしましたが、他に何か必要ですか?
別途、エックスサーバのサポートにも問合せます。
ご案内いただいた方法で解決できました!
昨晩、変化がありませんでした・・と書き込みしましたが、
本日、追加で以下の対応をしました。
・ググったところ、ファイルの末尾の「?>」は不要らしく、削除した。
・管理画面の「システムと設定」にある「キャッシュをクリア」を実行した。
・相対パスに変更していた画像を絶対パスに戻した。
これで、Mixed Contentのエラーが消えました。
助かりました、本当にありがとうございました!
返事が遅れてすいません!
・ググったところ、ファイルの末尾の「?>」は不要らしく、削除した。
これは関係がないと思います。
・管理画面の「システムと設定」にある「キャッシュをクリア」を実行した。
キャッシュが残っていて、
設定変更が適用されていなかったかもしれません。
つまり application/config/concrete.php
に 'ips' => [$remoteIp],
の設定を加えたということで良いですよね?
・相対パスに変更していた画像を絶対パスに戻した。
これは関係がないと思います。
とにかく、解決できてよかったです。