บทนำ

SSL (Secure Sockets Layer) และ TLS (Transport Layer Security) เป็นโปรโตคอลเว็บที่ใช้เพื่อป้องกันทราฟฟิกปกติโดยการห่อในรูปแบบที่เข้ารหัส.


เทคโนโลยีนี้มีระบบใบรับรองที่อนุญาตการสื่อสารส่วนตัวระหว่างเซิร์ฟเวอร์และไคลเอนต์ สร้างเส้นทางที่ปลอดภัยสำหรับเซิร์ฟเวอร์เพื่อส่งทราฟฟิกไปยังลูกค้าโดยไม่มีข้อมูลถูกจัดการโดยบุคคลอื่น.

ในบทช่วยสอนนี้เราจะนำคุณไปสู่กระบวนการสร้างใบรับรอง SSL / TLS ที่ลงชื่อด้วยตนเองและใช้กับ Nginx ในกรณีนี้เราจะใช้เซิร์ฟเวอร์ Ubuntu 18.04.

ข้อกำหนดเบื้องต้น

ก่อนที่คุณจะเริ่มต้นคุณต้องมีสิ่งต่อไปนี้:

  • ผู้ใช้ที่ไม่ใช่รูทที่มีสิทธิ์ sudo
  • เซิร์ฟเวอร์ Nginx ที่ติดตั้ง

ทีนี้มาดำดิ่งสู่กระบวนการ.

ขั้นตอนที่ 1: การสร้างใบรับรองที่ลงชื่อด้วยตนเอง

เมื่อพูดถึงการใช้งานใบรับรอง SSL / TLS จะทำงานผ่านชุดใบรับรองสาธารณะและคีย์ส่วนตัว ใบรับรอง SSL เป็นเอกสารสาธารณะที่ใช้ร่วมกับลูกค้าที่ร้องขอเนื้อหา ในทางกลับกันคีย์ SSL จะใช้ในการเข้ารหัสข้อความที่ส่งถึงลูกค้าและควรเก็บเป็นความลับบนเซิร์ฟเวอร์ของคุณ.

หากต้องการสร้างใบรับรองและคีย์ที่ลงชื่อด้วยตนเองด้วย SSL ให้รันคำสั่งด้านล่าง:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt

openssl: เครื่องมือบรรทัดคำสั่งนี้สำหรับการสร้างและจัดการใบรับรอง OpenSSL กุญแจรวมถึงไฟล์อื่น ๆ.

req: นี่เป็นคำสั่งย่อยที่ระบุว่าเราต้องการใช้การจัดการ X.509 CSR (คำขอลงนามใบรับรอง) X.509 เป็นมาตรฐานโครงสร้างพื้นฐานกุญแจสาธารณะที่ TLS และ SSL สอดคล้องกับใบรับรองและการจัดการคีย์ ในกรณีของเราเรากำลังสร้างใบรับรอง X.509 ใหม่และด้วยเหตุนี้เราจึงใช้คำขอ.

-x509: สิ่งนี้จะแก้ไขคำสั่งย่อย req มันแจ้งให้ยูทิลิตี้ทราบว่าเรากำลังสร้างใบรับรองที่ลงนามเองแทนที่จะสร้าง CSR.

 -โหนด: คำสั่งนี้ OpenSSL ไม่รักษาความปลอดภัยใบรับรองโดยใช้ข้อความรหัสผ่าน ข้อความรหัสผ่านป้องกันไม่ให้ Nginx อ่านไฟล์ของเราทุกครั้งที่เซิร์ฟเวอร์เริ่มทำงาน.

-วัน 365: สิ่งนี้จะกำหนดระยะเวลาของการรับรองความถูกต้อง.

-newkey rsa: 2048: คำสั่งนี้ระบุว่าเราจะสร้างคีย์และใบรับรองใหม่พร้อมกัน. rsa: 2048 สั่งการบริการเพื่อสร้างคีย์ RSA 2048 บิต.

-keyout: บรรทัดนี้สั่งให้ OpenSSL ไปที่การจัดเก็บคีย์ส่วนตัวที่สร้างขึ้น.

-ออก: บรรทัดสั่ง OpenSSL ว่าจะเก็บใบรับรองที่สร้างไว้ที่ไหน.

หลังจากคำสั่งด้านบนคุณจะได้รับแจ้งให้ตอบคำถามสองสามข้อเกี่ยวกับใบรับรองที่คุณต้องการสร้าง.

วิธีกำหนดค่า Nginx ให้ใช้ใบรับรอง SSL / TLS ที่ลงชื่อด้วยตนเองบน Ubuntu 18.04 VPS หรือเซิร์ฟเวอร์เฉพาะ

อ่านอย่างระมัดระวังและให้คำตอบที่ถูกต้องเพื่อให้กระบวนการเสร็จสมบูรณ์ บรรทัดสำคัญที่ควรทราบในส่วนนี้คือบรรทัดที่ต้องใช้ชื่อสามัญเช่นชื่อของคุณหรือเซิร์ฟเวอร์ชื่อโดเมนแบบเต็ม (FQDN) ในกรณีนี้ให้ป้อนชื่อโดเมนของคุณหรือที่อยู่ IP สาธารณะที่เชื่อมโยงกับเซิร์ฟเวอร์.  .

คุณควรมีผลลัพธ์ด้านล่าง:

OutputIT
ชื่อประเทศ (รหัสไปรษณีย์ 2 ตัว) [AU]: US
StateorProvinceName (ชื่อเต็ม) [บางรัฐ]: นิวยอร์ก
LocalityName (เช่นเมือง) []: New YorkCity
ชื่อองค์กร (เช่น บริษัท ) [Internet Widgits Pty Ltd] :: บริษัท ตัวอย่าง
OrganizationalUnitName (เช่นส่วน) []: หน่วย SSL
CommonName (เช่น serverFQDNorYOURname) []: server_IP_address
EmailAddress []: [email protected]_domain.com

เมื่อเสร็จแล้วไฟล์ทั้งสองจะถูกเก็บไว้ในไดเรกทอรีย่อยที่ถูกต้องใน / etc / SSL ไดเรกทอรี.

คุณจะต้องใช้ไฟล์เหล่านี้เป็นข้อมูลอ้างอิงในการตั้งค่าการกำหนดค่า Nginx นอกจากนี้ยังเป็นสิ่งสำคัญในการสร้างกลุ่ม DH (Diffie-Hellman) ที่แข็งแกร่งซึ่งเป็นสิ่งจำเป็นในการเจรจาต่อรองความลับล่วงหน้ากับลูกค้า.

หากต้องการทำเช่นนั้นให้เรียกใช้คำสั่งด้านล่าง:

$ sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

กระบวนการนี้อาจใช้เวลาสักครู่ แต่เมื่อเสร็จแล้วกลุ่ม DH (Diffie-Hellman) ของคุณจะถูกเก็บไว้ที่ /etc/nginx/dhparam.pem ที่สามารถใช้ในการกำหนดค่า Nginx.

วิธีกำหนดค่า Nginx ให้ใช้ใบรับรอง SSL / TLS ที่ลงชื่อด้วยตนเองบน Ubuntu 18.04 VPS หรือเซิร์ฟเวอร์เฉพาะ

ขั้นตอนที่ 2: การกำหนดค่า Nginx HTTP Web Server เพื่อใช้ SSL

เนื่องจากเราได้สร้างใบรับรองและคีย์และไฟล์แล้วเราสามารถย้ายเพื่อกำหนดค่า Nginx ด้วยการตั้งค่าเหล่านี้.

แต่ก่อนหน้านั้นนี่คือการปรับเปลี่ยนเล็กน้อยที่เราต้องทำการกำหนดค่าของเราเพื่อนำส่วนทั่วไปมาไว้ในหน่วยที่ใช้ซ้ำ.

การสร้างตัวอย่างการกำหนดค่าสำหรับคีย์ SSL และใบรับรอง

เริ่มต้นด้วยการสร้างตัวอย่างข้อมูลสำหรับการกำหนดค่า Nginx ใน / etc / Nginx / เกร็ดเล็กเกร็ดน้อย ไดเรกทอรี เราจะตั้งชื่อไฟล์นี้ว่าตนเองลงชื่อ.

$ sudo nano /etc/nginx/snippets/self-signed.conf

ตอนนี้ตั้งค่า ssl_certificate ไปยังไฟล์ที่เกี่ยวข้องและ ssl_certificate_key ถึงกุญแจประกอบ สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้กับคุณ:

/etc/nginx/snippets/self-signed.conf
ssl_certificate /et##c/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

จากนั้นบันทึกและออกจากไฟล์.

การสร้างตัวอย่างข้อมูลการกำหนดค่าเพื่อกำหนดการตั้งค่า SSL

ขั้นตอนต่อไปคือการสร้างข้อมูลโค้ดเพิ่มเติมด้วยการตั้งค่าการเข้ารหัส SSL ที่แข็งแกร่ง นี่จะเปิดใช้งานคุณสมบัติเพิ่มเติมอื่น ๆ เพื่อให้เซิร์ฟเวอร์ของคุณปลอดภัย.

ในกรณีนี้เราจะเลือกชื่อสามัญตามที่แสดงด้านล่าง:

$ sudo nano /etc/nginx/snippets/ssl-params.conf

เพื่อให้มั่นใจว่าการตั้งค่า Nginx SSL อย่างปลอดภัยเราจะใช้รูปแบบบนเว็บไซต์ Cipherli.st ซึ่งมีแนวทางการเข้ารหัสที่ใช้งานง่ายสำหรับซอฟต์แวร์ยอดนิยม.

สำหรับบทช่วยสอนนี้เราจะคัดลอกการตั้งค่าจากเว็บไซต์นี้ แต่เราจะเปลี่ยนบรรทัดไม่กี่บรรทัด.

ในกรณีนี้เราจะรวมเครื่องมือแก้ไข DNS สำหรับคำขออัปสตรีมที่แตกต่างกัน นอกจากนี้เราจะไม่แสดงข้อคิดเห็นบรรทัดที่รับผิดชอบส่วนหัวของความปลอดภัยในการขนส่ง.

คัดลอกรายละเอียดด้านล่างไปยังไฟล์ตัวอย่างของคุณชื่อ SSL-params.conf.

ssl_protocols TLSv1.2;
ssl_prefer_server_cipherson;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512: DHE-RSA-AES256-GCM-SHA512: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES256-GCM-SHA384: ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1; # ต้องมี nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache ที่ใช้ร่วมกัน: SSL: 10m;
ssl_session_ticketsoff; # ต้องมี nginx >= 1.5.9
ssl_staplingon; # ต้องมี nginx >= 1.3.7
ssl_stapling_verifyon; # ต้องมี nginx => 1.3.7
resolver8.8.8.88.8.4.4 ถูกต้อง 300s =;
resolver_timeout5s;
# ปิดใช้งานความปลอดภัยการขนส่งที่เข้มงวดในตอนนี้ คุณสามารถยกเลิกข้อคิดเห็นต่อไปนี้
# line หากคุณเข้าใจความหมาย.
# add_header ขั้นสูง – การขนส่ง – ความปลอดภัย "max-age = 63072000; includeSubDomains; พรีโหลด";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS คุ้มครอง "1; mode = บล็อก";

เนื่องจากเราใช้ใบรับรองที่ลงชื่อด้วยตนเองเท่านั้นจึงไม่จำเป็นต้องรวมการเย็บเล่ม SSL Nginx จะปิดใช้งานการเย็บเล่มโดยอัตโนมัติและดำเนินการต่อเพื่อให้ทำงานอย่างถูกต้อง.

ตอนนี้บันทึกและออกจากไฟล์.

การแก้ไขการกำหนดค่า Nginx ให้ชี้ไปที่ SSL

เมื่อคุณสร้างตัวอย่างเสร็จแล้วให้ปรับการกำหนดค่า Nginx เพื่อให้อนุญาต SSL.

สำหรับตัวอย่างนี้เราจะใช้ /etc/nginx/sites-available/example.com แทนที่ชื่อไฟล์ในการกำหนดค่าของคุณด้วยชื่อที่คุณต้องการใช้.

