• July 29, 2018

    HTTPS จาก Let’s Encrypt แบบ Cloudflare

    กดที่ cryto
    เปิด Always use HTTPS ด้วย
    Automatic HTTPS Rewrites

    แก้ที่ wp-config.php

    define('WP_SITEURL', 'https://www.xxx.com');
    define('WP_HOME', 'https://www.xxx.com');
    

    ติดตั้งปลั๊กอิน Really Simple SSL แล้ว Activate

    วิธีนี้ไม่ต้องเปลียนอะไรใน Data base และ หน้า direct admin เลย

    และ ห้ามไปเปลียน url ใน Database เพราะ ถ้า ถอด SSL เมื่อไร ดึงภาพไม่ขึ้น (เพราะ url เปลียนไปแล้ว)

    การทำ HTTPS จาก Let’s Encrypt Direct admin
    เข้า DA ทำตามขั้นตอนปกติ (หากมีการใช้ cloudflare ให้ตั้งค่า DNS เป็นของเว็บ ปกติก่อนใน godaddy หรือ name.com)
    และ ไปแก้ url ของ woerdpress ทั้งหมด ให้เป็น https:
    ในแต่ละ table

    คำสั่ง SQL

    UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';
    UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl','http://www.newurl');
    UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl');
    UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.oldurl','http://www.newurl');
    

    ถ้าไม่แก้ url จะทำให้
    1. ไฟล์ภาพเก่ายังคงเป็น url แบบ http เดิม  ทำให้ ไม่โชว์กุญแจเขียว
    2. admin cp ที่ permalink จะยังเป็น http เดิม ทำให้เวลาโพสท์บทความใหม่ รูปจะยังโพสท์เป็น http เดิม

    A การติ๊กให้ ใช้ได้เฉพาะ private_html : จะทำให้ใช้ได้ เฉพาะ private_html
    B การติ๊กให้ ใช้ได้ทั้ง public_html และ private_html : จะทำให้ใช้ได้ ทั้งสองแบบ
    แต่สามารถบังคับให้ wordpress วิ่งไปที่ https อย่างเดียวก็ได้

    wp-config.php

    define('WP_SITEURL', 'https://www.insurancethai.net');
    define('WP_HOME', 'https://www.insurancethai.net');
    

    ทำ 301 Redirect ที่ .htaccess

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

    วิธีที่ดีคือ น่าจะทำที่ DA ของโฮสต์และ ในระบบของ WordPress เลย
    เวลาย้ายไปไหน ก็ลง ใน folder https://domain

    เทคนิค
    ถ้ากลัวเว็บเดิมพังให้ backup ก่อน และ ทดสอบลง wordpress ใน domain ว่างๆ ทำตามวิธีที่วางไว้
    ถ้าสำเร็จก็แสดงว่าใช้ได้

    หลังจากทำสำเร็จแล้ว ต่อไปการเข้า admin cp ของ wordpress มันจะ เป็น https เสมอ

    Let’s Encrypt + DirectAdmin  + WordPress

    Direct Admin
    1.ติดตั้ง Let’s Encrpyt SSL Certificate บน Direct Admin
    2.เลือกว่าจะใช้งาน private_html ตรงๆ หรือใช้เป็น symbolic link
    (สำหรับผมเลือกใช้ Symbolic Link ไปเลยง่ายดีจะได้ไม่ต้องย้ายไฟล์ไปที่ private_html) คือจะเข้าทางไหนก็ได้ (http และ https แต่อาจมีปัญหาเรื่อง security หรือ content duplicate) ซึ่งบางโฮสต์ทำให้ private_html เป็น shotcut ไปยัง plublic_html

    WordPress
    1.เปลี่ยนเป็น HTTPS ใน Settings > General ให้เป็นชื่อเว็บไซต์ของเราโดยเปลี่ยนจาก http://yoursite ให้เป็น https://yoursite
    2. แก้ไขไฟล์ .htaccess เพิ่มโค้ดส่วนไฮไลท์ เพื่อบังคับ http ให้กลายเป็น https

    RewriteEngine On
    RewriteBase /
    
    
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{HTTPS} !on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    

    3. Search & Replace ในฐานข้อมูลของเรา จาก http://yoursite ให้เป็น https://yoursite โดยให้ทำที่ตารางที่ชื่อว่า wp_posts ในคอลัมน์ที่ชื่อ post_content และ guid

    UPDATE wp_posts SET post_content = REPLACE( post_content , 'http://yoursite' , 'https://yoursite' );
    UPDATE wp_posts SET guid = REPLACE( guid , 'http://yoursite' , 'https://yoursite' );
    

    +https://www.siamecohost.com/tutorials/lets-encrypt-setup-da.php
    +https://hosting.nakhonitech.com/knowledgebase/22/-Letandsharp039s-encrypt–SSL–web-hosting.html

    ปัญหา

    อยู่ที่ DNS ไม่อัพเดท เช่น การตั้งค่าDNS ไป cloudflare (ซึ่งขณะที่ชี้ไปที่นั่นจะขอ SSL ของ host ไม่ได้ ต้องชี้ DNS กลับมา host ก่อน) ให้เปลียนกลับมา host ก่อน (รอ DNS อัพเดท1วัน) ตั้งค่าเสร็จแล้ว ค่อยไปสวม cloudflare

    ขั้น advance
    เราสามารถเข้าเว็บ โดย by pass เข้าตรง server จาก computer เลย

    ขอ Let’s encrypt สำเร็จ (จะขึ้น success) แก้ url site ของ wordpress ที่หน้า admin ให้เป็น https ซึ่งจะทำให้ เข้าหน้านั้นไม่ได้อีก ต้องไปแก้คืนที่ DB

    หรือลอง ใช้ plugin เพื่อ redirect เว็บไซต์เป็น https
    +https://wordpress.org/plugins/really-simple-ssl/

    ซึ่งมันขึ้นเตือนว่า cer ผิดพลาด
    (แล้วหากไป แก้ที่ seting>general ให้เป็น https มันก็จะเข้า admin ไม่ได้เหมือนกับวิธีด้านบน)
    แก้ค่าคืน โดยแก้ไฟล์ force-deactivate.txt เป็น force-deactivate.php ที่ ปลั๊กอิน แล้วรันไฟล์ (หรือ แก้คืนที่ DB)

    ถ้า DNS ไม่อัพเดท แล้วเราไป เปลียน เป็น https ทั้งเว็บใน DB จะทำให้ เวลาเข้า admin หรือ เว็บ มันจะ วิ่งสลับกัน ระหว่าง http และ https

    วิธีที่ทำได้จริง
    ถอด DNS จาก cloudflare มาที่ hosting
    (ตรวจสอบ certify ใน Direct Admin อีกครั้ง)
    (ลองใน firefox ลบ catch เปลี่ยน net)
    รอ 1 วัน
    ตอนเช้ามารัน plugin really-simple-ssl จะพบว่ามันแจ้งว่าเจอ ssl Let’s encrypt แล้ว
    กดให้มันเปลียน เป็น https หรือ แก้ค่าใน site url ใน seting>general
    เท่านี้ก็จะเป็น https แล้ว ถ้าไม่เปลียนค่า ตรงนี้ เวลา อัพโพส รุปจะยังเป็น http

    อย่าลืมตั้งให้มันซิงค์กันระหว่าง http_public กับ http_private เป็นไหม? ไม่งั้นมันจะเข้าไม่ได้ เพราะมันจะไปดูที่ Private อย่างเดียว

    check DNS
    https://mxtoolbox.com/DNSLookup.aspx
    https://dnschecker.org

    domain propagation คือการที่เราเปลี่ยนให้โดเมนเนมของเราชี้ไปที่ยัง physical location หรือ ที่เรา เรียกว่า IP Address ของโดเมนเนมของบน Internet

    เมื่อเราทำการ เปลี่ยน IP Address ของโดเมนเนม หรือ จดโดเมนเนมใหม่ เราจึงต้องรอประมาณ 24-48 ชั่วโมง เพื่อให้โดเมนเนม ทำการ propagate ในขณะที่ท่านกำลังเปลี่ยนที่อยู่ใหม่ของโดเมนเนม Name Server บางเครื่องอาจจะชี้ที่อยู่ของเว็บไซต์ของคุณไปยังที่อยู่เก่าและ Name Server บางเครื่องอาจจะชี้ไปยังที่อยู่ใหม่ ดังนั้นเพื่อไม่ให้เกิดปัญหากับผู้เข้าชมเว็บไซต์ของท่าน เราจึงขอแนะนำให้กระบวนการทั้งหมดได้ทำการปรับปรุงข้อมูลเรียบร้อยแล้ว (ใช้เวลาประมาณ 24-48 ชั่วโมง) จากนั้นจึงค่อยทำการยกเลิกการทำงานของโฮสติ้งเก่า ระบบก็จะ ทำงานได้อย่างต่อเนื่อง และการใช้งาน ก็จะไม่มีการสะดุด

    Your domain is not pointing to our nameservers at the moment, so services such as FTP, File Manager, E-mail (and others) will not work correctly. You can find our nameservers at the “Accounts -> Details” section. Please mind that DNS might take up to 24 hours to propagate when the change is submitted.

    -http://www.mylookhin.net/knowledgebase/25/-Free-SSL-Letandsharp039s-Encrypt.html
    +https://codex.wordpress.org/Changing_The_Site_URL

    How to Mass Change old URLs in Website Database after Migration

    +https://blog.templatetoaster.com/update-old-urls-in-database/
    +https://blog.templatetoaster.com/databases-work-wordpress/
    +https://wpguru.co.uk/2014/12/how-to-find-and-replace-in-mysql-with-phpmyadmin/

    การอัพเดท link หลังจาก ทำ SSL ใช้ plugin สะดวกกว่าการไปอัพเดทใน database
    มีหลายตัวเช่น
    +https://wordpress.org/plugins/velvet-blues-update-urls/

     URLs in page content	( posts, pages, custom post types, revisions	) 
     URLs in excerpts	
     URLs in links	
     URLs for attachments	( images, documents, general media	) 
     URLs in custom fields and meta boxes	
     Update ALL GUIDs	GUIDs for posts should only be changed on development sites.	Learn More.
    

    +https://th.seedthemes.com/blog/secure-websites-with-https/

    RewriteEngine On
    แจ้งให้ Web Server รู้ว่ามีการใช้งาน mod_rewrite.c

    RewriteCond %{HTTPS} !=on
    เช็คว่า ถ้า Protocol ปัจจุบัน ไม่ใช่HTTPS (ค่า !=on หมายความว่าไม่ใช่ https)

    RewriteCond %{HTTPS} off
    เช็คว่า ถ้า Protocol ปัจจุบันไม่ใช่HTTPS (off ความหมายเดียวกันกับ !=on)

    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    หมายถึงขึ้นต้น และลงท้ายด้วยอะไรก็ตาม ให้เปลี่ยนทางไปที่ https://%โฮสต์%ไฟล์ที่เรียก [กฏสุดท้าย,เปลี่ยนทางแบบถาวร]

    บรรทัดสุดท้ายแนะนำให้ใช้แบบ R=301 เพื่อแจ้งให้เปลี่ยนทางถาวร ไม่งั้นจะเกิด duplicate content กับ http อีก

    [L]
    Last rule: instructs the server to stop rewriting after the preceding directive is processed.

    [L]
    กฎสุดท้าย: สั่งให้เซิร์ฟเวอร์หยุดการดำเนินการ (กรณีที่เข้าเกณฑ์ทั้งหมด) หลังจากประมวลผลคำสั่งเรียบร้อย

    สรุปใช้

    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    # first add www and make sure it is https://
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    # http -> https
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    คำสั่งเปลียน http เป็น https ในหน้า เนื้อหา

    UPDATE wp_posts SET post_content = replace(post_content, 'http://', 'https://');
    

    +https://www.ssllabs.com/ssltest/

    # BEGIN WordPress
    
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    # Rewrite HTTP to HTTPS
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
    
    # END WordPress 
    

    credit code : https://wordpress.stackexchange.com/…/wordpress…
    แต่… ยังไม่ติดซะทีเดียววิธีลัด เสียงลอยมา “พึ่งพา plugin อีกแล้วเหรอ?. ” แต่ถ้าใช้งานได้ดีก็เอา Really Simple SSL ไปติดตั้งครับ
    กับ WP Let’s Encrypt Plugin ให้มันทำการ Reset ตัวเองทุก ๆ 15 วัน (ค่า Default ใน plugin)
    1. https://wordpress.org/plugins/wp-encrypt/
    2. https://wordpress.org/plugins/really-simple-ssl/

    โดยรวมหลังจากผมทำใช้วิธีข้างต้น บวกกับตั้งค่าใน Host กับ General Settings ตรง URI ของ wordpress เป็น https แล้วมันก็จะรันทันทีเลยครับ 🙂



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories