เปลี่ยน HTTP เป็น HTTPS, SSL (Cloudflare)
วิธีการต่อไปนี้ สำหรับผู้ที่ใช้บริการ Cloudflare ที่เป็นบริการแบบ CDN จากต่างประเทศ โดยทาง Cloudflare เองก็มีบริการหนึ่งที่น่าสนใจมาก นั่นก็คือ เปิดให้ใช้ SSL หรือ HTTPS ฟรี เพื่อเป็นการเข้าสู่ยุคแห่งการเข้ารหัสข้อมูล ซึ่งเราๆ เองก็เป็นที่ทราบดีแล้วจากข่าวที่มีการแอบดักฟังข้อมูลของเราไม่ว่าจากทาง▇▇▇▇▇ นั่นจึงเป็นเหตุให้ทาง Cloudflare สนับสนุนให้มีการใช้งาน HTTPS กันมากขึ้นโดยปกติดิสคัสเวอร์ชันใหม่ (X3.2) จะรองรับ HTTPS สมบูรณ์อยู่แล้ว แต่อาจจะเนื่องด้วยปัญหาบางประการ ที่ตัวทางดิสคัสเอง อาจจะไม่รองรับกรณีมีการเปิดใช้งาน SSL ผ่านบริการของ Cloudflare เราจำเป็นต้องมีการปรับแต่งแก้ไขค่าซักเล็กๆ น้อยๆ เพื่อไม่ให้เว็บของเราขึ้นเป็นไอคอนตกใจ แทนที่จะเป็นไอคอนแม่กุญแจสีเขียว จากภาพด้านล่างนี้
วิธีการ
1. เปิดไฟล์ source/class/discuz/discuz_application.php(ขอบคุณโค้ดจาก @rokaisakkon)
หาโค้ดนี้
$_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;
$_G['siteurl'] = dhtmlspecialchars('http'.($_G['isHTTPS'] ? 's' : '').'://'.$_SERVER['HTTP_HOST'].$sitepath.'/');
แทนที่ด้วย
if(!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) $_G['isHTTPX'] = $_SERVER['HTTP_X_FORWARDED_PROTO'];
if(!$_G['isHTTPX']) $_G['isHTTPX'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http' ;
$_G['siteurl'] = dhtmlspecialchars($_G['isHTTPX'].'://'.$_SERVER['HTTP_HOST'].$sitepath.'/');
2. เปิดไฟล์ source/plugin/cloudstat/cloudstat.class.php
แล้วลบโค้ดพวกนี้ออก (หรือจะใส่คำสั่งคอมเม้นท์ก็ได้ครับ)
$return = ' <span id="tcss"></span><script type="text/javascript" src="http://tcss.qq.com/ping.js?v=1'.VERHASH.'" charset="utf-8"></script>';
$pingd = 'http://pingtcss.qq.com/pingd?' . $query . 'ext=' . implode(';', $this->extraParams);
3. เปิดไฟล์ source/function/function_core.php
แล้วลบโค้ดพวกนี้ออก (หรือจะใส่คำสั่งคอมเม้นท์ก็ได้ครับ)
echo '<script type="text/javascript" src="http://notice.uchome.manyou.com/notice/userNotice?sId='.$sid.'&ts='.$ts.'&key='.$key.'&uchId='.$uchId.'" charset="UTF-8"></script>';
$tipsService = Cloud::loadClass('Service_DiscuzTips');
$tipsService->show();
4. เปิดไฟล์ source/plugin/manyou/Service/DiscuzTips.php
แล้วลบโค้ดนี้ออก
<script src="http://discuz.gtimg.cn/cloud/scripts/discuz_tips.js?v=1" type="text/javascript" charset="UTF-8"></script>
5. เปิดไฟล์ source\plugin\manyou\Service\SearchHelper.php
แล้วลบโค้ดพวกนี้ออก (หรือจะใส่คำสั่งคอมเม้นท์ก็ได้ครับ)
$domain = 'search.discuz.qq.com';
$url = 'http://' . $domain . '/f/discuz';
6. เปิดไฟล์ source/plugin/cloudsearch/template/module.htm
หา
src = 'http://search.discuz.qq.com/api/suggest?q=' + encodeURIComponent(q) + '&' + cloudsearch_suggest.queryString;
แทนที่ด้วย
/*src = 'http://search.discuz.qq.com/api/suggest?q=' + encodeURIComponent(q) + '&' + cloudsearch_suggest.queryString;*/
7. เปิดไฟล์ config/config_ucenter.php
แก้ค่า "UC_API" เป็น https
7.1 เปิดไฟล์ uc_server/data/config.inc.php (อัปเดตเนื้อหา)
แก้ไข http เป็น https
8. ไปที่ admin.php?action=setting&operation=uc
แก้ค่า "UCenter API access address:" (พูดง่ายๆ คือ เติม https เท่านั้นครับ)
จาก http://yoursite.com/uc_server
เป็น https://yoursite.com/uc_server
9. ทดสอบรันหน้าเว็บ
หมายเหตุ:
- ทุกๆ ไฟล์ที่มีการแก้ไขจากกระทู้นี้ กรุณาสำรองก่อนดำเนินการใดๆ
- หากทดลองทำแล้ว ยังไม่ได้ผล กรุณาฟีดแบคกลับมาด้วยครับ เพื่อหาวิธีการแก้ไขต่อไป
ทางเลือกอีกทาง
How to Discuz! X3.1/3.2 Open https (SSL) support!
https://www.cloudxns.net/Support/detail/id/356.html ผมใช้วิธียัดเยียดความเป็น https ให้เลยครับ ได้เหมือนกัน เอาไปเพิ่มไว้ที่ไฟล์ header ในโฟลเดอร์แม่แบบที่ใช้
<script type="text/javascript">
if (window.location.protocol == "http:") {
var restOfUrl = window.location.href.substr(5);
window.location = "https:" + restOfUrl;
}
</script> ขอบคุณมากครับ ยังสามารถใช้งานได้อย่างดีเลย
เพิ่มเติม
7.1 เปิดไฟล์ uc_server/data/config.inc.php แก้ไข http เป็น https
**ข้อนี้เหมือนจะไม่มีนะครับ แต่ไปแก้ใน ucenter ผ่าน admincp เอาครับ
เพิ่มเติมอีกข้อครับ
ในไฟล์ .htaccess
ให้เพิ่มโค้ด
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} $tipsService = Cloud::loadClass('Service_DiscuzTips');
$tipsService->show();
สองอันนี้หมายความว่าอะไรครับ
แล้วในกรณีที่คอนโซลผม มันขึ้นว่าเว็บยังดึงรูปอวาตาร์จาก HTTP ต้องแก้ที่ไฟล์ไหนหรอครับ
https://i.imgur.com/jGYa7tV.png damrongsak ตอบกลับเมื่อ 2015-2-27 15:04
สองอันนี้หมายความว่าอะไรครับ
แล้วในกรณีที่คอนโซล ...
โค้ดสองบรรทัดนั้น เป็นคำสั่งสำหรับแสดงค่า ของโค้ดนี้ครับ
echo '<script type="text/javascript" src="http://notice.uchome.manyou.com/notice/userNotice?sId='.$sid.'&ts='.$ts.'&key='.$key.'&uchId='.$uchId.'" charset="UTF-8"></script>';
ใช้คำสั่งคอมเม้นท์ แทนการลบก็ได้ครับ (เผื่อบางวันอยากกลับไปใช้อีก :loveliness:)
ส่วนปัญหาที่สอง
ลองแก้ไขตามโค้ดที่ผมอัปเดตให้นะครับ
แก้ไข
ที่ว่ารูปส่วนตัวไม่ขึ้นใช่ไหมครับ
เราต้องไปแก้เป็น https ในส่วนของ admin.php?action=setting&operation=uc ขอบคุณมากครับสำหรับเนื้อหาดีๆ จริงๆแล้ว นอกจากจะแก้ปัญหาให้ใช้ https ได้อย่างสมบูรณ์ขึ้นแล้ว ยังมีมีผลพลอยได้ คือคนเข้าเว็บ จะโหลดเร็วขึ้นเล็กน้อยถึงปานกลางด้วยสินะ (ไม่ต้องลิ้งออกจีนตัดไปได้เยอะเลยเอ๋หรือว่าตัดไปบางส่วนแต่ยังหลงเหลือหว่า) ^-^ mylookhin ตอบกลับเมื่อ 2015-2-27 22:05
ขอบคุณมากครับสำหรับเนื้อหาดีๆ จริงๆแล้ว นอกจากจะแก้ ...
ไม่เล็กน้อยแล้วอ่ะครับ
มากๆ เลย โดยเฉพาะช่วงกลางคืนเนี่ย เว็บพี่จีน จะอืดเป็นพิเศษ
และจากที่ทดสอบเบื้องต้น เมื่อเราลบ ลิงก์นอกพวกนี้ออก ไม่ส่งผลเสียต่อการใช้งานเว็บเราด้วยซ้ำ
อาจจะมีบ้างที่ไม่ได้รับการแจ้งเตือนบางอย่าง แต่ใครจะสนล่ะ เพราะคุณพี่จีน ไม่เคยแคร์ ต่างประเทศอยู่แล้ว ฮ่าๆ http://i.imgur.com/XvLEItb.jpg
กลายเป็นเชื่อมต่อ UCENTER ไม่ได้อะครับ ผมลองแก้ดูแล้วก็ยังแก้ไม่ได้
เพิ่มเนื้อหา (2015-2-28 13:47):
อัพรูปประจำตัวได้ แต่รูปประจำตัวไม่เปลี่ยน ครับ ^ - ^ damrongsak ตอบกลับเมื่อ 2015-2-28 13:36
กลายเป็นเชื่อมต่อ UCENTER ไม่ได้อะครับ ผมลองแก้ดูแล้วก ...
หลังจากอัพรูปประจำตัวแล้ว จะไม่ถูกเปลี่ยนทันทีนะครับ
เพราะ CloudFlare แคชค่าภาพเดิมไว้ครับ ต้องรอซักระยะหนึ่ง ภาพถึงจะเปลี่ยนครับ
ส่วน UCenter ของผมก็ไม่เชื่อมต่อครับ แต่ไม่มีผลกระทบกับเว็บบอร์ดผมนะครับ
เพราะจำนวนสมาชิกในเว็บบอร์ดกับ Ucenter ซิงค์ตรงกันอยู่ครับ jaideejung007 ตอบกลับเมื่อ 2015-2-28 14:31
หลังจากอัพรูปประจำตัวแล้ว จะไม่ถูกเปลี่ยนทันทีนะค ...
ผมไม่ได้เชื่อมต่อผ่าน CloudFlare ครับ
ผมใช้ Positive SSL ใส่ใน Directadmin เอาหนะครับ damrongsak ตอบกลับเมื่อ 2015-2-28 17:15
ผมไม่ได้เชื่อมต่อผ่าน CloudFlare ครับ
ผมใช้ Positive SSL ใส่ใน Directadmin เอาหนะครับ
อ้าวเหรอ แจ่มเลย
ลองแก้ไขค่าใน uc_server/data/config.inc.php ดูนะครับ ได้ไหม
ค่า SSL ปีละเท่าไหร่ครับ? พี่ใจดีจัง เป็นครูอยู่ น่าจะมีเมล์ .ac.th นะครับ
ซึ่งอันนี้จะฟรี $9/1 Yr.
https://education.github.com/pack
แต่ผมกดรับไปแล้วให้อีกเว็บหนึ่ง เว็บนี้ผมเลยใช้ 4.80 Yr.
https://cheapsslsecurity.com/
ครับผม
// เดียวผมจะลองแก้ดูนะครับ