แต่ก่อนหน้านั้นเริ่มต้นด้วยการสำรองไฟล์การกำหนดค่าปัจจุบัน:

$ sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com.bak

เปิดไฟล์ของคุณและปรับบรรทัดที่เหมาะสมดังแสดงด้านล่าง:

$ sudo nano /etc/nginx/sites-available/example.com

คุณจะเห็นผลลัพธ์เช่นนี้:

/etc/nginx/sites-available/example.com
เซิร์ฟเวอร์ {
ฟัง 80;
ฟัง [::]: 80;

server_name example.com www.example.com;

รูท /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;

. . .
}

คุณอาจค้นพบคำสั่งการกำหนดค่าต่างๆที่ส่วนต่างๆเช่น ราก และ ดัชนี อาจปรากฏเป็น สถานที่ proxy_pass, หรือการกำหนดค่าอื่น ๆ เป็นสิ่งสำคัญที่จะกล่าวถึงว่าไม่เป็นไรที่จะมีคำสั่งเหล่านี้คุณเพียงแค่ต้องอัปเดต ฟัง คำสั่งและรวมถึงตัวอย่าง SSL.

ในไฟล์การกำหนดค่าปัจจุบันของคุณไปข้างหน้าและอัพเดตคำสั่ง Listen เป็นทราฟฟิก SSL เซิร์ฟเวอร์บนพอร์ต 443 และ ssl รวมถึงไฟล์ข้อมูลโค้ดที่สร้างขึ้นในสองขั้นตอนก่อนหน้านี้:

/etc/nginx/sites-available/example.com
เซิร์ฟเวอร์ {
ฟัง 443 ssl;
ฟัง [::]: 443 ssl;
รวมถึงเกร็ดเล็กเกร็ดน้อย / ตนเอง signed.conf;
รวมตัวอย่าง / ssl-params.conf;

server_name example.com www.example.com;

รูท /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;

. . .
}

หลังจากวงเล็บปิด (}) ของบล็อกด้านบนวางบล็อกเซิร์ฟเวอร์อื่นลงในของคุณ ไฟล์การกำหนดค่า:

/etc/nginx/sites-available/example.com
. . .
เซิร์ฟเวอร์ {
listen80;
ฟัง [::]: 80;

server_name example.com www.example.com;

return302 https: // server_name $ $ REQUEST_URI;
}

การกำหนดค่าด้านบนรับฟังพอร์ต 80 นอกเหนือจากการเปลี่ยนเส้นทางไปยัง HTTPs.

บันทึกและออกจากไฟล์เมื่อคุณทำเสร็จแล้ว.

ขั้นตอนที่ 3: การปรับการตั้งค่าไฟร์วอลล์ Ufw

หากเปิดใช้งานไฟร์วอลล์ ufw คุณต้องปรับการตั้งค่าระบบเพื่ออนุญาตการรับส่งข้อมูลผ่าน SSL.

เมื่อการติดตั้งเสร็จสมบูรณ์ Nginx จะลงทะเบียนหลายโปรไฟล์ด้วย ufw.

คุณสามารถดูโปรไฟล์เหล่านี้ได้โดยใช้คำสั่งด้านล่าง:

$ sudo ufw รายการแอพ

คุณจะเห็นผลลัพธ์เช่นนี้:

การใช้งานที่มีอยู่:
Nginx เต็ม
Nginx HTTP
Nginx HTTPS
OpenSSH

หากต้องการดูว่ามีการเปิดใช้งานการตั้งค่าใดให้เรียกใช้คำสั่งด้านล่าง:

$ sudo ufw สถานะ


คุณควรมีผลลัพธ์เช่นนี้เพื่อแสดงว่าเว็บเซิร์ฟเวอร์ของคุณอนุญาตการรับส่งข้อมูล HTTP เท่านั้น:

เอาท์พุต
สถานะ: ใช้งานอยู่

เพื่อดำเนินการจาก
—                         ——      —-
OpenSSH อนุญาตได้ทุกที่
Nginx HTTP อนุญาตทุกที่
OpenSSH (v6) อนุญาตได้ทุกที่ (v6)
HTTP Nginx (v6) อนุญาตได้ทุกที่ (v6)

