jaideejung007 โพสต์ 2015-2-26 19:05:52

เปลี่ยน 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 = '&nbsp;&nbsp;<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

submark โพสต์ 2016-6-26 18:59:43

ผมใช้วิธียัดเยียดความเป็น https ให้เลยครับ ได้เหมือนกัน เอาไปเพิ่มไว้ที่ไฟล์ header ในโฟลเดอร์แม่แบบที่ใช้
<script type="text/javascript">
    if (window.location.protocol == "http:") {
      var restOfUrl = window.location.href.substr(5);
      window.location = "https:" + restOfUrl;
    }
        </script>

mylookhin โพสต์ 2016-6-26 16:22:38

ขอบคุณมากครับ ยังสามารถใช้งานได้อย่างดีเลย

เพิ่มเติม

7.1 เปิดไฟล์ uc_server/data/config.inc.php แก้ไข http เป็น https
**ข้อนี้เหมือนจะไม่มีนะครับ แต่ไปแก้ใน ucenter ผ่าน admincp เอาครับ

เพิ่มเติมอีกข้อครับ

ในไฟล์ .htaccess

ให้เพิ่มโค้ด

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

damrongsak โพสต์ 2015-2-27 15:04:12

$tipsService = Cloud::loadClass('Service_DiscuzTips');
$tipsService->show();

สองอันนี้หมายความว่าอะไรครับ

แล้วในกรณีที่คอนโซลผม มันขึ้นว่าเว็บยังดึงรูปอวาตาร์จาก HTTP ต้องแก้ที่ไฟล์ไหนหรอครับ
https://i.imgur.com/jGYa7tV.png

jaideejung007 โพสต์ 2015-2-27 15:13:02

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

mylookhin โพสต์ 2015-2-27 22:05:35

ขอบคุณมากครับสำหรับเนื้อหาดีๆ จริงๆแล้ว นอกจากจะแก้ปัญหาให้ใช้ https ได้อย่างสมบูรณ์ขึ้นแล้ว ยังมีมีผลพลอยได้ คือคนเข้าเว็บ จะโหลดเร็วขึ้นเล็กน้อยถึงปานกลางด้วยสินะ (ไม่ต้องลิ้งออกจีนตัดไปได้เยอะเลยเอ๋หรือว่าตัดไปบางส่วนแต่ยังหลงเหลือหว่า) ^-^

jaideejung007 โพสต์ 2015-2-28 11:16:37

mylookhin ตอบกลับเมื่อ 2015-2-27 22:05
ขอบคุณมากครับสำหรับเนื้อหาดีๆ จริงๆแล้ว นอกจากจะแก้ ...

ไม่เล็กน้อยแล้วอ่ะครับ

มากๆ เลย โดยเฉพาะช่วงกลางคืนเนี่ย เว็บพี่จีน จะอืดเป็นพิเศษ

และจากที่ทดสอบเบื้องต้น เมื่อเราลบ ลิงก์นอกพวกนี้ออก ไม่ส่งผลเสียต่อการใช้งานเว็บเราด้วยซ้ำ

อาจจะมีบ้างที่ไม่ได้รับการแจ้งเตือนบางอย่าง แต่ใครจะสนล่ะ เพราะคุณพี่จีน ไม่เคยแคร์ ต่างประเทศอยู่แล้ว ฮ่าๆ

damrongsak โพสต์ 2015-2-28 13:36:27

http://i.imgur.com/XvLEItb.jpg

กลายเป็นเชื่อมต่อ UCENTER ไม่ได้อะครับ ผมลองแก้ดูแล้วก็ยังแก้ไม่ได้

เพิ่มเนื้อหา (2015-2-28 13:47):
อัพรูปประจำตัวได้ แต่รูปประจำตัวไม่เปลี่ยน ครับ ^ - ^

jaideejung007 โพสต์ 2015-2-28 14:31:16

damrongsak ตอบกลับเมื่อ 2015-2-28 13:36
กลายเป็นเชื่อมต่อ UCENTER ไม่ได้อะครับ ผมลองแก้ดูแล้วก ...

หลังจากอัพรูปประจำตัวแล้ว จะไม่ถูกเปลี่ยนทันทีนะครับ

เพราะ CloudFlare แคชค่าภาพเดิมไว้ครับ ต้องรอซักระยะหนึ่ง ภาพถึงจะเปลี่ยนครับ

ส่วน UCenter ของผมก็ไม่เชื่อมต่อครับ แต่ไม่มีผลกระทบกับเว็บบอร์ดผมนะครับ

เพราะจำนวนสมาชิกในเว็บบอร์ดกับ Ucenter ซิงค์ตรงกันอยู่ครับ

damrongsak โพสต์ 2015-2-28 17:15:28

jaideejung007 ตอบกลับเมื่อ 2015-2-28 14:31
หลังจากอัพรูปประจำตัวแล้ว จะไม่ถูกเปลี่ยนทันทีนะค ...

ผมไม่ได้เชื่อมต่อผ่าน CloudFlare ครับ
ผมใช้ Positive SSL ใส่ใน Directadmin เอาหนะครับ

jaideejung007 โพสต์ 2015-2-28 18:54:17

damrongsak ตอบกลับเมื่อ 2015-2-28 17:15
ผมไม่ได้เชื่อมต่อผ่าน CloudFlare ครับ
ผมใช้ Positive SSL ใส่ใน Directadmin เอาหนะครับ

อ้าวเหรอ แจ่มเลย

ลองแก้ไขค่าใน uc_server/data/config.inc.php ดูนะครับ ได้ไหม

ค่า SSL ปีละเท่าไหร่ครับ?

damrongsak โพสต์ 2015-2-28 20:32:24

พี่ใจดีจัง เป็นครูอยู่ น่าจะมีเมล์ .ac.th นะครับ

ซึ่งอันนี้จะฟรี $9/1 Yr.
https://education.github.com/pack

แต่ผมกดรับไปแล้วให้อีกเว็บหนึ่ง เว็บนี้ผมเลยใช้ 4.80 Yr.
https://cheapsslsecurity.com/

ครับผม

// เดียวผมจะลองแก้ดูนะครับ
หน้า: [1] 2 3
ดูในรูปแบบกติ: เปลี่ยน HTTP เป็น HTTPS, SSL (Cloudflare)