เพื่อให้มั่นใจว่าการรับส่งข้อมูล HTTPS จะราบรื่นให้อนุญาตโปรไฟล์“ Nginx Full” และลบโปรไฟล์ซ้ำซ้อน Nginx HTTP:

$ sudo ufw อนุญาตให้ ‘Nginx Full’
$ sudo ufw delete อนุญาตให้ ‘Nginx HTTP’

ผลลัพธ์ของคุณควรมีลักษณะเช่นนี้:

$ sudo ufw สถานะ

เอาท์พุต

สถานะ: ใช้งานอยู่

เพื่อดำเนินการจาก
—                         ——      —-
OpenSSH อนุญาตได้ทุกที่
Nginx เต็มทุกที่ทุกเวลา
OpenSSH (v6) อนุญาตได้ทุกที่ (v6)
Nginx เต็ม (v6) อนุญาตได้ทุกที่ (v6)

ขั้นตอนที่ 4: การรีสตาร์ท Nginx เพื่อใช้การเปลี่ยนแปลง

เมื่อทำการปรับไฟร์วอลล์แล้วให้เริ่มบริการ Nginx ใหม่เพื่อใช้การเปลี่ยนแปลง.

ตรวจสอบเพื่อให้แน่ใจว่าไม่มีข้อผิดพลาดในไฟล์ของคุณ โดยทำตามคำสั่งด้านล่าง:

$ sudo nginx -t

หากทุกอย่างทำงานอย่างถูกต้องคุณควรได้ผลลัพธ์ต่อไปนี้:

nginx: [เตือน] "ssl_stapling" เพิกเฉยไม่พบผู้ออกใบรับรอง
nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.confsyntax ก็โอเค
nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conftest สำเร็จ

ตอนนี้รีสตาร์ท nginx เพื่อใช้การเปลี่ยนแปลง:

$ sudo systemctl รีสตาร์ท nginx

ขั้นตอนที่ 5: ทดสอบเซิร์ฟเวอร์ SSL

จากนั้นทดสอบว่าการเข้ารหัส SSL นั้นทำงานหรือไม่.

บนเบราว์เซอร์ของคุณให้พิมพ์คำนำหน้า http: // แล้วชื่อโดเมนของคุณ:

https: // server_domain

เนื่องจากใบรับรองยังไม่ได้ลงนามโดยผู้ออกใบรับรองที่เชื่อถือได้คุณจะได้รับคำเตือนเหมือนด้านล่าง:

คุณจะเห็นคำเตือนที่อาจปรากฏขึ้นเนื่องจากใบรับรอง SSL ที่สร้างขึ้นก่อนหน้านี้ไม่ได้ลงนามโดยผู้ออกใบรับรองที่เชื่อถือได้:

วิธีกำหนดค่า Nginx ให้ใช้ใบรับรอง SSL / TLS ที่ลงชื่อด้วยตนเองบน Ubuntu 18.04 VPS หรือเซิร์ฟเวอร์เฉพาะ

ไม่ต้องกังวลเมื่อเห็นข้อความนี้เป็นเรื่องปกติ สิ่งสำคัญคือคุณสมบัติการเข้ารหัสของใบรับรอง เลือกตัวเลือกขั้นสูงและลิงค์ที่จะติดตามเพื่อไปยังโฮสต์.

วิธีกำหนดค่า Nginx ให้ใช้ใบรับรอง SSL / TLS ที่ลงชื่อด้วยตนเองบน Ubuntu 18.04 VPS หรือเซิร์ฟเวอร์เฉพาะ

คุณจะถูกนำไปยังเว็บไซต์ของคุณ ในแถบเบราว์เซอร์ของคุณคุณอาจเห็นบางสิ่งที่ดูเหมือนล็อคที่มีสัญลักษณ์ “X” เหนือมัน มันหมายความว่าใบรับรองยังไม่ได้รับการตรวจสอบและการเข้ารหัสยังอยู่ในระหว่างดำเนินการ.

หากต้องการตรวจสอบว่าการเปลี่ยนเส้นทางเนื้อหา HTTP ทำงานอย่างถูกต้องหรือไม่ให้พิมพ์ดังต่อไปนี้

http: // server_domain_or_IP

หากผลลัพธ์ของไอคอนล็อคเหมือนกันแสดงว่าการเปลี่ยนเส้นทางทำงานได้อย่างถูกต้อง.

ขั้นตอนที่ 6: ชี้ไปที่การเปลี่ยนเส้นทางแบบถาวร

หากคุณแน่ใจว่าคุณต้องการอนุญาตการรับส่งข้อมูลที่เข้ารหัสเท่านั้นสิ่งสำคัญคือต้องเปลี่ยนการกำหนดค่า Nginx เพื่อสร้างการเปลี่ยนเส้นทางถาวร.

ใช้คำสั่งด้านล่างเพื่อเปิดไฟล์การกำหนดค่าบล็อกเซิร์ฟเวอร์:

$ sudo nano /etc/nginx/sites-available/example.com

ค้นหาผลตอบแทน 302 และแทนที่ด้วยผลตอบแทน 301:

return301 https: // server_name $ $ REQUEST_URI;

บันทึกการเปลี่ยนแปลงและปิดไฟล์

ถัดไปพิจารณาการกำหนดค่าสำหรับข้อผิดพลาดทางไวยากรณ์ที่อาจเกิดขึ้นโดยใช้คำสั่งด้านล่าง:

$ sudo nginx -t

รีสตาร์ท Nginx เพื่อให้การปรับเปลี่ยนเสร็จสมบูรณ์:

$ sudo systemctl รีสตาร์ท nginx

ข้อสรุป

ที่นั่นคุณมีมัน! คุณกำหนดค่า Nginx ให้สำเร็จเพื่อใช้ใบรับรอง SSL / TLS เป็นวิธีที่ปลอดภัยในการอนุญาตคำขอจากลูกค้าและป้องกันไม่ให้บุคคลอื่นเข้าถึงการเข้าชมของคุณ.

ลองดูบริการโฮสติ้ง Linux 3 อันดับแรก

FastComet

ราคาเริ่มต้น:
$ 2.95


ความเชื่อถือได้
9.7


การตั้งราคา
9.5


เป็นมิตรกับผู้ใช้
9.7


สนับสนุน
9.7


คุณสมบัติ
9.6

อ่านความคิดเห็น

เยี่ยมชม FastComet

Hostinger

ราคาเริ่มต้น:
$ 0.99


ความเชื่อถือได้
9.3


การตั้งราคา
9.3


เป็นมิตรกับผู้ใช้
9.4


สนับสนุน
9.4


คุณสมบัติ
9.2

อ่านความคิดเห็น

เยี่ยมชม Hostinger

ChemiCloud

ราคาเริ่มต้น:
$ 2.76


ความเชื่อถือได้
10


การตั้งราคา
9.9


เป็นมิตรกับผู้ใช้
9.9


สนับสนุน
10


คุณสมบัติ
9.9

อ่านความคิดเห็น

เยี่ยมชม ChemiCloud

บทความเชิงปฏิบัติที่เกี่ยวข้อง

  • วิธีติดตั้งใบรับรองการเข้ารหัส Let ‘s บน Ubuntu 18.04 เซิร์ฟเวอร์เฉพาะหรือ VPS
    สื่อกลาง
  • วิธีการติดตั้ง LEMP (Linux, Nginx, MySQL, PHP) บน Ubuntu 18.04 VPS หรือเซิร์ฟเวอร์เฉพาะ
    สื่อกลาง
  • วิธีการติดตั้ง Own Cloud บน Ubuntu Dedicated Server หรือ VPS 18.04
    สื่อกลาง
  • วิธีการรักษาความปลอดภัย phpMyAdmin บน Ubuntu 18.04 VPS หรือเซิร์ฟเวอร์เฉพาะ
    สื่อกลาง
  • วิธีการติดตั้ง WordPress Multisite บน Ubuntu 18.04 ด้วย Apache Web Server
    สื่อกลาง
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me