<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://network.cmu.ac.th/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Supawit</id>
	<title>CMU ITSC Network - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://network.cmu.ac.th/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Supawit"/>
	<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php/Special:Contributions/Supawit"/>
	<updated>2026-05-04T16:52:33Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=CMU_Login&amp;diff=5274</id>
		<title>CMU Login</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=CMU_Login&amp;diff=5274"/>
		<updated>2026-04-08T06:55:17Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* Connect login.cmu with Global Protect */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;&amp;lt;b&amp;gt; การเชื่อมต่ออินเทอร์เน็ตผ่านสาย LAN (CMU Login) &amp;lt;/b&amp;gt;&amp;lt;/h2&amp;gt; &lt;br /&gt;
== For English Guide ==&lt;br /&gt;
*[[CMU Login English | CMU Login English Guide]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: blue&amp;quot;&amp;gt;&lt;br /&gt;
ผู้ที่สามารถใช้งาน CMU Login &lt;br /&gt;
1. บุคลากรมหาวิทยาลัยเชียงใหม่ที่เชื่อมต่อใช้งานอินเทอร์เน็ตโดยใช้สาย LAN&lt;br /&gt;
2. นักศึกษาที่พักอาศัยอยู่ในหอพักซึ่งอยู่ภายใต้การดูแลของสำนักงานหอพักนักศึกษามหาวิทยาลัยเชียงใหม่ และมีอุปกรณ์ปล่อยสัญญาณ Wi-Fi (Access Point) ติดตั้งอยู่ในห้องพัก สามารถเลือกเชื่อมต่ออินเทอร์เน็ตโดยใช้สาย LAN เพื่อให้การใช้งานอินเทอร์เน็ตมีประสิทธิภาพและเสถียรภาพมากขึ้น โดยสามารถใช้งานด้วยวิธีต่อไปนี้&lt;br /&gt;
* เลือกเชื่อมต่อผ่านแอปพลิเคชั่น Global Protect (Recommended)&lt;br /&gt;
* เลือกเชื่อมต่อผ่านโปรแกรม (Captive Portal)&lt;br /&gt;
* เลือกเชื่อมต่อผ่าน Web Browser (Captive Portal)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login06.jpg|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Connect login.cmu with Global Protect ==&lt;br /&gt;
เชื่อมต่อผ่านแอปพลิเคชั่น Global Protect (Recommended)&lt;br /&gt;
# หลังจากเสียบสาย LAN เข้ากับเครื่องคอมพิวเตอร์แล้ว ให้เปิด &amp;#039;&amp;#039;&amp;#039;Web Browser&amp;#039;&amp;#039;&amp;#039; (eg. Microsoft Edge / Google Chrome) แล้วพิมพ์ &amp;#039;&amp;#039;&amp;#039;https://login-gateway.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; ที่ Address bar จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; และทำการ Login ด้วย &amp;#039;&amp;#039;&amp;#039;CMU Account&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-6.png|center|1000px|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เลือกดาวน์โหลดไฟล์ Global Protect ตาม System Type ของ PC และทำการติดตั้งโปรแกรม สามารถดูรายละเอียดการติดตั้งเพิ่มเติมได้ที่ [[CMU GlobalProtect VPN| GlobalProtect VPN (Recommend)]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-7.png|center|1000px|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# คลิกที่ System tray เลือก Icon GlobalProtect &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Gb win 07.png|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# จะพบหน้าต่าง Welcome! กดที่ &amp;#039;&amp;#039;&amp;#039;Get Started&amp;#039;&amp;#039;&amp;#039; พิมพ์ &amp;#039;&amp;#039;&amp;#039;login-gateway.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Connect&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-1.png|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ทำการ &amp;#039;&amp;#039;Login&amp;#039;&amp;#039; ด้วย &amp;#039;&amp;#039;&amp;#039;CMU Account&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-2.png|link=]] &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;[[File:login-cmu-gbpt-3.png|link=|alt=|border]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อต้องการการตัดการเชื่อมต่ออินเทอร์เน็ต คลิกที่ Icon GlobalProtect บนเมนูบาร์ &amp;gt;&amp;gt; คลิกไอคอน Hamburger Menu มุมบนขวา &amp;gt;&amp;gt; เลือก &amp;#039;&amp;#039;&amp;#039;Disconnect&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Gb win 07.png|link=]] &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;[[File:Login-cmu-gbpt-4.png|link=|alt=|border]] &amp;amp;nbsp;&amp;amp;nbsp;[[File:Login-cmu-gbpt-5.png|link=|alt=|border]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== เชื่อมต่อผ่านโปรแกรม ==&lt;br /&gt;
=== สำหรับระบบปฏิบัติการ Windows ===&lt;br /&gt;
# เปิด &amp;#039;&amp;#039;&amp;#039;Web Browser&amp;#039;&amp;#039;&amp;#039; (eg. Microsoft Edge / Google Chrome) แล้วพิมพ์ &amp;#039;&amp;#039;&amp;#039;login.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; ที่ Address bar จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login01.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ในการเข้าใช้งานครั้งแรกแนะนำให้อ่าน Agreement ก่อน &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login04.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อทำความเข้าใจครบถ้วนแล้ว ให้กดปุ่ม &amp;#039;&amp;#039;&amp;#039;LOGIN WITH CMU ACCOUNT OR GUEST ACCOUNT&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login05.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# กรอก CMU Account ให้ครบทั้ง username และ password แล้วกด &amp;#039;&amp;#039;&amp;#039;ACCEPT AGREEMENT AND LOGIN&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login02.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# กดปุ่มสีเขียวที่มีข้อความว่า &amp;#039;&amp;#039;&amp;#039;View Authentication Token for Login on Client App&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login23.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# จะเห็นรหัส Token ให้กดปุ่ม &amp;#039;&amp;#039;&amp;#039;Copy&amp;#039;&amp;#039;&amp;#039; เพื่อจะนำไปใช้งานกับโปรแกรม (เปิดหน้าเว็บนี้ทิ้งไว้ก่อน) &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login24.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ดาวน์โหลดโปรแกรมตาม link นี้ &amp;gt;&amp;gt;&amp;gt; [https://o365cmu-my.sharepoint.com/:f:/g/personal/thomhathai_j_cmu_ac_th1/EtU__AcxQc9Lhwn1pMKZvEMBlxA-4WfKlc7QpwZhxyJfSA?e=D5DgUi CMULogin] &amp;lt;&amp;lt;&amp;lt; จากนั้นคลิกขวาที่ File เลือกคำสั่ง &amp;#039;&amp;#039;&amp;#039;Extract All&amp;#039;&amp;#039;&amp;#039; จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Extract&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login16.png|500px|link=]][[File:Login17.png|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เข้า Folder login-cmu-client ดับเบิ้ลคลิกที่ไฟล์ &amp;#039;&amp;#039;&amp;#039;login-cmu-client&amp;#039;&amp;#039;&amp;#039;  &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login18.png|center|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# จะเข้าสู่หน้าต่าง Application ให้พิมพ์ &amp;#039;&amp;#039;&amp;#039;Username&amp;#039;&amp;#039;&amp;#039; ของ CMU Account แล้วกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt; นำ Cursor วางไว้ท้ายบรรทัดที่ 2 จากนั่นใช้คำสั่ง Ctrl+V เพื่อใส่ Token ที่ได้จากเว็บ login.cmu.ac.th แล้วกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; อีกครั้ง &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login19.png|center|1000px|link=]][[File:Login29.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เปิดหน้าต่างนี้ทิ้งไว้ตลอดการใช้งาน (Minimize หน้าต่างได้) จากนั้นทำการปิดการใช้งานบราว์เซอร์ที่เปิดหน้าเว็บ login.cmu.ac.th ทิ้งไว้ &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[File:Login28.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อต้องการตัดการเชื่อมต่ออินเทอร์เน็ต ให้ใช้คำสั่ง &amp;#039;&amp;#039;&amp;#039;Ctrl+C&amp;#039;&amp;#039;&amp;#039; เพื่อออกจาก Application&lt;br /&gt;
&lt;br /&gt;
== เชื่อมต่อผ่าน Web Browser (ใช้ได้ทั้ง Windows และ OSX)==&lt;br /&gt;
# ปิดการทำงานบาง function ของ Web Browser เพื่อให้ระบบ CMU Login ทำงานได้ต่อเนื่อง &lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Microsoft Edge&amp;#039;&amp;#039;&amp;#039; ไปที่ Settings &amp;gt;&amp;gt; System and Performance &amp;gt;&amp;gt; Save resources with sleeping tabs &amp;gt;&amp;gt; Turn Off &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[File:MSEdge.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Google Chrome&amp;#039;&amp;#039;&amp;#039; ไปที่ Settings &amp;gt;&amp;gt; Performance &amp;gt;&amp;gt; Memory &amp;gt;&amp;gt; Memory Saver &amp;gt;&amp;gt; Turn Off &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[File:GGCH.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&lt;br /&gt;
# หลังจากเสียบสาย LAN เข้ากับเครื่องคอมพิวเตอร์แล้ว ให้เปิด &amp;#039;&amp;#039;&amp;#039;Web Browser&amp;#039;&amp;#039;&amp;#039; (eg. Microsoft Edge / Google Chrome) แล้วพิมพ์ &amp;#039;&amp;#039;&amp;#039;login.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; ที่ Address bar จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login01.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ในการเข้าใช้งานครั้งแรกแนะนำให้อ่าน Agreement ก่อน &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login04.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อทำความเข้าใจครบถ้วนแล้ว ให้กดปุ่ม &amp;#039;&amp;#039;&amp;#039;LOGIN WITH CMU ACCOUNT OR GUEST ACCOUNT&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login05.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# กรอก CMU Account ให้ครบทั้ง username และ password แล้วกด &amp;#039;&amp;#039;&amp;#039;ACCEPT AGREEMENT AND LOGIN&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login02.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# โปรดเปิดหน้าต่างนี้ไว้ตลอดการใช้งาน (Minimize หน้าต่างได้) เมื่อต้องการตัดการเชื่อมต่ออินเทอร์เน็ตให้ปิดหน้าต่างนี้ &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login03.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=CMU_Login&amp;diff=5273</id>
		<title>CMU Login</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=CMU_Login&amp;diff=5273"/>
		<updated>2026-04-08T06:54:30Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* เชื่อมต่อผ่านแอปพลิเคชั่น Global Protect (Recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h2&amp;gt;&amp;lt;b&amp;gt; การเชื่อมต่ออินเทอร์เน็ตผ่านสาย LAN (CMU Login) &amp;lt;/b&amp;gt;&amp;lt;/h2&amp;gt; &lt;br /&gt;
== For English Guide ==&lt;br /&gt;
*[[CMU Login English | CMU Login English Guide]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: blue&amp;quot;&amp;gt;&lt;br /&gt;
ผู้ที่สามารถใช้งาน CMU Login &lt;br /&gt;
1. บุคลากรมหาวิทยาลัยเชียงใหม่ที่เชื่อมต่อใช้งานอินเทอร์เน็ตโดยใช้สาย LAN&lt;br /&gt;
2. นักศึกษาที่พักอาศัยอยู่ในหอพักซึ่งอยู่ภายใต้การดูแลของสำนักงานหอพักนักศึกษามหาวิทยาลัยเชียงใหม่ และมีอุปกรณ์ปล่อยสัญญาณ Wi-Fi (Access Point) ติดตั้งอยู่ในห้องพัก สามารถเลือกเชื่อมต่ออินเทอร์เน็ตโดยใช้สาย LAN เพื่อให้การใช้งานอินเทอร์เน็ตมีประสิทธิภาพและเสถียรภาพมากขึ้น โดยสามารถใช้งานด้วยวิธีต่อไปนี้&lt;br /&gt;
* เลือกเชื่อมต่อผ่านแอปพลิเคชั่น Global Protect (Recommended)&lt;br /&gt;
* เลือกเชื่อมต่อผ่านโปรแกรม (Captive Portal)&lt;br /&gt;
* เลือกเชื่อมต่อผ่าน Web Browser (Captive Portal)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login06.jpg|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Connect login.cmu with Global Protect ==&lt;br /&gt;
===  เชื่อมต่อผ่านแอปพลิเคชั่น Global Protect (Recommended) ===&lt;br /&gt;
# หลังจากเสียบสาย LAN เข้ากับเครื่องคอมพิวเตอร์แล้ว ให้เปิด &amp;#039;&amp;#039;&amp;#039;Web Browser&amp;#039;&amp;#039;&amp;#039; (eg. Microsoft Edge / Google Chrome) แล้วพิมพ์ &amp;#039;&amp;#039;&amp;#039;https://login-gateway.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; ที่ Address bar จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; และทำการ Login ด้วย &amp;#039;&amp;#039;&amp;#039;CMU Account&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-6.png|center|1000px|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เลือกดาวน์โหลดไฟล์ Global Protect ตาม System Type ของ PC และทำการติดตั้งโปรแกรม สามารถดูรายละเอียดการติดตั้งเพิ่มเติมได้ที่ [[CMU GlobalProtect VPN| GlobalProtect VPN (Recommend)]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-7.png|center|1000px|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# คลิกที่ System tray เลือก Icon GlobalProtect &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Gb win 07.png|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# จะพบหน้าต่าง Welcome! กดที่ &amp;#039;&amp;#039;&amp;#039;Get Started&amp;#039;&amp;#039;&amp;#039; พิมพ์ &amp;#039;&amp;#039;&amp;#039;login-gateway.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Connect&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-1.png|link=]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ทำการ &amp;#039;&amp;#039;Login&amp;#039;&amp;#039; ด้วย &amp;#039;&amp;#039;&amp;#039;CMU Account&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:login-cmu-gbpt-2.png|link=]] &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;[[File:login-cmu-gbpt-3.png|link=|alt=|border]] &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อต้องการการตัดการเชื่อมต่ออินเทอร์เน็ต คลิกที่ Icon GlobalProtect บนเมนูบาร์ &amp;gt;&amp;gt; คลิกไอคอน Hamburger Menu มุมบนขวา &amp;gt;&amp;gt; เลือก &amp;#039;&amp;#039;&amp;#039;Disconnect&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Gb win 07.png|link=]] &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;[[File:Login-cmu-gbpt-4.png|link=|alt=|border]] &amp;amp;nbsp;&amp;amp;nbsp;[[File:Login-cmu-gbpt-5.png|link=|alt=|border]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== เชื่อมต่อผ่านโปรแกรม ==&lt;br /&gt;
=== สำหรับระบบปฏิบัติการ Windows ===&lt;br /&gt;
# เปิด &amp;#039;&amp;#039;&amp;#039;Web Browser&amp;#039;&amp;#039;&amp;#039; (eg. Microsoft Edge / Google Chrome) แล้วพิมพ์ &amp;#039;&amp;#039;&amp;#039;login.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; ที่ Address bar จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login01.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ในการเข้าใช้งานครั้งแรกแนะนำให้อ่าน Agreement ก่อน &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login04.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อทำความเข้าใจครบถ้วนแล้ว ให้กดปุ่ม &amp;#039;&amp;#039;&amp;#039;LOGIN WITH CMU ACCOUNT OR GUEST ACCOUNT&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login05.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# กรอก CMU Account ให้ครบทั้ง username และ password แล้วกด &amp;#039;&amp;#039;&amp;#039;ACCEPT AGREEMENT AND LOGIN&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login02.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# กดปุ่มสีเขียวที่มีข้อความว่า &amp;#039;&amp;#039;&amp;#039;View Authentication Token for Login on Client App&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login23.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# จะเห็นรหัส Token ให้กดปุ่ม &amp;#039;&amp;#039;&amp;#039;Copy&amp;#039;&amp;#039;&amp;#039; เพื่อจะนำไปใช้งานกับโปรแกรม (เปิดหน้าเว็บนี้ทิ้งไว้ก่อน) &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login24.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ดาวน์โหลดโปรแกรมตาม link นี้ &amp;gt;&amp;gt;&amp;gt; [https://o365cmu-my.sharepoint.com/:f:/g/personal/thomhathai_j_cmu_ac_th1/EtU__AcxQc9Lhwn1pMKZvEMBlxA-4WfKlc7QpwZhxyJfSA?e=D5DgUi CMULogin] &amp;lt;&amp;lt;&amp;lt; จากนั้นคลิกขวาที่ File เลือกคำสั่ง &amp;#039;&amp;#039;&amp;#039;Extract All&amp;#039;&amp;#039;&amp;#039; จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Extract&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login16.png|500px|link=]][[File:Login17.png|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เข้า Folder login-cmu-client ดับเบิ้ลคลิกที่ไฟล์ &amp;#039;&amp;#039;&amp;#039;login-cmu-client&amp;#039;&amp;#039;&amp;#039;  &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login18.png|center|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# จะเข้าสู่หน้าต่าง Application ให้พิมพ์ &amp;#039;&amp;#039;&amp;#039;Username&amp;#039;&amp;#039;&amp;#039; ของ CMU Account แล้วกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt; นำ Cursor วางไว้ท้ายบรรทัดที่ 2 จากนั่นใช้คำสั่ง Ctrl+V เพื่อใส่ Token ที่ได้จากเว็บ login.cmu.ac.th แล้วกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; อีกครั้ง &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login19.png|center|1000px|link=]][[File:Login29.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เปิดหน้าต่างนี้ทิ้งไว้ตลอดการใช้งาน (Minimize หน้าต่างได้) จากนั้นทำการปิดการใช้งานบราว์เซอร์ที่เปิดหน้าเว็บ login.cmu.ac.th ทิ้งไว้ &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[File:Login28.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อต้องการตัดการเชื่อมต่ออินเทอร์เน็ต ให้ใช้คำสั่ง &amp;#039;&amp;#039;&amp;#039;Ctrl+C&amp;#039;&amp;#039;&amp;#039; เพื่อออกจาก Application&lt;br /&gt;
&lt;br /&gt;
== เชื่อมต่อผ่าน Web Browser (ใช้ได้ทั้ง Windows และ OSX)==&lt;br /&gt;
# ปิดการทำงานบาง function ของ Web Browser เพื่อให้ระบบ CMU Login ทำงานได้ต่อเนื่อง &lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Microsoft Edge&amp;#039;&amp;#039;&amp;#039; ไปที่ Settings &amp;gt;&amp;gt; System and Performance &amp;gt;&amp;gt; Save resources with sleeping tabs &amp;gt;&amp;gt; Turn Off &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[File:MSEdge.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Google Chrome&amp;#039;&amp;#039;&amp;#039; ไปที่ Settings &amp;gt;&amp;gt; Performance &amp;gt;&amp;gt; Memory &amp;gt;&amp;gt; Memory Saver &amp;gt;&amp;gt; Turn Off &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;[[File:GGCH.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&lt;br /&gt;
# หลังจากเสียบสาย LAN เข้ากับเครื่องคอมพิวเตอร์แล้ว ให้เปิด &amp;#039;&amp;#039;&amp;#039;Web Browser&amp;#039;&amp;#039;&amp;#039; (eg. Microsoft Edge / Google Chrome) แล้วพิมพ์ &amp;#039;&amp;#039;&amp;#039;login.cmu.ac.th&amp;#039;&amp;#039;&amp;#039; ที่ Address bar จากนั้นกด &amp;#039;&amp;#039;&amp;#039;Enter&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login01.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# ในการเข้าใช้งานครั้งแรกแนะนำให้อ่าน Agreement ก่อน &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login04.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# เมื่อทำความเข้าใจครบถ้วนแล้ว ให้กดปุ่ม &amp;#039;&amp;#039;&amp;#039;LOGIN WITH CMU ACCOUNT OR GUEST ACCOUNT&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login05.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# กรอก CMU Account ให้ครบทั้ง username และ password แล้วกด &amp;#039;&amp;#039;&amp;#039;ACCEPT AGREEMENT AND LOGIN&amp;#039;&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login02.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
# โปรดเปิดหน้าต่างนี้ไว้ตลอดการใช้งาน (Minimize หน้าต่างได้) เมื่อต้องการตัดการเชื่อมต่ออินเทอร์เน็ตให้ปิดหน้าต่างนี้ &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; [[File:Login03.png|center|1000px|link=]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5229</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5229"/>
		<updated>2025-10-27T08:51:56Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* ดูว่า certbot ทำอะไร */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
เนื่องจากสำนักได้ให้บริการ private cloud แก่ส่วนงานต่าง ๆ ในรูปแบบ Infrastructure as a service นั้น&amp;lt;br&amp;gt;&lt;br /&gt;
โดยปกติ work load ที่ deploy นั้นสามารถ run application ต่าง ๆ ได้แล้วติดต่อกันได้ผ่านระบบเครือข่ายภายใน&amp;lt;br&amp;gt;&lt;br /&gt;
ส่วน application ที่ต้องบริการทั่วไปโดยต้องรับการติดต่อจาก Internet ซึ่งส่วนใหญ่จะเป็น web application&amp;lt;br&amp;gt;&lt;br /&gt;
เพื่อให้ผู้ใช้งานจาก Internet ใช้งานเว็บไซต์ที่อยู่บน cloud ของส่วนงานได้ ทางสำนักจะมี Public IP address ให้กับ cloud ของส่วนงาน 1 หมายเลขต่อ cloud&amp;lt;br&amp;gt;&lt;br /&gt;
แล้วจะทำการแปลง Public IP เป็น Private IP ให้โดยการทำ port forwarding หรือ destination NAT &amp;lt;br&amp;gt;&lt;br /&gt;
โดย work load ที่เป็นปลายทาง NAT จะต้องเป็น reverse proxy เพื่อที่จะทำให้สามารถให้บริการหลาย ๆ เว็บไซต์ได้&amp;lt;br&amp;gt;&lt;br /&gt;
บทความนี้จะสาธิตการตั้งค่าใช้งาน nginx ซึ่งเป็น reverse proxy ที่ใช้งานกันอย่างแพร่หลายเพื่อที่ทางส่วนงานจะได้นำไปประบุกต์ใช้กับระบบของส่วนงานต่อไป&amp;lt;br&amp;gt;&lt;br /&gt;
และในท้ายบทความจะแนะนำการใช้งาน ssl certificate สำหรับการเข้ารหัสเว็บไซต์แบบฟรี&lt;br /&gt;
&lt;br /&gt;
== Reverse Proxy ==&lt;br /&gt;
&lt;br /&gt;
=== Lab Diagram ===&lt;br /&gt;
[[File:Cloud nginx.png|link=]]&amp;lt;br&amp;gt;&lt;br /&gt;
จากรูปภาพใน lab นี้จะใช้ nginx ทำ reverse proxy ในรูปแบบที่ใช้งานกันทั่ว ๆ ไป&amp;lt;br&amp;gt;&lt;br /&gt;
จะใช้ server 4 เครื่อง เป็น nginx 1 เครื่อง และเป็น web application node 3 เครื่อง&amp;lt;br&amp;gt;&lt;br /&gt;
1. nginx(สีขาว) ip X.X.X.10&amp;lt;br&amp;gt;&lt;br /&gt;
2. web-node-a(สีฟ้า) ip X.X.X.11&amp;lt;br&amp;gt;&lt;br /&gt;
3. web-node-b(สีเขียว) ip X.X.X.12&amp;lt;br&amp;gt;&lt;br /&gt;
4. web-node-c(สีส้ม) ip X.X.X.13&amp;lt;br&amp;gt;&lt;br /&gt;
โดยที่ www1.demo.cloud.cmu.ac.th, www2.demo.cloud.cmu.ac.th, www3.demo.cloud.cmu.ac.th จะลงทะเบียนโดเมนเป็น public ip ขานอกและ DNAT มาที่ ip private ของ nginx&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า IP Address Server ===&lt;br /&gt;
ตั้งค่า IP address เครื่อง nginx, web-node-a, web-node-b, web-node-c โดยให้ X เป็น .10, .11, .12, .13 ตามลำดับ Y คือ ip address ที่ได้รับ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sed -i &amp;#039;s/dhcp/static/g&amp;#039; /etc/network/interfaces&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
address Y.Y.Y.X&lt;br /&gt;
netmask 255.255.255.0&lt;br /&gt;
gateway Y.Y.Y.1&lt;br /&gt;
dns-nameservers 10.8.8.8 8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
ifdown ens3 ; ifup ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า hostname server ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;บทความนี้ใช้ ubuntu 16.04&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;nginx&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) nginx&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง โดยที่ X=a,b หรือ c ตาม server ที่รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;web-node-X&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) web-node-X&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=web-node-X&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy ทั่วไป ===&lt;br /&gt;
&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-general.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า web application ตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
tasksel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
จากนั้นเลือก LAMP server แล้ว OK แล้วทำตามขั้นตอน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:01-tasksel.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
==== แก้ไขไฟล์หน้าเว็บตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a และ web-node-b รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า nginx ====&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt install nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
เพิ่ม file config สำหรับ web site www1.demo.cloud.cmu.ac.th และ www2.demo.cloud.cmu.ac.th&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www1.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www1.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www1.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www1.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www2.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www2.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx เพื่อให้อ่านค่า file config ใหม่แล้วทดสอบเรียกใช้งาน web site&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy Alias ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-alias.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ย่อย ====&lt;br /&gt;
ที่เครื่อง web-node-a สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www2-a&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www2-a/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config ของ apache2 สำหรับเว็บใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www2-a.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www2-a.conf&lt;br /&gt;
Listen 82&lt;br /&gt;
&amp;lt;VirtualHost *:82&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www2-a/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== เพิ่ม alias บน nginx ====&lt;br /&gt;
ที่เครื่อง nginx แก้ไขไฟล์ &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www2.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www2.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
        location /a {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11:82/;&lt;br /&gt;
        }&lt;br /&gt;
        location /b {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.13/;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx แล้วทดสอบเรียกเว็บไซต์&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy load balance ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-load-balance.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ใหม่ ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www3&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www3/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config apache2 สำหรับเว็บไซต์ใหม่&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www3.conf&lt;br /&gt;
Listen 81&lt;br /&gt;
&amp;lt;VirtualHost *:81&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www3/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ตั้งค่า nginx แบบ load balance ====&lt;br /&gt;
เพิ่ม file config nginx &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www3.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www3.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload nginx&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th แล้ว refresh จะเห็นว่าจะมีการเปลี่ยน node ไปเรื่อย ๆ&lt;br /&gt;
&lt;br /&gt;
==== ประเภทของ load balance ====&lt;br /&gt;
* round-robin -- คือสลับวนไปเรื่อย ๆ ในแต่ละ request เป็นค่า default &lt;br /&gt;
* least-connected -- คือ request ถัดดไปจะถูกส่งไปยัง server ที่มี active connection น้อยที่สุด&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        least_conn;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ip-hash -- ใช้ ip address ของ client เป็นตัวตัดสินใจว่าจะส่ง request ไปยัง server ไหน ต้องใช้วิธีนี้เพื่อที่จะทำ Session persistence&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        ip_hash;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Weighted load balancing ====&lt;br /&gt;
เป็นการส่ง request ไปยัง server แบบมีน้ำหนัก เช่นในตัวอย่าง server 10.110.0.61 จะถูกส่ง request มากกว่า server อื่น&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 weight=3;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Health checks ====&lt;br /&gt;
nginx จะใช้ request จริงในการตรวจสอบว่า upstream server ยังใช้งานได้อยู่หรือไม่โดยมีตัวแปรสองค่าที่เดี่ยวข้องคือ&lt;br /&gt;
* max_fails -- คือจำนวนครั้งที่ไม่สามารถติดต่อ server ได้แล้วจะถือว่า server  นั้น down, server มี down จะไม่ถูกส่ง request ไปอีก ค่า default คือ 1&lt;br /&gt;
* fail_timeout -- คือระยะเวลาที่หลังจาก server down แล้วจะส่ง request ไปตรวจสอบว่ายังติดต่อได้หรือไม่ถ้าติดต่อได้จะถือว่า server up มาอีกครั้งและส่ง request ไปยัง server นั้นตามปกติ ค่า default คือ 10 วินาที&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 max_fails=3 fail_timeout=15s;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง === &lt;br /&gt;
[http://nginx.org/en/docs/ http://nginx.org/en/docs/]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://nginx.org/en/docs/http/load_balancing.html http://nginx.org/en/docs/http/load_balancing.html]&lt;br /&gt;
&lt;br /&gt;
== SSL offload ==&lt;br /&gt;
ใช้ nginx ทำ https server เพื่อให้บริการ https ได้โดยใช้ [https://letsencrypt.org/ Let&amp;#039;s encrypt ] บริการ SSL certificate ฟรี&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Ssl-offload.png|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ติดตั้ง certbot ===&lt;br /&gt;
certbot เป็นเครื่องมือติดตั้ง certificate จาก let&amp;#039;s encrypt และช่วยต่ออายุ certificate ให้อัตโนมัติ&amp;lt;br&amp;gt;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install software-properties-common&lt;br /&gt;
add-apt-repository ppa:certbot/certbot&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install python-certbot-nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ใช้ certbot ตั้งค่า nginx ให้เปิดใช้ https ===&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
certbot --nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ให้ระบุอีเมลแจ้งเตือน cert หมดอายุและยอมรับข้อตกลงการใช้งาน&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# certbot --nginx&lt;br /&gt;
Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;br /&gt;
Plugins selected: Authenticator nginx, Installer nginx&lt;br /&gt;
Enter email address (used for urgent renewal and security notices) (Enter &amp;#039;c&amp;#039; to&lt;br /&gt;
cancel): supawit.w@cmu.ac.th&lt;br /&gt;
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Please read the Terms of Service at&lt;br /&gt;
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must&lt;br /&gt;
agree in order to register with the ACME server at&lt;br /&gt;
https://acme-v01.api.letsencrypt.org/directory&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
(A)gree/(C)ancel:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะอ่าน config จาก nginx และให้เลือกว่าจะเปิด https ที่เว็บไซต์ใด ในตัวอย่างจะเลือก www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Starting new HTTPS connection (1): supporters.eff.org&lt;br /&gt;
&lt;br /&gt;
Which names would you like to activate HTTPS for?&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: www1.demo.cloud.cmu.ac.th&lt;br /&gt;
2: www2.demo.cloud.cmu.ac.th&lt;br /&gt;
3: www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate numbers separated by commas and/or spaces, or leave input&lt;br /&gt;
blank to select all options shown (Enter &amp;#039;c&amp;#039; to cancel): 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะให้เลือกว่าจะให้ตั้งค่าการ redirect http เป็น https ทั้งหมด แนะนำให้เลือก redirect ทั้งหมดโดยการตอบ 2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Obtaining a new certificate&lt;br /&gt;
Resetting dropped connection: acme-v01.api.letsencrypt.org&lt;br /&gt;
Performing the following challenges:&lt;br /&gt;
http-01 challenge for www3.demo.cloud.cmu.ac.th&lt;br /&gt;
Waiting for verification...&lt;br /&gt;
Cleaning up challenges&lt;br /&gt;
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: No redirect - Make no further changes to the webserver configuration.&lt;br /&gt;
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for&lt;br /&gt;
new sites, or if you&amp;#039;re confident your site works on HTTPS. You can undo this&lt;br /&gt;
change by editing your web server&amp;#039;s configuration.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate number [1-2] then [enter] (press &amp;#039;c&amp;#039; to cancel): 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
certbot จะทำการสรุปผลการติดตั้ง certificate และ reload nginx ให้อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Congratulations! You have successfully enabled https://www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&lt;br /&gt;
You should test your configuration at:&lt;br /&gt;
https://www.ssllabs.com/ssltest/analyze.html?d=www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
IMPORTANT NOTES:&lt;br /&gt;
 - Congratulations! Your certificate and chain have been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem&lt;br /&gt;
   Your key file has been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem&lt;br /&gt;
   Your cert will expire on 2018-09-11. To obtain a new or tweaked&lt;br /&gt;
   version of this certificate in the future, simply run certbot again&lt;br /&gt;
   with the &amp;quot;certonly&amp;quot; option. To non-interactively renew *all* of&lt;br /&gt;
   your certificates, run &amp;quot;certbot renew&amp;quot;&lt;br /&gt;
 - Your account credentials have been saved in your Certbot&lt;br /&gt;
   configuration directory at /etc/letsencrypt. You should make a&lt;br /&gt;
   secure backup of this folder now. This configuration directory will&lt;br /&gt;
   also contain certificates and private keys obtained by Certbot so&lt;br /&gt;
   making regular backups of this folder is ideal.&lt;br /&gt;
 - If you like Certbot, please consider supporting our work by:&lt;br /&gt;
&lt;br /&gt;
   Donating to ISRG / Let&amp;#039;s Encrypt:   https://letsencrypt.org/donate&lt;br /&gt;
   Donating to EFF:                    https://eff.org/donate-le&lt;br /&gt;
&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th จะเห็นว่าเป็น https และ browser รองรับ&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:05-www3-https.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ดูว่า certbot ทำอะไร ===&lt;br /&gt;
มีการเพิ่ม crontab เพื่อให้ต่ออายุ certificate อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# cat /etc/cron.d/certbot&lt;br /&gt;
# /etc/cron.d/certbot: crontab entries for the certbot package&lt;br /&gt;
#&lt;br /&gt;
# Upstream recommends attempting renewal twice a day&lt;br /&gt;
#&lt;br /&gt;
# Eventually, this will be an opportunity to validate certificates&lt;br /&gt;
# haven&amp;#039;t been revoked, etc.  Renewal will only occur if expiration&lt;br /&gt;
# is within 30 days.&lt;br /&gt;
SHELL=/bin/sh&lt;br /&gt;
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;
&lt;br /&gt;
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system &amp;amp;&amp;amp; perl -e &amp;#039;sleep int(rand(3600))&amp;#039; &amp;amp;&amp;amp; certbot -q renew&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
เข้าไปแก้ไข nginx config file ให้อัตโนมัติ&lt;br /&gt;
ลองเข้าไปดู file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
        access_log /var/log/nginx/www3.demo.cloud.cmu.ac.th-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www3.demo.cloud.cmu.ac.th-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    listen 443 ssl; # managed by Certbot&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem; # managed by Certbot&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem; # managed by Certbot&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    if ($host = www3.demo.cloud.cmu.ac.th) {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    } # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
    return 404; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง ===&lt;br /&gt;
[https://letsencrypt.org/ https://letsencrypt.org/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx]&lt;br /&gt;
== บทส่งท้าย ==&lt;br /&gt;
บทความนี้แสดงถึงการตั้งค่า reverse proxy เบื้องต้น ในการใช้งานจริงอาจจะต้องมีการ fine tune ค่าต่าง ๆ เพิ่มเติมกรณีที่ web application ต้องการรองรับ request จำนวนมาก&lt;br /&gt;
หรือมีความต้องการเฉพาะอาจจะต้องใช้เทคนิคอื่น ๆ เพิ่มเติมเช่น static file caching ซึ่งต้องศึกษาเพิ่มเติมต่อยอดจากบทความนี้ต่อไป หวังว่าบทความนี้จะช่วยปูพื้นฐานให้เข้าใจ concept ของ reverse proxy และการทำ SSL offload &lt;br /&gt;
== สอบถามเพิ่มเติม ==&lt;br /&gt;
ผู้เขียน : ศุภวิทย์ วรรณภิละ วิศวกร ฝ่ายระบบเครือข่าย สำนักบริการเทคโนโลยีสารสนเทศ มหาวิทยาลัยเชียงใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
email : [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&amp;lt;br&amp;gt;&lt;br /&gt;
โทรศัพท์ : 0-5394-3853&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5228</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5228"/>
		<updated>2025-10-27T08:51:19Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* ตั้งค่า nginx แบบ load balance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
เนื่องจากสำนักได้ให้บริการ private cloud แก่ส่วนงานต่าง ๆ ในรูปแบบ Infrastructure as a service นั้น&amp;lt;br&amp;gt;&lt;br /&gt;
โดยปกติ work load ที่ deploy นั้นสามารถ run application ต่าง ๆ ได้แล้วติดต่อกันได้ผ่านระบบเครือข่ายภายใน&amp;lt;br&amp;gt;&lt;br /&gt;
ส่วน application ที่ต้องบริการทั่วไปโดยต้องรับการติดต่อจาก Internet ซึ่งส่วนใหญ่จะเป็น web application&amp;lt;br&amp;gt;&lt;br /&gt;
เพื่อให้ผู้ใช้งานจาก Internet ใช้งานเว็บไซต์ที่อยู่บน cloud ของส่วนงานได้ ทางสำนักจะมี Public IP address ให้กับ cloud ของส่วนงาน 1 หมายเลขต่อ cloud&amp;lt;br&amp;gt;&lt;br /&gt;
แล้วจะทำการแปลง Public IP เป็น Private IP ให้โดยการทำ port forwarding หรือ destination NAT &amp;lt;br&amp;gt;&lt;br /&gt;
โดย work load ที่เป็นปลายทาง NAT จะต้องเป็น reverse proxy เพื่อที่จะทำให้สามารถให้บริการหลาย ๆ เว็บไซต์ได้&amp;lt;br&amp;gt;&lt;br /&gt;
บทความนี้จะสาธิตการตั้งค่าใช้งาน nginx ซึ่งเป็น reverse proxy ที่ใช้งานกันอย่างแพร่หลายเพื่อที่ทางส่วนงานจะได้นำไปประบุกต์ใช้กับระบบของส่วนงานต่อไป&amp;lt;br&amp;gt;&lt;br /&gt;
และในท้ายบทความจะแนะนำการใช้งาน ssl certificate สำหรับการเข้ารหัสเว็บไซต์แบบฟรี&lt;br /&gt;
&lt;br /&gt;
== Reverse Proxy ==&lt;br /&gt;
&lt;br /&gt;
=== Lab Diagram ===&lt;br /&gt;
[[File:Cloud nginx.png|link=]]&amp;lt;br&amp;gt;&lt;br /&gt;
จากรูปภาพใน lab นี้จะใช้ nginx ทำ reverse proxy ในรูปแบบที่ใช้งานกันทั่ว ๆ ไป&amp;lt;br&amp;gt;&lt;br /&gt;
จะใช้ server 4 เครื่อง เป็น nginx 1 เครื่อง และเป็น web application node 3 เครื่อง&amp;lt;br&amp;gt;&lt;br /&gt;
1. nginx(สีขาว) ip X.X.X.10&amp;lt;br&amp;gt;&lt;br /&gt;
2. web-node-a(สีฟ้า) ip X.X.X.11&amp;lt;br&amp;gt;&lt;br /&gt;
3. web-node-b(สีเขียว) ip X.X.X.12&amp;lt;br&amp;gt;&lt;br /&gt;
4. web-node-c(สีส้ม) ip X.X.X.13&amp;lt;br&amp;gt;&lt;br /&gt;
โดยที่ www1.demo.cloud.cmu.ac.th, www2.demo.cloud.cmu.ac.th, www3.demo.cloud.cmu.ac.th จะลงทะเบียนโดเมนเป็น public ip ขานอกและ DNAT มาที่ ip private ของ nginx&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า IP Address Server ===&lt;br /&gt;
ตั้งค่า IP address เครื่อง nginx, web-node-a, web-node-b, web-node-c โดยให้ X เป็น .10, .11, .12, .13 ตามลำดับ Y คือ ip address ที่ได้รับ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sed -i &amp;#039;s/dhcp/static/g&amp;#039; /etc/network/interfaces&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
address Y.Y.Y.X&lt;br /&gt;
netmask 255.255.255.0&lt;br /&gt;
gateway Y.Y.Y.1&lt;br /&gt;
dns-nameservers 10.8.8.8 8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
ifdown ens3 ; ifup ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า hostname server ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;บทความนี้ใช้ ubuntu 16.04&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;nginx&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) nginx&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง โดยที่ X=a,b หรือ c ตาม server ที่รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;web-node-X&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) web-node-X&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=web-node-X&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy ทั่วไป ===&lt;br /&gt;
&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-general.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า web application ตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
tasksel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
จากนั้นเลือก LAMP server แล้ว OK แล้วทำตามขั้นตอน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:01-tasksel.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
==== แก้ไขไฟล์หน้าเว็บตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a และ web-node-b รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า nginx ====&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt install nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
เพิ่ม file config สำหรับ web site www1.demo.cloud.cmu.ac.th และ www2.demo.cloud.cmu.ac.th&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www1.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www1.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www1.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www1.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www2.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www2.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx เพื่อให้อ่านค่า file config ใหม่แล้วทดสอบเรียกใช้งาน web site&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy Alias ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-alias.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ย่อย ====&lt;br /&gt;
ที่เครื่อง web-node-a สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www2-a&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www2-a/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config ของ apache2 สำหรับเว็บใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www2-a.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www2-a.conf&lt;br /&gt;
Listen 82&lt;br /&gt;
&amp;lt;VirtualHost *:82&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www2-a/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== เพิ่ม alias บน nginx ====&lt;br /&gt;
ที่เครื่อง nginx แก้ไขไฟล์ &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www2.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www2.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
        location /a {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11:82/;&lt;br /&gt;
        }&lt;br /&gt;
        location /b {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.13/;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx แล้วทดสอบเรียกเว็บไซต์&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy load balance ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-load-balance.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ใหม่ ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www3&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www3/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config apache2 สำหรับเว็บไซต์ใหม่&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www3.conf&lt;br /&gt;
Listen 81&lt;br /&gt;
&amp;lt;VirtualHost *:81&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www3/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ตั้งค่า nginx แบบ load balance ====&lt;br /&gt;
เพิ่ม file config nginx &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www3.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www3.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload nginx&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th แล้ว refresh จะเห็นว่าจะมีการเปลี่ยน node ไปเรื่อย ๆ&lt;br /&gt;
&lt;br /&gt;
==== ประเภทของ load balance ====&lt;br /&gt;
* round-robin -- คือสลับวนไปเรื่อย ๆ ในแต่ละ request เป็นค่า default &lt;br /&gt;
* least-connected -- คือ request ถัดดไปจะถูกส่งไปยัง server ที่มี active connection น้อยที่สุด&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        least_conn;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ip-hash -- ใช้ ip address ของ client เป็นตัวตัดสินใจว่าจะส่ง request ไปยัง server ไหน ต้องใช้วิธีนี้เพื่อที่จะทำ Session persistence&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        ip_hash;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Weighted load balancing ====&lt;br /&gt;
เป็นการส่ง request ไปยัง server แบบมีน้ำหนัก เช่นในตัวอย่าง server 10.110.0.61 จะถูกส่ง request มากกว่า server อื่น&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 weight=3;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Health checks ====&lt;br /&gt;
nginx จะใช้ request จริงในการตรวจสอบว่า upstream server ยังใช้งานได้อยู่หรือไม่โดยมีตัวแปรสองค่าที่เดี่ยวข้องคือ&lt;br /&gt;
* max_fails -- คือจำนวนครั้งที่ไม่สามารถติดต่อ server ได้แล้วจะถือว่า server  นั้น down, server มี down จะไม่ถูกส่ง request ไปอีก ค่า default คือ 1&lt;br /&gt;
* fail_timeout -- คือระยะเวลาที่หลังจาก server down แล้วจะส่ง request ไปตรวจสอบว่ายังติดต่อได้หรือไม่ถ้าติดต่อได้จะถือว่า server up มาอีกครั้งและส่ง request ไปยัง server นั้นตามปกติ ค่า default คือ 10 วินาที&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 max_fails=3 fail_timeout=15s;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง === &lt;br /&gt;
[http://nginx.org/en/docs/ http://nginx.org/en/docs/]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://nginx.org/en/docs/http/load_balancing.html http://nginx.org/en/docs/http/load_balancing.html]&lt;br /&gt;
&lt;br /&gt;
== SSL offload ==&lt;br /&gt;
ใช้ nginx ทำ https server เพื่อให้บริการ https ได้โดยใช้ [https://letsencrypt.org/ Let&amp;#039;s encrypt ] บริการ SSL certificate ฟรี&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Ssl-offload.png|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ติดตั้ง certbot ===&lt;br /&gt;
certbot เป็นเครื่องมือติดตั้ง certificate จาก let&amp;#039;s encrypt และช่วยต่ออายุ certificate ให้อัตโนมัติ&amp;lt;br&amp;gt;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install software-properties-common&lt;br /&gt;
add-apt-repository ppa:certbot/certbot&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install python-certbot-nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ใช้ certbot ตั้งค่า nginx ให้เปิดใช้ https ===&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
certbot --nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ให้ระบุอีเมลแจ้งเตือน cert หมดอายุและยอมรับข้อตกลงการใช้งาน&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# certbot --nginx&lt;br /&gt;
Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;br /&gt;
Plugins selected: Authenticator nginx, Installer nginx&lt;br /&gt;
Enter email address (used for urgent renewal and security notices) (Enter &amp;#039;c&amp;#039; to&lt;br /&gt;
cancel): supawit.w@cmu.ac.th&lt;br /&gt;
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Please read the Terms of Service at&lt;br /&gt;
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must&lt;br /&gt;
agree in order to register with the ACME server at&lt;br /&gt;
https://acme-v01.api.letsencrypt.org/directory&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
(A)gree/(C)ancel:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะอ่าน config จาก nginx และให้เลือกว่าจะเปิด https ที่เว็บไซต์ใด ในตัวอย่างจะเลือก www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Starting new HTTPS connection (1): supporters.eff.org&lt;br /&gt;
&lt;br /&gt;
Which names would you like to activate HTTPS for?&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: www1.demo.cloud.cmu.ac.th&lt;br /&gt;
2: www2.demo.cloud.cmu.ac.th&lt;br /&gt;
3: www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate numbers separated by commas and/or spaces, or leave input&lt;br /&gt;
blank to select all options shown (Enter &amp;#039;c&amp;#039; to cancel): 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะให้เลือกว่าจะให้ตั้งค่าการ redirect http เป็น https ทั้งหมด แนะนำให้เลือก redirect ทั้งหมดโดยการตอบ 2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Obtaining a new certificate&lt;br /&gt;
Resetting dropped connection: acme-v01.api.letsencrypt.org&lt;br /&gt;
Performing the following challenges:&lt;br /&gt;
http-01 challenge for www3.demo.cloud.cmu.ac.th&lt;br /&gt;
Waiting for verification...&lt;br /&gt;
Cleaning up challenges&lt;br /&gt;
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: No redirect - Make no further changes to the webserver configuration.&lt;br /&gt;
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for&lt;br /&gt;
new sites, or if you&amp;#039;re confident your site works on HTTPS. You can undo this&lt;br /&gt;
change by editing your web server&amp;#039;s configuration.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate number [1-2] then [enter] (press &amp;#039;c&amp;#039; to cancel): 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
certbot จะทำการสรุปผลการติดตั้ง certificate และ reload nginx ให้อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Congratulations! You have successfully enabled https://www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&lt;br /&gt;
You should test your configuration at:&lt;br /&gt;
https://www.ssllabs.com/ssltest/analyze.html?d=www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
IMPORTANT NOTES:&lt;br /&gt;
 - Congratulations! Your certificate and chain have been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem&lt;br /&gt;
   Your key file has been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem&lt;br /&gt;
   Your cert will expire on 2018-09-11. To obtain a new or tweaked&lt;br /&gt;
   version of this certificate in the future, simply run certbot again&lt;br /&gt;
   with the &amp;quot;certonly&amp;quot; option. To non-interactively renew *all* of&lt;br /&gt;
   your certificates, run &amp;quot;certbot renew&amp;quot;&lt;br /&gt;
 - Your account credentials have been saved in your Certbot&lt;br /&gt;
   configuration directory at /etc/letsencrypt. You should make a&lt;br /&gt;
   secure backup of this folder now. This configuration directory will&lt;br /&gt;
   also contain certificates and private keys obtained by Certbot so&lt;br /&gt;
   making regular backups of this folder is ideal.&lt;br /&gt;
 - If you like Certbot, please consider supporting our work by:&lt;br /&gt;
&lt;br /&gt;
   Donating to ISRG / Let&amp;#039;s Encrypt:   https://letsencrypt.org/donate&lt;br /&gt;
   Donating to EFF:                    https://eff.org/donate-le&lt;br /&gt;
&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th จะเห็นว่าเป็น https และ browser รองรับ&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:05-www3-https.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ดูว่า certbot ทำอะไร ===&lt;br /&gt;
มีการเพิ่ม crontab เพื่อให้ต่ออายุ certificate อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# cat /etc/cron.d/certbot&lt;br /&gt;
# /etc/cron.d/certbot: crontab entries for the certbot package&lt;br /&gt;
#&lt;br /&gt;
# Upstream recommends attempting renewal twice a day&lt;br /&gt;
#&lt;br /&gt;
# Eventually, this will be an opportunity to validate certificates&lt;br /&gt;
# haven&amp;#039;t been revoked, etc.  Renewal will only occur if expiration&lt;br /&gt;
# is within 30 days.&lt;br /&gt;
SHELL=/bin/sh&lt;br /&gt;
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;
&lt;br /&gt;
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system &amp;amp;&amp;amp; perl -e &amp;#039;sleep int(rand(3600))&amp;#039; &amp;amp;&amp;amp; certbot -q renew&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
เข้าไปแก้ไข nginx config file ให้อัตโนมัติ&lt;br /&gt;
ลองเข้าไปดู file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    listen 443 ssl; # managed by Certbot&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem; # managed by Certbot&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem; # managed by Certbot&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    if ($host = www3.demo.cloud.cmu.ac.th) {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    } # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
    return 404; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง ===&lt;br /&gt;
[https://letsencrypt.org/ https://letsencrypt.org/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx]&lt;br /&gt;
== บทส่งท้าย ==&lt;br /&gt;
บทความนี้แสดงถึงการตั้งค่า reverse proxy เบื้องต้น ในการใช้งานจริงอาจจะต้องมีการ fine tune ค่าต่าง ๆ เพิ่มเติมกรณีที่ web application ต้องการรองรับ request จำนวนมาก&lt;br /&gt;
หรือมีความต้องการเฉพาะอาจจะต้องใช้เทคนิคอื่น ๆ เพิ่มเติมเช่น static file caching ซึ่งต้องศึกษาเพิ่มเติมต่อยอดจากบทความนี้ต่อไป หวังว่าบทความนี้จะช่วยปูพื้นฐานให้เข้าใจ concept ของ reverse proxy และการทำ SSL offload &lt;br /&gt;
== สอบถามเพิ่มเติม ==&lt;br /&gt;
ผู้เขียน : ศุภวิทย์ วรรณภิละ วิศวกร ฝ่ายระบบเครือข่าย สำนักบริการเทคโนโลยีสารสนเทศ มหาวิทยาลัยเชียงใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
email : [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&amp;lt;br&amp;gt;&lt;br /&gt;
โทรศัพท์ : 0-5394-3853&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5227</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5227"/>
		<updated>2025-10-27T08:50:59Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* เพิ่ม alias บน nginx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
เนื่องจากสำนักได้ให้บริการ private cloud แก่ส่วนงานต่าง ๆ ในรูปแบบ Infrastructure as a service นั้น&amp;lt;br&amp;gt;&lt;br /&gt;
โดยปกติ work load ที่ deploy นั้นสามารถ run application ต่าง ๆ ได้แล้วติดต่อกันได้ผ่านระบบเครือข่ายภายใน&amp;lt;br&amp;gt;&lt;br /&gt;
ส่วน application ที่ต้องบริการทั่วไปโดยต้องรับการติดต่อจาก Internet ซึ่งส่วนใหญ่จะเป็น web application&amp;lt;br&amp;gt;&lt;br /&gt;
เพื่อให้ผู้ใช้งานจาก Internet ใช้งานเว็บไซต์ที่อยู่บน cloud ของส่วนงานได้ ทางสำนักจะมี Public IP address ให้กับ cloud ของส่วนงาน 1 หมายเลขต่อ cloud&amp;lt;br&amp;gt;&lt;br /&gt;
แล้วจะทำการแปลง Public IP เป็น Private IP ให้โดยการทำ port forwarding หรือ destination NAT &amp;lt;br&amp;gt;&lt;br /&gt;
โดย work load ที่เป็นปลายทาง NAT จะต้องเป็น reverse proxy เพื่อที่จะทำให้สามารถให้บริการหลาย ๆ เว็บไซต์ได้&amp;lt;br&amp;gt;&lt;br /&gt;
บทความนี้จะสาธิตการตั้งค่าใช้งาน nginx ซึ่งเป็น reverse proxy ที่ใช้งานกันอย่างแพร่หลายเพื่อที่ทางส่วนงานจะได้นำไปประบุกต์ใช้กับระบบของส่วนงานต่อไป&amp;lt;br&amp;gt;&lt;br /&gt;
และในท้ายบทความจะแนะนำการใช้งาน ssl certificate สำหรับการเข้ารหัสเว็บไซต์แบบฟรี&lt;br /&gt;
&lt;br /&gt;
== Reverse Proxy ==&lt;br /&gt;
&lt;br /&gt;
=== Lab Diagram ===&lt;br /&gt;
[[File:Cloud nginx.png|link=]]&amp;lt;br&amp;gt;&lt;br /&gt;
จากรูปภาพใน lab นี้จะใช้ nginx ทำ reverse proxy ในรูปแบบที่ใช้งานกันทั่ว ๆ ไป&amp;lt;br&amp;gt;&lt;br /&gt;
จะใช้ server 4 เครื่อง เป็น nginx 1 เครื่อง และเป็น web application node 3 เครื่อง&amp;lt;br&amp;gt;&lt;br /&gt;
1. nginx(สีขาว) ip X.X.X.10&amp;lt;br&amp;gt;&lt;br /&gt;
2. web-node-a(สีฟ้า) ip X.X.X.11&amp;lt;br&amp;gt;&lt;br /&gt;
3. web-node-b(สีเขียว) ip X.X.X.12&amp;lt;br&amp;gt;&lt;br /&gt;
4. web-node-c(สีส้ม) ip X.X.X.13&amp;lt;br&amp;gt;&lt;br /&gt;
โดยที่ www1.demo.cloud.cmu.ac.th, www2.demo.cloud.cmu.ac.th, www3.demo.cloud.cmu.ac.th จะลงทะเบียนโดเมนเป็น public ip ขานอกและ DNAT มาที่ ip private ของ nginx&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า IP Address Server ===&lt;br /&gt;
ตั้งค่า IP address เครื่อง nginx, web-node-a, web-node-b, web-node-c โดยให้ X เป็น .10, .11, .12, .13 ตามลำดับ Y คือ ip address ที่ได้รับ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sed -i &amp;#039;s/dhcp/static/g&amp;#039; /etc/network/interfaces&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
address Y.Y.Y.X&lt;br /&gt;
netmask 255.255.255.0&lt;br /&gt;
gateway Y.Y.Y.1&lt;br /&gt;
dns-nameservers 10.8.8.8 8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
ifdown ens3 ; ifup ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า hostname server ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;บทความนี้ใช้ ubuntu 16.04&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;nginx&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) nginx&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง โดยที่ X=a,b หรือ c ตาม server ที่รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;web-node-X&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) web-node-X&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=web-node-X&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy ทั่วไป ===&lt;br /&gt;
&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-general.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า web application ตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
tasksel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
จากนั้นเลือก LAMP server แล้ว OK แล้วทำตามขั้นตอน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:01-tasksel.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
==== แก้ไขไฟล์หน้าเว็บตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a และ web-node-b รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า nginx ====&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt install nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
เพิ่ม file config สำหรับ web site www1.demo.cloud.cmu.ac.th และ www2.demo.cloud.cmu.ac.th&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www1.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www1.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www1.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www1.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www2.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www2.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx เพื่อให้อ่านค่า file config ใหม่แล้วทดสอบเรียกใช้งาน web site&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy Alias ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-alias.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ย่อย ====&lt;br /&gt;
ที่เครื่อง web-node-a สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www2-a&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www2-a/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config ของ apache2 สำหรับเว็บใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www2-a.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www2-a.conf&lt;br /&gt;
Listen 82&lt;br /&gt;
&amp;lt;VirtualHost *:82&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www2-a/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== เพิ่ม alias บน nginx ====&lt;br /&gt;
ที่เครื่อง nginx แก้ไขไฟล์ &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www2.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www2.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
        location /a {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11:82/;&lt;br /&gt;
        }&lt;br /&gt;
        location /b {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.13/;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx แล้วทดสอบเรียกเว็บไซต์&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy load balance ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-load-balance.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ใหม่ ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www3&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www3/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config apache2 สำหรับเว็บไซต์ใหม่&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www3.conf&lt;br /&gt;
Listen 81&lt;br /&gt;
&amp;lt;VirtualHost *:81&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www3/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ตั้งค่า nginx แบบ load balance ====&lt;br /&gt;
เพิ่ม file config nginx &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.X.cm.edu;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload nginx&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th แล้ว refresh จะเห็นว่าจะมีการเปลี่ยน node ไปเรื่อย ๆ&lt;br /&gt;
&lt;br /&gt;
==== ประเภทของ load balance ====&lt;br /&gt;
* round-robin -- คือสลับวนไปเรื่อย ๆ ในแต่ละ request เป็นค่า default &lt;br /&gt;
* least-connected -- คือ request ถัดดไปจะถูกส่งไปยัง server ที่มี active connection น้อยที่สุด&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        least_conn;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ip-hash -- ใช้ ip address ของ client เป็นตัวตัดสินใจว่าจะส่ง request ไปยัง server ไหน ต้องใช้วิธีนี้เพื่อที่จะทำ Session persistence&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        ip_hash;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Weighted load balancing ====&lt;br /&gt;
เป็นการส่ง request ไปยัง server แบบมีน้ำหนัก เช่นในตัวอย่าง server 10.110.0.61 จะถูกส่ง request มากกว่า server อื่น&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 weight=3;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Health checks ====&lt;br /&gt;
nginx จะใช้ request จริงในการตรวจสอบว่า upstream server ยังใช้งานได้อยู่หรือไม่โดยมีตัวแปรสองค่าที่เดี่ยวข้องคือ&lt;br /&gt;
* max_fails -- คือจำนวนครั้งที่ไม่สามารถติดต่อ server ได้แล้วจะถือว่า server  นั้น down, server มี down จะไม่ถูกส่ง request ไปอีก ค่า default คือ 1&lt;br /&gt;
* fail_timeout -- คือระยะเวลาที่หลังจาก server down แล้วจะส่ง request ไปตรวจสอบว่ายังติดต่อได้หรือไม่ถ้าติดต่อได้จะถือว่า server up มาอีกครั้งและส่ง request ไปยัง server นั้นตามปกติ ค่า default คือ 10 วินาที&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 max_fails=3 fail_timeout=15s;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง === &lt;br /&gt;
[http://nginx.org/en/docs/ http://nginx.org/en/docs/]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://nginx.org/en/docs/http/load_balancing.html http://nginx.org/en/docs/http/load_balancing.html]&lt;br /&gt;
&lt;br /&gt;
== SSL offload ==&lt;br /&gt;
ใช้ nginx ทำ https server เพื่อให้บริการ https ได้โดยใช้ [https://letsencrypt.org/ Let&amp;#039;s encrypt ] บริการ SSL certificate ฟรี&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Ssl-offload.png|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ติดตั้ง certbot ===&lt;br /&gt;
certbot เป็นเครื่องมือติดตั้ง certificate จาก let&amp;#039;s encrypt และช่วยต่ออายุ certificate ให้อัตโนมัติ&amp;lt;br&amp;gt;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install software-properties-common&lt;br /&gt;
add-apt-repository ppa:certbot/certbot&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install python-certbot-nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ใช้ certbot ตั้งค่า nginx ให้เปิดใช้ https ===&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
certbot --nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ให้ระบุอีเมลแจ้งเตือน cert หมดอายุและยอมรับข้อตกลงการใช้งาน&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# certbot --nginx&lt;br /&gt;
Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;br /&gt;
Plugins selected: Authenticator nginx, Installer nginx&lt;br /&gt;
Enter email address (used for urgent renewal and security notices) (Enter &amp;#039;c&amp;#039; to&lt;br /&gt;
cancel): supawit.w@cmu.ac.th&lt;br /&gt;
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Please read the Terms of Service at&lt;br /&gt;
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must&lt;br /&gt;
agree in order to register with the ACME server at&lt;br /&gt;
https://acme-v01.api.letsencrypt.org/directory&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
(A)gree/(C)ancel:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะอ่าน config จาก nginx และให้เลือกว่าจะเปิด https ที่เว็บไซต์ใด ในตัวอย่างจะเลือก www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Starting new HTTPS connection (1): supporters.eff.org&lt;br /&gt;
&lt;br /&gt;
Which names would you like to activate HTTPS for?&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: www1.demo.cloud.cmu.ac.th&lt;br /&gt;
2: www2.demo.cloud.cmu.ac.th&lt;br /&gt;
3: www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate numbers separated by commas and/or spaces, or leave input&lt;br /&gt;
blank to select all options shown (Enter &amp;#039;c&amp;#039; to cancel): 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะให้เลือกว่าจะให้ตั้งค่าการ redirect http เป็น https ทั้งหมด แนะนำให้เลือก redirect ทั้งหมดโดยการตอบ 2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Obtaining a new certificate&lt;br /&gt;
Resetting dropped connection: acme-v01.api.letsencrypt.org&lt;br /&gt;
Performing the following challenges:&lt;br /&gt;
http-01 challenge for www3.demo.cloud.cmu.ac.th&lt;br /&gt;
Waiting for verification...&lt;br /&gt;
Cleaning up challenges&lt;br /&gt;
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: No redirect - Make no further changes to the webserver configuration.&lt;br /&gt;
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for&lt;br /&gt;
new sites, or if you&amp;#039;re confident your site works on HTTPS. You can undo this&lt;br /&gt;
change by editing your web server&amp;#039;s configuration.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate number [1-2] then [enter] (press &amp;#039;c&amp;#039; to cancel): 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
certbot จะทำการสรุปผลการติดตั้ง certificate และ reload nginx ให้อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Congratulations! You have successfully enabled https://www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&lt;br /&gt;
You should test your configuration at:&lt;br /&gt;
https://www.ssllabs.com/ssltest/analyze.html?d=www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
IMPORTANT NOTES:&lt;br /&gt;
 - Congratulations! Your certificate and chain have been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem&lt;br /&gt;
   Your key file has been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem&lt;br /&gt;
   Your cert will expire on 2018-09-11. To obtain a new or tweaked&lt;br /&gt;
   version of this certificate in the future, simply run certbot again&lt;br /&gt;
   with the &amp;quot;certonly&amp;quot; option. To non-interactively renew *all* of&lt;br /&gt;
   your certificates, run &amp;quot;certbot renew&amp;quot;&lt;br /&gt;
 - Your account credentials have been saved in your Certbot&lt;br /&gt;
   configuration directory at /etc/letsencrypt. You should make a&lt;br /&gt;
   secure backup of this folder now. This configuration directory will&lt;br /&gt;
   also contain certificates and private keys obtained by Certbot so&lt;br /&gt;
   making regular backups of this folder is ideal.&lt;br /&gt;
 - If you like Certbot, please consider supporting our work by:&lt;br /&gt;
&lt;br /&gt;
   Donating to ISRG / Let&amp;#039;s Encrypt:   https://letsencrypt.org/donate&lt;br /&gt;
   Donating to EFF:                    https://eff.org/donate-le&lt;br /&gt;
&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th จะเห็นว่าเป็น https และ browser รองรับ&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:05-www3-https.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ดูว่า certbot ทำอะไร ===&lt;br /&gt;
มีการเพิ่ม crontab เพื่อให้ต่ออายุ certificate อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# cat /etc/cron.d/certbot&lt;br /&gt;
# /etc/cron.d/certbot: crontab entries for the certbot package&lt;br /&gt;
#&lt;br /&gt;
# Upstream recommends attempting renewal twice a day&lt;br /&gt;
#&lt;br /&gt;
# Eventually, this will be an opportunity to validate certificates&lt;br /&gt;
# haven&amp;#039;t been revoked, etc.  Renewal will only occur if expiration&lt;br /&gt;
# is within 30 days.&lt;br /&gt;
SHELL=/bin/sh&lt;br /&gt;
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;
&lt;br /&gt;
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system &amp;amp;&amp;amp; perl -e &amp;#039;sleep int(rand(3600))&amp;#039; &amp;amp;&amp;amp; certbot -q renew&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
เข้าไปแก้ไข nginx config file ให้อัตโนมัติ&lt;br /&gt;
ลองเข้าไปดู file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    listen 443 ssl; # managed by Certbot&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem; # managed by Certbot&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem; # managed by Certbot&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    if ($host = www3.demo.cloud.cmu.ac.th) {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    } # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
    return 404; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง ===&lt;br /&gt;
[https://letsencrypt.org/ https://letsencrypt.org/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx]&lt;br /&gt;
== บทส่งท้าย ==&lt;br /&gt;
บทความนี้แสดงถึงการตั้งค่า reverse proxy เบื้องต้น ในการใช้งานจริงอาจจะต้องมีการ fine tune ค่าต่าง ๆ เพิ่มเติมกรณีที่ web application ต้องการรองรับ request จำนวนมาก&lt;br /&gt;
หรือมีความต้องการเฉพาะอาจจะต้องใช้เทคนิคอื่น ๆ เพิ่มเติมเช่น static file caching ซึ่งต้องศึกษาเพิ่มเติมต่อยอดจากบทความนี้ต่อไป หวังว่าบทความนี้จะช่วยปูพื้นฐานให้เข้าใจ concept ของ reverse proxy และการทำ SSL offload &lt;br /&gt;
== สอบถามเพิ่มเติม ==&lt;br /&gt;
ผู้เขียน : ศุภวิทย์ วรรณภิละ วิศวกร ฝ่ายระบบเครือข่าย สำนักบริการเทคโนโลยีสารสนเทศ มหาวิทยาลัยเชียงใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
email : [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&amp;lt;br&amp;gt;&lt;br /&gt;
โทรศัพท์ : 0-5394-3853&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5226</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5226"/>
		<updated>2025-10-27T08:50:37Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* ติดตั้งและตั้งค่า nginx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
เนื่องจากสำนักได้ให้บริการ private cloud แก่ส่วนงานต่าง ๆ ในรูปแบบ Infrastructure as a service นั้น&amp;lt;br&amp;gt;&lt;br /&gt;
โดยปกติ work load ที่ deploy นั้นสามารถ run application ต่าง ๆ ได้แล้วติดต่อกันได้ผ่านระบบเครือข่ายภายใน&amp;lt;br&amp;gt;&lt;br /&gt;
ส่วน application ที่ต้องบริการทั่วไปโดยต้องรับการติดต่อจาก Internet ซึ่งส่วนใหญ่จะเป็น web application&amp;lt;br&amp;gt;&lt;br /&gt;
เพื่อให้ผู้ใช้งานจาก Internet ใช้งานเว็บไซต์ที่อยู่บน cloud ของส่วนงานได้ ทางสำนักจะมี Public IP address ให้กับ cloud ของส่วนงาน 1 หมายเลขต่อ cloud&amp;lt;br&amp;gt;&lt;br /&gt;
แล้วจะทำการแปลง Public IP เป็น Private IP ให้โดยการทำ port forwarding หรือ destination NAT &amp;lt;br&amp;gt;&lt;br /&gt;
โดย work load ที่เป็นปลายทาง NAT จะต้องเป็น reverse proxy เพื่อที่จะทำให้สามารถให้บริการหลาย ๆ เว็บไซต์ได้&amp;lt;br&amp;gt;&lt;br /&gt;
บทความนี้จะสาธิตการตั้งค่าใช้งาน nginx ซึ่งเป็น reverse proxy ที่ใช้งานกันอย่างแพร่หลายเพื่อที่ทางส่วนงานจะได้นำไปประบุกต์ใช้กับระบบของส่วนงานต่อไป&amp;lt;br&amp;gt;&lt;br /&gt;
และในท้ายบทความจะแนะนำการใช้งาน ssl certificate สำหรับการเข้ารหัสเว็บไซต์แบบฟรี&lt;br /&gt;
&lt;br /&gt;
== Reverse Proxy ==&lt;br /&gt;
&lt;br /&gt;
=== Lab Diagram ===&lt;br /&gt;
[[File:Cloud nginx.png|link=]]&amp;lt;br&amp;gt;&lt;br /&gt;
จากรูปภาพใน lab นี้จะใช้ nginx ทำ reverse proxy ในรูปแบบที่ใช้งานกันทั่ว ๆ ไป&amp;lt;br&amp;gt;&lt;br /&gt;
จะใช้ server 4 เครื่อง เป็น nginx 1 เครื่อง และเป็น web application node 3 เครื่อง&amp;lt;br&amp;gt;&lt;br /&gt;
1. nginx(สีขาว) ip X.X.X.10&amp;lt;br&amp;gt;&lt;br /&gt;
2. web-node-a(สีฟ้า) ip X.X.X.11&amp;lt;br&amp;gt;&lt;br /&gt;
3. web-node-b(สีเขียว) ip X.X.X.12&amp;lt;br&amp;gt;&lt;br /&gt;
4. web-node-c(สีส้ม) ip X.X.X.13&amp;lt;br&amp;gt;&lt;br /&gt;
โดยที่ www1.demo.cloud.cmu.ac.th, www2.demo.cloud.cmu.ac.th, www3.demo.cloud.cmu.ac.th จะลงทะเบียนโดเมนเป็น public ip ขานอกและ DNAT มาที่ ip private ของ nginx&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า IP Address Server ===&lt;br /&gt;
ตั้งค่า IP address เครื่อง nginx, web-node-a, web-node-b, web-node-c โดยให้ X เป็น .10, .11, .12, .13 ตามลำดับ Y คือ ip address ที่ได้รับ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sed -i &amp;#039;s/dhcp/static/g&amp;#039; /etc/network/interfaces&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
address Y.Y.Y.X&lt;br /&gt;
netmask 255.255.255.0&lt;br /&gt;
gateway Y.Y.Y.1&lt;br /&gt;
dns-nameservers 10.8.8.8 8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
ifdown ens3 ; ifup ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า hostname server ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;บทความนี้ใช้ ubuntu 16.04&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;nginx&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) nginx&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง โดยที่ X=a,b หรือ c ตาม server ที่รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;web-node-X&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) web-node-X&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=web-node-X&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy ทั่วไป ===&lt;br /&gt;
&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-general.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า web application ตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
tasksel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
จากนั้นเลือก LAMP server แล้ว OK แล้วทำตามขั้นตอน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:01-tasksel.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
==== แก้ไขไฟล์หน้าเว็บตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a และ web-node-b รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า nginx ====&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt install nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
เพิ่ม file config สำหรับ web site www1.demo.cloud.cmu.ac.th และ www2.demo.cloud.cmu.ac.th&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www1.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www1.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www1.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www1.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www2.X.cm.edu-access.log;&lt;br /&gt;
        error_log /var/log/nginx/www2.X.cm.edu-error.log;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx เพื่อให้อ่านค่า file config ใหม่แล้วทดสอบเรียกใช้งาน web site&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy Alias ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-alias.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ย่อย ====&lt;br /&gt;
ที่เครื่อง web-node-a สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www2-a&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www2-a/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config ของ apache2 สำหรับเว็บใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www2-a.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www2-a.conf&lt;br /&gt;
Listen 82&lt;br /&gt;
&amp;lt;VirtualHost *:82&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www2-a/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== เพิ่ม alias บน nginx ====&lt;br /&gt;
ที่เครื่อง nginx แก้ไขไฟล์ &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
        location /a {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11:82/;&lt;br /&gt;
        }&lt;br /&gt;
        location /b {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.13/;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx แล้วทดสอบเรียกเว็บไซต์&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy load balance ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-load-balance.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ใหม่ ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www3&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www3/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config apache2 สำหรับเว็บไซต์ใหม่&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www3.conf&lt;br /&gt;
Listen 81&lt;br /&gt;
&amp;lt;VirtualHost *:81&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www3/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ตั้งค่า nginx แบบ load balance ====&lt;br /&gt;
เพิ่ม file config nginx &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.X.cm.edu;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload nginx&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th แล้ว refresh จะเห็นว่าจะมีการเปลี่ยน node ไปเรื่อย ๆ&lt;br /&gt;
&lt;br /&gt;
==== ประเภทของ load balance ====&lt;br /&gt;
* round-robin -- คือสลับวนไปเรื่อย ๆ ในแต่ละ request เป็นค่า default &lt;br /&gt;
* least-connected -- คือ request ถัดดไปจะถูกส่งไปยัง server ที่มี active connection น้อยที่สุด&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        least_conn;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ip-hash -- ใช้ ip address ของ client เป็นตัวตัดสินใจว่าจะส่ง request ไปยัง server ไหน ต้องใช้วิธีนี้เพื่อที่จะทำ Session persistence&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        ip_hash;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Weighted load balancing ====&lt;br /&gt;
เป็นการส่ง request ไปยัง server แบบมีน้ำหนัก เช่นในตัวอย่าง server 10.110.0.61 จะถูกส่ง request มากกว่า server อื่น&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 weight=3;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Health checks ====&lt;br /&gt;
nginx จะใช้ request จริงในการตรวจสอบว่า upstream server ยังใช้งานได้อยู่หรือไม่โดยมีตัวแปรสองค่าที่เดี่ยวข้องคือ&lt;br /&gt;
* max_fails -- คือจำนวนครั้งที่ไม่สามารถติดต่อ server ได้แล้วจะถือว่า server  นั้น down, server มี down จะไม่ถูกส่ง request ไปอีก ค่า default คือ 1&lt;br /&gt;
* fail_timeout -- คือระยะเวลาที่หลังจาก server down แล้วจะส่ง request ไปตรวจสอบว่ายังติดต่อได้หรือไม่ถ้าติดต่อได้จะถือว่า server up มาอีกครั้งและส่ง request ไปยัง server นั้นตามปกติ ค่า default คือ 10 วินาที&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 max_fails=3 fail_timeout=15s;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง === &lt;br /&gt;
[http://nginx.org/en/docs/ http://nginx.org/en/docs/]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://nginx.org/en/docs/http/load_balancing.html http://nginx.org/en/docs/http/load_balancing.html]&lt;br /&gt;
&lt;br /&gt;
== SSL offload ==&lt;br /&gt;
ใช้ nginx ทำ https server เพื่อให้บริการ https ได้โดยใช้ [https://letsencrypt.org/ Let&amp;#039;s encrypt ] บริการ SSL certificate ฟรี&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Ssl-offload.png|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ติดตั้ง certbot ===&lt;br /&gt;
certbot เป็นเครื่องมือติดตั้ง certificate จาก let&amp;#039;s encrypt และช่วยต่ออายุ certificate ให้อัตโนมัติ&amp;lt;br&amp;gt;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install software-properties-common&lt;br /&gt;
add-apt-repository ppa:certbot/certbot&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install python-certbot-nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ใช้ certbot ตั้งค่า nginx ให้เปิดใช้ https ===&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
certbot --nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ให้ระบุอีเมลแจ้งเตือน cert หมดอายุและยอมรับข้อตกลงการใช้งาน&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# certbot --nginx&lt;br /&gt;
Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;br /&gt;
Plugins selected: Authenticator nginx, Installer nginx&lt;br /&gt;
Enter email address (used for urgent renewal and security notices) (Enter &amp;#039;c&amp;#039; to&lt;br /&gt;
cancel): supawit.w@cmu.ac.th&lt;br /&gt;
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Please read the Terms of Service at&lt;br /&gt;
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must&lt;br /&gt;
agree in order to register with the ACME server at&lt;br /&gt;
https://acme-v01.api.letsencrypt.org/directory&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
(A)gree/(C)ancel:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะอ่าน config จาก nginx และให้เลือกว่าจะเปิด https ที่เว็บไซต์ใด ในตัวอย่างจะเลือก www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Starting new HTTPS connection (1): supporters.eff.org&lt;br /&gt;
&lt;br /&gt;
Which names would you like to activate HTTPS for?&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: www1.demo.cloud.cmu.ac.th&lt;br /&gt;
2: www2.demo.cloud.cmu.ac.th&lt;br /&gt;
3: www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate numbers separated by commas and/or spaces, or leave input&lt;br /&gt;
blank to select all options shown (Enter &amp;#039;c&amp;#039; to cancel): 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะให้เลือกว่าจะให้ตั้งค่าการ redirect http เป็น https ทั้งหมด แนะนำให้เลือก redirect ทั้งหมดโดยการตอบ 2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Obtaining a new certificate&lt;br /&gt;
Resetting dropped connection: acme-v01.api.letsencrypt.org&lt;br /&gt;
Performing the following challenges:&lt;br /&gt;
http-01 challenge for www3.demo.cloud.cmu.ac.th&lt;br /&gt;
Waiting for verification...&lt;br /&gt;
Cleaning up challenges&lt;br /&gt;
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: No redirect - Make no further changes to the webserver configuration.&lt;br /&gt;
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for&lt;br /&gt;
new sites, or if you&amp;#039;re confident your site works on HTTPS. You can undo this&lt;br /&gt;
change by editing your web server&amp;#039;s configuration.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate number [1-2] then [enter] (press &amp;#039;c&amp;#039; to cancel): 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
certbot จะทำการสรุปผลการติดตั้ง certificate และ reload nginx ให้อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Congratulations! You have successfully enabled https://www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&lt;br /&gt;
You should test your configuration at:&lt;br /&gt;
https://www.ssllabs.com/ssltest/analyze.html?d=www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
IMPORTANT NOTES:&lt;br /&gt;
 - Congratulations! Your certificate and chain have been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem&lt;br /&gt;
   Your key file has been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem&lt;br /&gt;
   Your cert will expire on 2018-09-11. To obtain a new or tweaked&lt;br /&gt;
   version of this certificate in the future, simply run certbot again&lt;br /&gt;
   with the &amp;quot;certonly&amp;quot; option. To non-interactively renew *all* of&lt;br /&gt;
   your certificates, run &amp;quot;certbot renew&amp;quot;&lt;br /&gt;
 - Your account credentials have been saved in your Certbot&lt;br /&gt;
   configuration directory at /etc/letsencrypt. You should make a&lt;br /&gt;
   secure backup of this folder now. This configuration directory will&lt;br /&gt;
   also contain certificates and private keys obtained by Certbot so&lt;br /&gt;
   making regular backups of this folder is ideal.&lt;br /&gt;
 - If you like Certbot, please consider supporting our work by:&lt;br /&gt;
&lt;br /&gt;
   Donating to ISRG / Let&amp;#039;s Encrypt:   https://letsencrypt.org/donate&lt;br /&gt;
   Donating to EFF:                    https://eff.org/donate-le&lt;br /&gt;
&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th จะเห็นว่าเป็น https และ browser รองรับ&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:05-www3-https.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ดูว่า certbot ทำอะไร ===&lt;br /&gt;
มีการเพิ่ม crontab เพื่อให้ต่ออายุ certificate อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# cat /etc/cron.d/certbot&lt;br /&gt;
# /etc/cron.d/certbot: crontab entries for the certbot package&lt;br /&gt;
#&lt;br /&gt;
# Upstream recommends attempting renewal twice a day&lt;br /&gt;
#&lt;br /&gt;
# Eventually, this will be an opportunity to validate certificates&lt;br /&gt;
# haven&amp;#039;t been revoked, etc.  Renewal will only occur if expiration&lt;br /&gt;
# is within 30 days.&lt;br /&gt;
SHELL=/bin/sh&lt;br /&gt;
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;
&lt;br /&gt;
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system &amp;amp;&amp;amp; perl -e &amp;#039;sleep int(rand(3600))&amp;#039; &amp;amp;&amp;amp; certbot -q renew&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
เข้าไปแก้ไข nginx config file ให้อัตโนมัติ&lt;br /&gt;
ลองเข้าไปดู file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    listen 443 ssl; # managed by Certbot&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem; # managed by Certbot&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem; # managed by Certbot&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    if ($host = www3.demo.cloud.cmu.ac.th) {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    } # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
    return 404; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง ===&lt;br /&gt;
[https://letsencrypt.org/ https://letsencrypt.org/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx]&lt;br /&gt;
== บทส่งท้าย ==&lt;br /&gt;
บทความนี้แสดงถึงการตั้งค่า reverse proxy เบื้องต้น ในการใช้งานจริงอาจจะต้องมีการ fine tune ค่าต่าง ๆ เพิ่มเติมกรณีที่ web application ต้องการรองรับ request จำนวนมาก&lt;br /&gt;
หรือมีความต้องการเฉพาะอาจจะต้องใช้เทคนิคอื่น ๆ เพิ่มเติมเช่น static file caching ซึ่งต้องศึกษาเพิ่มเติมต่อยอดจากบทความนี้ต่อไป หวังว่าบทความนี้จะช่วยปูพื้นฐานให้เข้าใจ concept ของ reverse proxy และการทำ SSL offload &lt;br /&gt;
== สอบถามเพิ่มเติม ==&lt;br /&gt;
ผู้เขียน : ศุภวิทย์ วรรณภิละ วิศวกร ฝ่ายระบบเครือข่าย สำนักบริการเทคโนโลยีสารสนเทศ มหาวิทยาลัยเชียงใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
email : [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&amp;lt;br&amp;gt;&lt;br /&gt;
โทรศัพท์ : 0-5394-3853&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5225</id>
		<title>Nginx</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Nginx&amp;diff=5225"/>
		<updated>2025-10-27T08:50:02Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* ติดตั้งและตั้งค่า nginx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
เนื่องจากสำนักได้ให้บริการ private cloud แก่ส่วนงานต่าง ๆ ในรูปแบบ Infrastructure as a service นั้น&amp;lt;br&amp;gt;&lt;br /&gt;
โดยปกติ work load ที่ deploy นั้นสามารถ run application ต่าง ๆ ได้แล้วติดต่อกันได้ผ่านระบบเครือข่ายภายใน&amp;lt;br&amp;gt;&lt;br /&gt;
ส่วน application ที่ต้องบริการทั่วไปโดยต้องรับการติดต่อจาก Internet ซึ่งส่วนใหญ่จะเป็น web application&amp;lt;br&amp;gt;&lt;br /&gt;
เพื่อให้ผู้ใช้งานจาก Internet ใช้งานเว็บไซต์ที่อยู่บน cloud ของส่วนงานได้ ทางสำนักจะมี Public IP address ให้กับ cloud ของส่วนงาน 1 หมายเลขต่อ cloud&amp;lt;br&amp;gt;&lt;br /&gt;
แล้วจะทำการแปลง Public IP เป็น Private IP ให้โดยการทำ port forwarding หรือ destination NAT &amp;lt;br&amp;gt;&lt;br /&gt;
โดย work load ที่เป็นปลายทาง NAT จะต้องเป็น reverse proxy เพื่อที่จะทำให้สามารถให้บริการหลาย ๆ เว็บไซต์ได้&amp;lt;br&amp;gt;&lt;br /&gt;
บทความนี้จะสาธิตการตั้งค่าใช้งาน nginx ซึ่งเป็น reverse proxy ที่ใช้งานกันอย่างแพร่หลายเพื่อที่ทางส่วนงานจะได้นำไปประบุกต์ใช้กับระบบของส่วนงานต่อไป&amp;lt;br&amp;gt;&lt;br /&gt;
และในท้ายบทความจะแนะนำการใช้งาน ssl certificate สำหรับการเข้ารหัสเว็บไซต์แบบฟรี&lt;br /&gt;
&lt;br /&gt;
== Reverse Proxy ==&lt;br /&gt;
&lt;br /&gt;
=== Lab Diagram ===&lt;br /&gt;
[[File:Cloud nginx.png|link=]]&amp;lt;br&amp;gt;&lt;br /&gt;
จากรูปภาพใน lab นี้จะใช้ nginx ทำ reverse proxy ในรูปแบบที่ใช้งานกันทั่ว ๆ ไป&amp;lt;br&amp;gt;&lt;br /&gt;
จะใช้ server 4 เครื่อง เป็น nginx 1 เครื่อง และเป็น web application node 3 เครื่อง&amp;lt;br&amp;gt;&lt;br /&gt;
1. nginx(สีขาว) ip X.X.X.10&amp;lt;br&amp;gt;&lt;br /&gt;
2. web-node-a(สีฟ้า) ip X.X.X.11&amp;lt;br&amp;gt;&lt;br /&gt;
3. web-node-b(สีเขียว) ip X.X.X.12&amp;lt;br&amp;gt;&lt;br /&gt;
4. web-node-c(สีส้ม) ip X.X.X.13&amp;lt;br&amp;gt;&lt;br /&gt;
โดยที่ www1.demo.cloud.cmu.ac.th, www2.demo.cloud.cmu.ac.th, www3.demo.cloud.cmu.ac.th จะลงทะเบียนโดเมนเป็น public ip ขานอกและ DNAT มาที่ ip private ของ nginx&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า IP Address Server ===&lt;br /&gt;
ตั้งค่า IP address เครื่อง nginx, web-node-a, web-node-b, web-node-c โดยให้ X เป็น .10, .11, .12, .13 ตามลำดับ Y คือ ip address ที่ได้รับ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sed -i &amp;#039;s/dhcp/static/g&amp;#039; /etc/network/interfaces&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt; /etc/network/interfaces&lt;br /&gt;
address Y.Y.Y.X&lt;br /&gt;
netmask 255.255.255.0&lt;br /&gt;
gateway Y.Y.Y.1&lt;br /&gt;
dns-nameservers 10.8.8.8 8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
ifdown ens3 ; ifup ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ตั้งค่า hostname server ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;บทความนี้ใช้ ubuntu 16.04&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;nginx&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) nginx&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง โดยที่ X=a,b หรือ c ตาม server ที่รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
echo &amp;quot;web-node-X&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
echo &amp;quot;$(hostname -I) web-node-X&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
sysctl -w kernel.hostname=web-node-X&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy ทั่วไป ===&lt;br /&gt;
&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-general.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า web application ตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
tasksel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
จากนั้นเลือก LAMP server แล้ว OK แล้วทำตามขั้นตอน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:01-tasksel.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
==== แก้ไขไฟล์หน้าเว็บตัวอย่าง ====&lt;br /&gt;
ที่เครื่อง web-node-a และ web-node-b รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ติดตั้งและตั้งค่า nginx ====&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt install nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
เพิ่ม file config สำหรับ web site www1.demo.cloud.cmu.ac.th และ www2.demo.cloud.cmu.ac.th&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www1.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www1.X.cm.edu;&lt;br /&gt;
        access_log /var/log/nginx/www1.X.cm.edu-access.log&lt;br /&gt;
        error_log /var/log/nginx/www1.X.cm.edu-error.log&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx เพื่อให้อ่านค่า file config ใหม่แล้วทดสอบเรียกใช้งาน web site&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy Alias ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-alias.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ย่อย ====&lt;br /&gt;
ที่เครื่อง web-node-a สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www2-a&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www2-a/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config ของ apache2 สำหรับเว็บใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www2-a.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www2-a.conf&lt;br /&gt;
Listen 82&lt;br /&gt;
&amp;lt;VirtualHost *:82&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www2-a/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ที่เครื่อง web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mv /var/www/html/index.{html,html.ori}&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/html/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== เพิ่ม alias บน nginx ====&lt;br /&gt;
ที่เครื่อง nginx แก้ไขไฟล์ &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www2.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www2.X.cm.edu;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.12;&lt;br /&gt;
        }&lt;br /&gt;
        location /a {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.11:82/;&lt;br /&gt;
        }&lt;br /&gt;
        location /b {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://X.X.X.13/;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
reload nginx แล้วทดสอบเรียกเว็บไซต์&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reverse Proxy load balance ===&lt;br /&gt;
==== Diagram ====&lt;br /&gt;
[[File:Nginx-load-balance.png|link=]]&lt;br /&gt;
&lt;br /&gt;
==== สร้างเว็บไซต์ใหม่ ====&lt;br /&gt;
ที่เครื่อง web-node-a, web-node-b และ web-node-c สร้างเว็บไซต์ใหม่&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir -p /var/www/www3&lt;br /&gt;
echo &amp;quot;&amp;lt;?php echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;print_r(\$_SERVER); echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;?&amp;gt;&amp;quot; &amp;gt; /var/www/www3/index.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
สร้าง file config apache2 สำหรับเว็บไซต์ใหม่&lt;br /&gt;
file &amp;#039;&amp;#039;&amp;#039;/etc/apache2/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;&amp;gt;/etc/apache2/sites-enabled/www3.conf&lt;br /&gt;
Listen 81&lt;br /&gt;
&amp;lt;VirtualHost *:81&amp;gt;&lt;br /&gt;
        DocumentRoot /var/www/www3/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload apache2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service apache2 reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ตั้งค่า nginx แบบ load balance ====&lt;br /&gt;
เพิ่ม file config nginx &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.X.cm.edu;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
reload nginx&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
service nginx reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th แล้ว refresh จะเห็นว่าจะมีการเปลี่ยน node ไปเรื่อย ๆ&lt;br /&gt;
&lt;br /&gt;
==== ประเภทของ load balance ====&lt;br /&gt;
* round-robin -- คือสลับวนไปเรื่อย ๆ ในแต่ละ request เป็นค่า default &lt;br /&gt;
* least-connected -- คือ request ถัดดไปจะถูกส่งไปยัง server ที่มี active connection น้อยที่สุด&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        least_conn;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ip-hash -- ใช้ ip address ของ client เป็นตัวตัดสินใจว่าจะส่ง request ไปยัง server ไหน ต้องใช้วิธีนี้เพื่อที่จะทำ Session persistence&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        ip_hash;&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Weighted load balancing ====&lt;br /&gt;
เป็นการส่ง request ไปยัง server แบบมีน้ำหนัก เช่นในตัวอย่าง server 10.110.0.61 จะถูกส่ง request มากกว่า server อื่น&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 weight=3;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Health checks ====&lt;br /&gt;
nginx จะใช้ request จริงในการตรวจสอบว่า upstream server ยังใช้งานได้อยู่หรือไม่โดยมีตัวแปรสองค่าที่เดี่ยวข้องคือ&lt;br /&gt;
* max_fails -- คือจำนวนครั้งที่ไม่สามารถติดต่อ server ได้แล้วจะถือว่า server  นั้น down, server มี down จะไม่ถูกส่ง request ไปอีก ค่า default คือ 1&lt;br /&gt;
* fail_timeout -- คือระยะเวลาที่หลังจาก server down แล้วจะส่ง request ไปตรวจสอบว่ายังติดต่อได้หรือไม่ถ้าติดต่อได้จะถือว่า server up มาอีกครั้งและส่ง request ไปยัง server นั้นตามปกติ ค่า default คือ 10 วินาที&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81 max_fails=3 fail_timeout=15s;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง === &lt;br /&gt;
[http://nginx.org/en/docs/ http://nginx.org/en/docs/]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://nginx.org/en/docs/http/load_balancing.html http://nginx.org/en/docs/http/load_balancing.html]&lt;br /&gt;
&lt;br /&gt;
== SSL offload ==&lt;br /&gt;
ใช้ nginx ทำ https server เพื่อให้บริการ https ได้โดยใช้ [https://letsencrypt.org/ Let&amp;#039;s encrypt ] บริการ SSL certificate ฟรี&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Ssl-offload.png|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ติดตั้ง certbot ===&lt;br /&gt;
certbot เป็นเครื่องมือติดตั้ง certificate จาก let&amp;#039;s encrypt และช่วยต่ออายุ certificate ให้อัตโนมัติ&amp;lt;br&amp;gt;&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install software-properties-common&lt;br /&gt;
add-apt-repository ppa:certbot/certbot&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install python-certbot-nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ใช้ certbot ตั้งค่า nginx ให้เปิดใช้ https ===&lt;br /&gt;
ที่เครื่อง nginx รันคำสั่ง&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
certbot --nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
ให้ระบุอีเมลแจ้งเตือน cert หมดอายุและยอมรับข้อตกลงการใช้งาน&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# certbot --nginx&lt;br /&gt;
Saving debug log to /var/log/letsencrypt/letsencrypt.log&lt;br /&gt;
Plugins selected: Authenticator nginx, Installer nginx&lt;br /&gt;
Enter email address (used for urgent renewal and security notices) (Enter &amp;#039;c&amp;#039; to&lt;br /&gt;
cancel): supawit.w@cmu.ac.th&lt;br /&gt;
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Please read the Terms of Service at&lt;br /&gt;
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must&lt;br /&gt;
agree in order to register with the ACME server at&lt;br /&gt;
https://acme-v01.api.letsencrypt.org/directory&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
(A)gree/(C)ancel:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะอ่าน config จาก nginx และให้เลือกว่าจะเปิด https ที่เว็บไซต์ใด ในตัวอย่างจะเลือก www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Starting new HTTPS connection (1): supporters.eff.org&lt;br /&gt;
&lt;br /&gt;
Which names would you like to activate HTTPS for?&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: www1.demo.cloud.cmu.ac.th&lt;br /&gt;
2: www2.demo.cloud.cmu.ac.th&lt;br /&gt;
3: www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate numbers separated by commas and/or spaces, or leave input&lt;br /&gt;
blank to select all options shown (Enter &amp;#039;c&amp;#039; to cancel): 3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
จากนั้น certbot จะให้เลือกว่าจะให้ตั้งค่าการ redirect http เป็น https ทั้งหมด แนะนำให้เลือก redirect ทั้งหมดโดยการตอบ 2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Obtaining a new certificate&lt;br /&gt;
Resetting dropped connection: acme-v01.api.letsencrypt.org&lt;br /&gt;
Performing the following challenges:&lt;br /&gt;
http-01 challenge for www3.demo.cloud.cmu.ac.th&lt;br /&gt;
Waiting for verification...&lt;br /&gt;
Cleaning up challenges&lt;br /&gt;
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
1: No redirect - Make no further changes to the webserver configuration.&lt;br /&gt;
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for&lt;br /&gt;
new sites, or if you&amp;#039;re confident your site works on HTTPS. You can undo this&lt;br /&gt;
change by editing your web server&amp;#039;s configuration.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Select the appropriate number [1-2] then [enter] (press &amp;#039;c&amp;#039; to cancel): 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
certbot จะทำการสรุปผลการติดตั้ง certificate และ reload nginx ให้อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/www3.conf&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Congratulations! You have successfully enabled https://www3.demo.cloud.cmu.ac.th&lt;br /&gt;
&lt;br /&gt;
You should test your configuration at:&lt;br /&gt;
https://www.ssllabs.com/ssltest/analyze.html?d=www3.demo.cloud.cmu.ac.th&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
IMPORTANT NOTES:&lt;br /&gt;
 - Congratulations! Your certificate and chain have been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem&lt;br /&gt;
   Your key file has been saved at:&lt;br /&gt;
   /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem&lt;br /&gt;
   Your cert will expire on 2018-09-11. To obtain a new or tweaked&lt;br /&gt;
   version of this certificate in the future, simply run certbot again&lt;br /&gt;
   with the &amp;quot;certonly&amp;quot; option. To non-interactively renew *all* of&lt;br /&gt;
   your certificates, run &amp;quot;certbot renew&amp;quot;&lt;br /&gt;
 - Your account credentials have been saved in your Certbot&lt;br /&gt;
   configuration directory at /etc/letsencrypt. You should make a&lt;br /&gt;
   secure backup of this folder now. This configuration directory will&lt;br /&gt;
   also contain certificates and private keys obtained by Certbot so&lt;br /&gt;
   making regular backups of this folder is ideal.&lt;br /&gt;
 - If you like Certbot, please consider supporting our work by:&lt;br /&gt;
&lt;br /&gt;
   Donating to ISRG / Let&amp;#039;s Encrypt:   https://letsencrypt.org/donate&lt;br /&gt;
   Donating to EFF:                    https://eff.org/donate-le&lt;br /&gt;
&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ทดสอบเรียกเว็บไซต์ www3.demo.cloud.cmu.ac.th จะเห็นว่าเป็น https และ browser รองรับ&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:05-www3-https.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== ดูว่า certbot ทำอะไร ===&lt;br /&gt;
มีการเพิ่ม crontab เพื่อให้ต่ออายุ certificate อัตโนมัติ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
root@nginx:~# cat /etc/cron.d/certbot&lt;br /&gt;
# /etc/cron.d/certbot: crontab entries for the certbot package&lt;br /&gt;
#&lt;br /&gt;
# Upstream recommends attempting renewal twice a day&lt;br /&gt;
#&lt;br /&gt;
# Eventually, this will be an opportunity to validate certificates&lt;br /&gt;
# haven&amp;#039;t been revoked, etc.  Renewal will only occur if expiration&lt;br /&gt;
# is within 30 days.&lt;br /&gt;
SHELL=/bin/sh&lt;br /&gt;
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;
&lt;br /&gt;
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system &amp;amp;&amp;amp; perl -e &amp;#039;sleep int(rand(3600))&amp;#039; &amp;amp;&amp;amp; certbot -q renew&lt;br /&gt;
root@nginx:~#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
เข้าไปแก้ไข nginx config file ให้อัตโนมัติ&lt;br /&gt;
ลองเข้าไปดู file &amp;#039;&amp;#039;&amp;#039;/etc/nginx/sites-enabled/www3.conf&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=nginx&amp;gt;&lt;br /&gt;
upstream www3 {&lt;br /&gt;
        server X.X.X.11:81;&lt;br /&gt;
        server X.X.X.12:81;&lt;br /&gt;
        server X.X.X.13:81;&lt;br /&gt;
}&lt;br /&gt;
server {&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
        location / {&lt;br /&gt;
                proxy_set_header Host $http_host;&lt;br /&gt;
                proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                proxy_pass http://www3;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    listen 443 ssl; # managed by Certbot&lt;br /&gt;
    ssl_certificate /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/fullchain.pem; # managed by Certbot&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/www3.demo.cloud.cmu.ac.th/privkey.pem; # managed by Certbot&lt;br /&gt;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot&lt;br /&gt;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;
    if ($host = www3.demo.cloud.cmu.ac.th) {&lt;br /&gt;
        return 301 https://$host$request_uri;&lt;br /&gt;
    } # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name www3.demo.cloud.cmu.ac.th;&lt;br /&gt;
    return 404; # managed by Certbot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== อ้างอิง ===&lt;br /&gt;
[https://letsencrypt.org/ https://letsencrypt.org/]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx]&lt;br /&gt;
== บทส่งท้าย ==&lt;br /&gt;
บทความนี้แสดงถึงการตั้งค่า reverse proxy เบื้องต้น ในการใช้งานจริงอาจจะต้องมีการ fine tune ค่าต่าง ๆ เพิ่มเติมกรณีที่ web application ต้องการรองรับ request จำนวนมาก&lt;br /&gt;
หรือมีความต้องการเฉพาะอาจจะต้องใช้เทคนิคอื่น ๆ เพิ่มเติมเช่น static file caching ซึ่งต้องศึกษาเพิ่มเติมต่อยอดจากบทความนี้ต่อไป หวังว่าบทความนี้จะช่วยปูพื้นฐานให้เข้าใจ concept ของ reverse proxy และการทำ SSL offload &lt;br /&gt;
== สอบถามเพิ่มเติม ==&lt;br /&gt;
ผู้เขียน : ศุภวิทย์ วรรณภิละ วิศวกร ฝ่ายระบบเครือข่าย สำนักบริการเทคโนโลยีสารสนเทศ มหาวิทยาลัยเชียงใหม่&amp;lt;br&amp;gt;&lt;br /&gt;
email : [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&amp;lt;br&amp;gt;&lt;br /&gt;
โทรศัพท์ : 0-5394-3853&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=CMU_Cloud_Self_Service_Portal&amp;diff=5224</id>
		<title>CMU Cloud Self Service Portal</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=CMU_Cloud_Self_Service_Portal&amp;diff=5224"/>
		<updated>2025-10-24T11:49:20Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การ deploy VM โดยใช้ Linux Cloud Image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
การใช้งาน Private Cloud สามารถจัดการ VM(Virtual Machine) ได้ผ่านหน้าเว็บไซต์ด้วยตนเอง Self Service Portal [https://cloud-ssp.cmu.ac.th https://cloud-ssp.cmu.ac.th] โดยเข้าสู่ระบบด้วย CMU IT Account ผู้ที่จะใช้งานได้จะต้องได้รับสิทธิ์การใช้งานก่อน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:00-login-ssp.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การ deploy VM จาก Template (ยกเลิกการใช้งานสำหรับ Linux) ==&lt;br /&gt;
# กดปุ่ม Create VM ด้านซ้ายบนของจอ&amp;lt;br&amp;gt;[[File:01-create-VM.PNG|link=]]&lt;br /&gt;
# เลือก VM Template แล้วกด Next&amp;lt;br&amp;gt;[[File:02-vm-template.PNG|link=]]&lt;br /&gt;
# เลือก Template ที่ต้องการแล้วกด Next&amp;lt;br&amp;gt;[[File:03-select-template.PNG|link=]]&lt;br /&gt;
# ระบุชื่อของ VM หรือสามารถกำหนด cpu และ memory เพิ่มเติมจาก Template ได้ แล้วกด save&amp;lt;br&amp;gt;[[File:04-init-vm.PNG|link=]]&lt;br /&gt;
# หลังจากสร้าง VM เสร็จเลือก VM ที่ต้องการแล้วกด Launch console&amp;lt;br&amp;gt;[[File:05-select-vm.PNG|link=]]&lt;br /&gt;
# จะมีหน้าต่าง console ของ VM ที่เลือกขึ้นมาเสมือนกำลังทำงานหน้าเครื่อง มีประโยชน์ไว้ทำ operation พื้นฐานที่ไม่สามารถทำผ่าน network ได้หรือใช้แก้ปัญหา VM กรณีไม่สามารถ remote ผ่าน network เข้ามาได้ ถ้า VM เป็น Windows จะมีปุ่มส่งสัญญาณ Ctrl+Alt+Del เข้าไปใน VM ที่มุมขวาบนของหน้าต่าง&amp;lt;br&amp;gt;[[File:06-vm-linux-console.PNG|link=]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:07-vm-windows-console.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การ deploy VM โดยใช้ Linux Cloud Image ==&lt;br /&gt;
[https://network.cmu.ac.th/wiki/index.php/Deploy_VM_with_Cloud_Image Deploy VM with Cloud Image]&lt;br /&gt;
&lt;br /&gt;
== การ deploy VM จาก ISO Image ==&lt;br /&gt;
กรณีที่ Template ไม่ตรงกับความต้องการ สามาระ deploy จาก image ISO ของ OS ได้โดยต้องทำการติดตั้ง OS เอง&lt;br /&gt;
=== Linux Image ===&lt;br /&gt;
# กดปุ่ม Create VM ด้านซ้ายบนของจอ&amp;lt;br&amp;gt;[[File:01-create-VM.PNG|link=]]&lt;br /&gt;
# เลือก Disk Images แล้วกด Next&amp;lt;br&amp;gt;[[File:08-vm-image.PNG|link=]]&lt;br /&gt;
# เลือก OS Image ที่ต้องการในที่เลือก Ubuntu Linux 18.04 แล้วกด Next&amp;lt;br&amp;gt;[[File:09-select-image-linux.PNG|link=]]&lt;br /&gt;
# จะเข้าสู่หน้าการกำหนดค่าต่าง ๆ ของ VM ให้ตั้งชื่อ VM แจะสังเกตว่ามี CDROM มาให้  CDROM นี้คือ ISO Image ที่เลือกในขั้นตอนที่แล้ว ให้เพิ่ม Disk ให้ VM(1) แล้วกำหนดขนาดของ Disk แล้วกด Save(2) และกำหนด CPU, Memory ของ VM แล้วกด Save(3)&amp;lt;br&amp;gt;[[File:10-init-vm-image.PNG|link=]]&lt;br /&gt;
# เปิด Console ของเครื่องที่พึ่งทำการ Deploy จะพบว่า VM boot จาก CDROM ที่เป็น Image ของ OS ที่เลือกให้ทำการติดตั้ง OS ตามขั้นตอนของ OS นั้น ๆ&amp;lt;br&amp;gt;[[File:11-install-linux-console.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== Windows Image ===&lt;br /&gt;
# กรณี Deploy Windows จาก ISO จะมีขั้นตอนเพิ่มเติมคือต้องติดตั้ง Driver ของ AHV เพื่อให้ Windows เห็น Disk โดยในขั้นตอนการเลือก ISO ต้องเลือก 2 Image คือ Image ของ Windows และ Nutanix-VirIO&amp;lt;br&amp;gt;[[File:12-virtio-image.PNG|link=]]&lt;br /&gt;
# จะเห็นว่ามี CDROM สองชุดเข้ามาใน VM คือ ISO ของ Windows และของ VirtIO ให้กำหนดค่าชื่อ Disk, CPU, Memory แล้วกด Save&amp;lt;br&amp;gt;[[File:13-init-vm-image-windows.PNG|link=]]&lt;br /&gt;
# เปิด Console ของ VM ที่พึ่ง Deploy แล้วทำการติดตั้ง Windows OS ตามปกติ พอไปถึงขั้นตอนเลือก Disk จะไม่พบ Disk ให้กด Load driver&amp;lt;br&amp;gt;[[File:14-load-driver-virtio.PNG|link=]]&lt;br /&gt;
# กด Browse(1) แล้วเลือก Nutanix VirtIO(2) และ Version ของ Windows ที่กำลัง Deploy(3) แล้วกด OK(4)&amp;lt;br&amp;gt;[[File:15-brows-virtIO.PNG|link=]]&lt;br /&gt;
# จะพบรายการของ Driver กด Ctrl+click เลือกทุก Driver(1) แล้วกด Next(2)&amp;lt;br&amp;gt;[[File:16-install-vitIO.PNG|link=]]&lt;br /&gt;
# เมื่อติดตั้ง Driver เสร็จจะพบ Disk สามารถทำการติดตั้ง Windows OS ได้ตามปกติ&amp;lt;br&amp;gt;[[File:17-install-win-vm.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การปรับแต่ง VM ==&lt;br /&gt;
# เมื่อกดที่ชื่อของ VM จากหน้ารายการ VM จะสามารถควบคุม VM ได้เช่นเปลี่ยนปรับแต่ง, เปิดหน้า Console, ลบ, ปิดเครื่องเปลี่ยนเจ้าของ&amp;lt;br&amp;gt;[[File:18-edit-vm.PNG|link=]]&lt;br /&gt;
# การปรับแต่ง resource ของ VM บางอย่างต้องทำการปิดเครื่อง VM ก่อนเช่นเพิ่มหรือลด CPU กับ Memory ส่วนการเพิ่ม Disk สามารถทำได้เลยตอน VM เปิดอยู่ &amp;#039;&amp;#039;&amp;#039;ข้อควรระวังการลบ Disk จะทำให Disk ก้อนนั้นหายไปทันทีและข้อมูลใน Disk ก้อนนั้นก็จะหายไปด้วยและไม่สามารถเอากลับคืนมาได้ควรทำด้วยความระมัดระวัง&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;[[File:19-edit-vm-resorce.PNG|link=]]&lt;br /&gt;
# การลบ VM สามารถลบได้หลาย VM พร้อมกันโดยเลือก VM ที่ต้องการลบ แล้วกด Delete จากเมนูด้านซ้ายบน &amp;#039;&amp;#039;&amp;#039;*การลบ VM จะทำให้ข้อมูลหายทั้งหมดควรทำด้วยความระมัดระวัง&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;[[File:20-delete-vm.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน Self Service Restore ==&lt;br /&gt;
กรณีที่ deploy Windows Server จาก Template และได้ทำการติดต่อผู้ดูแลระบบให้ทำการ Back Up VM แล้ว สามารถที่จะ Restore file จาก Back Up ได้ด้วยตนเอง&lt;br /&gt;
# ใน VM ที่หน้า Desktop จะมี Shortcut Nutanix SSR อยู่ เปิดขึ้นมาแล้วเข้าสู่ระบบด้วย Local Administrator ของ VM เครื่องนั้น&amp;lt;br&amp;gt;[[File:21-ssr-login.PNG|link=]]&lt;br /&gt;
# เลือก Back up ที่ต้องการ Restore&amp;lt;br&amp;gt;[[File:22-ssr-list.PNG|link=]]&lt;br /&gt;
# เลือก Drive ที่ต้องการแล้วไปที่เมนู Disk Action เลือก Mount&amp;lt;br&amp;gt;[[File:23-ssr-mount.PNG|link=]]&lt;br /&gt;
# เมื่อ Mount สำเร็จ Drive ที่ Back Up ไว้จะมาเป็นอีก Drive หนึ่งสามารถทำการ copy file ที่ต้องการได้&amp;lt;br&amp;gt;[[File:24-ssr-copy-file.PNG|link=]]&lt;br /&gt;
# เมื่อใช้งานเสร็จให้ทำการ Unmount โดยไปที่ Tab Mounted Snapshots แล้วเลือก Drive ที่ mount อยู่แล้วกด Unmount &amp;lt;br&amp;gt;[[File:25-ssr-unmount.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถามเพิ่มเติม ==&lt;br /&gt;
* [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=CMU_Cloud_Self_Service_Portal&amp;diff=5223</id>
		<title>CMU Cloud Self Service Portal</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=CMU_Cloud_Self_Service_Portal&amp;diff=5223"/>
		<updated>2025-10-24T11:48:39Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การ deploy VM จาก ISO Image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
การใช้งาน Private Cloud สามารถจัดการ VM(Virtual Machine) ได้ผ่านหน้าเว็บไซต์ด้วยตนเอง Self Service Portal [https://cloud-ssp.cmu.ac.th https://cloud-ssp.cmu.ac.th] โดยเข้าสู่ระบบด้วย CMU IT Account ผู้ที่จะใช้งานได้จะต้องได้รับสิทธิ์การใช้งานก่อน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:00-login-ssp.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การ deploy VM จาก Template (ยกเลิกการใช้งานสำหรับ Linux) ==&lt;br /&gt;
# กดปุ่ม Create VM ด้านซ้ายบนของจอ&amp;lt;br&amp;gt;[[File:01-create-VM.PNG|link=]]&lt;br /&gt;
# เลือก VM Template แล้วกด Next&amp;lt;br&amp;gt;[[File:02-vm-template.PNG|link=]]&lt;br /&gt;
# เลือก Template ที่ต้องการแล้วกด Next&amp;lt;br&amp;gt;[[File:03-select-template.PNG|link=]]&lt;br /&gt;
# ระบุชื่อของ VM หรือสามารถกำหนด cpu และ memory เพิ่มเติมจาก Template ได้ แล้วกด save&amp;lt;br&amp;gt;[[File:04-init-vm.PNG|link=]]&lt;br /&gt;
# หลังจากสร้าง VM เสร็จเลือก VM ที่ต้องการแล้วกด Launch console&amp;lt;br&amp;gt;[[File:05-select-vm.PNG|link=]]&lt;br /&gt;
# จะมีหน้าต่าง console ของ VM ที่เลือกขึ้นมาเสมือนกำลังทำงานหน้าเครื่อง มีประโยชน์ไว้ทำ operation พื้นฐานที่ไม่สามารถทำผ่าน network ได้หรือใช้แก้ปัญหา VM กรณีไม่สามารถ remote ผ่าน network เข้ามาได้ ถ้า VM เป็น Windows จะมีปุ่มส่งสัญญาณ Ctrl+Alt+Del เข้าไปใน VM ที่มุมขวาบนของหน้าต่าง&amp;lt;br&amp;gt;[[File:06-vm-linux-console.PNG|link=]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:07-vm-windows-console.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การ deploy VM โดยใช้ Linux Cloud Image ==&lt;br /&gt;
== การ deploy VM จาก ISO Image ==&lt;br /&gt;
กรณีที่ Template ไม่ตรงกับความต้องการ สามาระ deploy จาก image ISO ของ OS ได้โดยต้องทำการติดตั้ง OS เอง&lt;br /&gt;
=== Linux Image ===&lt;br /&gt;
# กดปุ่ม Create VM ด้านซ้ายบนของจอ&amp;lt;br&amp;gt;[[File:01-create-VM.PNG|link=]]&lt;br /&gt;
# เลือก Disk Images แล้วกด Next&amp;lt;br&amp;gt;[[File:08-vm-image.PNG|link=]]&lt;br /&gt;
# เลือก OS Image ที่ต้องการในที่เลือก Ubuntu Linux 18.04 แล้วกด Next&amp;lt;br&amp;gt;[[File:09-select-image-linux.PNG|link=]]&lt;br /&gt;
# จะเข้าสู่หน้าการกำหนดค่าต่าง ๆ ของ VM ให้ตั้งชื่อ VM แจะสังเกตว่ามี CDROM มาให้  CDROM นี้คือ ISO Image ที่เลือกในขั้นตอนที่แล้ว ให้เพิ่ม Disk ให้ VM(1) แล้วกำหนดขนาดของ Disk แล้วกด Save(2) และกำหนด CPU, Memory ของ VM แล้วกด Save(3)&amp;lt;br&amp;gt;[[File:10-init-vm-image.PNG|link=]]&lt;br /&gt;
# เปิด Console ของเครื่องที่พึ่งทำการ Deploy จะพบว่า VM boot จาก CDROM ที่เป็น Image ของ OS ที่เลือกให้ทำการติดตั้ง OS ตามขั้นตอนของ OS นั้น ๆ&amp;lt;br&amp;gt;[[File:11-install-linux-console.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== Windows Image ===&lt;br /&gt;
# กรณี Deploy Windows จาก ISO จะมีขั้นตอนเพิ่มเติมคือต้องติดตั้ง Driver ของ AHV เพื่อให้ Windows เห็น Disk โดยในขั้นตอนการเลือก ISO ต้องเลือก 2 Image คือ Image ของ Windows และ Nutanix-VirIO&amp;lt;br&amp;gt;[[File:12-virtio-image.PNG|link=]]&lt;br /&gt;
# จะเห็นว่ามี CDROM สองชุดเข้ามาใน VM คือ ISO ของ Windows และของ VirtIO ให้กำหนดค่าชื่อ Disk, CPU, Memory แล้วกด Save&amp;lt;br&amp;gt;[[File:13-init-vm-image-windows.PNG|link=]]&lt;br /&gt;
# เปิด Console ของ VM ที่พึ่ง Deploy แล้วทำการติดตั้ง Windows OS ตามปกติ พอไปถึงขั้นตอนเลือก Disk จะไม่พบ Disk ให้กด Load driver&amp;lt;br&amp;gt;[[File:14-load-driver-virtio.PNG|link=]]&lt;br /&gt;
# กด Browse(1) แล้วเลือก Nutanix VirtIO(2) และ Version ของ Windows ที่กำลัง Deploy(3) แล้วกด OK(4)&amp;lt;br&amp;gt;[[File:15-brows-virtIO.PNG|link=]]&lt;br /&gt;
# จะพบรายการของ Driver กด Ctrl+click เลือกทุก Driver(1) แล้วกด Next(2)&amp;lt;br&amp;gt;[[File:16-install-vitIO.PNG|link=]]&lt;br /&gt;
# เมื่อติดตั้ง Driver เสร็จจะพบ Disk สามารถทำการติดตั้ง Windows OS ได้ตามปกติ&amp;lt;br&amp;gt;[[File:17-install-win-vm.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การปรับแต่ง VM ==&lt;br /&gt;
# เมื่อกดที่ชื่อของ VM จากหน้ารายการ VM จะสามารถควบคุม VM ได้เช่นเปลี่ยนปรับแต่ง, เปิดหน้า Console, ลบ, ปิดเครื่องเปลี่ยนเจ้าของ&amp;lt;br&amp;gt;[[File:18-edit-vm.PNG|link=]]&lt;br /&gt;
# การปรับแต่ง resource ของ VM บางอย่างต้องทำการปิดเครื่อง VM ก่อนเช่นเพิ่มหรือลด CPU กับ Memory ส่วนการเพิ่ม Disk สามารถทำได้เลยตอน VM เปิดอยู่ &amp;#039;&amp;#039;&amp;#039;ข้อควรระวังการลบ Disk จะทำให Disk ก้อนนั้นหายไปทันทีและข้อมูลใน Disk ก้อนนั้นก็จะหายไปด้วยและไม่สามารถเอากลับคืนมาได้ควรทำด้วยความระมัดระวัง&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;[[File:19-edit-vm-resorce.PNG|link=]]&lt;br /&gt;
# การลบ VM สามารถลบได้หลาย VM พร้อมกันโดยเลือก VM ที่ต้องการลบ แล้วกด Delete จากเมนูด้านซ้ายบน &amp;#039;&amp;#039;&amp;#039;*การลบ VM จะทำให้ข้อมูลหายทั้งหมดควรทำด้วยความระมัดระวัง&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;[[File:20-delete-vm.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน Self Service Restore ==&lt;br /&gt;
กรณีที่ deploy Windows Server จาก Template และได้ทำการติดต่อผู้ดูแลระบบให้ทำการ Back Up VM แล้ว สามารถที่จะ Restore file จาก Back Up ได้ด้วยตนเอง&lt;br /&gt;
# ใน VM ที่หน้า Desktop จะมี Shortcut Nutanix SSR อยู่ เปิดขึ้นมาแล้วเข้าสู่ระบบด้วย Local Administrator ของ VM เครื่องนั้น&amp;lt;br&amp;gt;[[File:21-ssr-login.PNG|link=]]&lt;br /&gt;
# เลือก Back up ที่ต้องการ Restore&amp;lt;br&amp;gt;[[File:22-ssr-list.PNG|link=]]&lt;br /&gt;
# เลือก Drive ที่ต้องการแล้วไปที่เมนู Disk Action เลือก Mount&amp;lt;br&amp;gt;[[File:23-ssr-mount.PNG|link=]]&lt;br /&gt;
# เมื่อ Mount สำเร็จ Drive ที่ Back Up ไว้จะมาเป็นอีก Drive หนึ่งสามารถทำการ copy file ที่ต้องการได้&amp;lt;br&amp;gt;[[File:24-ssr-copy-file.PNG|link=]]&lt;br /&gt;
# เมื่อใช้งานเสร็จให้ทำการ Unmount โดยไปที่ Tab Mounted Snapshots แล้วเลือก Drive ที่ mount อยู่แล้วกด Unmount &amp;lt;br&amp;gt;[[File:25-ssr-unmount.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถามเพิ่มเติม ==&lt;br /&gt;
* [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=CMU_Cloud_Self_Service_Portal&amp;diff=5222</id>
		<title>CMU Cloud Self Service Portal</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=CMU_Cloud_Self_Service_Portal&amp;diff=5222"/>
		<updated>2025-10-24T11:47:47Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การ deploy VM จาก Template */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บทนำ ==&lt;br /&gt;
การใช้งาน Private Cloud สามารถจัดการ VM(Virtual Machine) ได้ผ่านหน้าเว็บไซต์ด้วยตนเอง Self Service Portal [https://cloud-ssp.cmu.ac.th https://cloud-ssp.cmu.ac.th] โดยเข้าสู่ระบบด้วย CMU IT Account ผู้ที่จะใช้งานได้จะต้องได้รับสิทธิ์การใช้งานก่อน&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:00-login-ssp.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การ deploy VM จาก Template (ยกเลิกการใช้งานสำหรับ Linux) ==&lt;br /&gt;
# กดปุ่ม Create VM ด้านซ้ายบนของจอ&amp;lt;br&amp;gt;[[File:01-create-VM.PNG|link=]]&lt;br /&gt;
# เลือก VM Template แล้วกด Next&amp;lt;br&amp;gt;[[File:02-vm-template.PNG|link=]]&lt;br /&gt;
# เลือก Template ที่ต้องการแล้วกด Next&amp;lt;br&amp;gt;[[File:03-select-template.PNG|link=]]&lt;br /&gt;
# ระบุชื่อของ VM หรือสามารถกำหนด cpu และ memory เพิ่มเติมจาก Template ได้ แล้วกด save&amp;lt;br&amp;gt;[[File:04-init-vm.PNG|link=]]&lt;br /&gt;
# หลังจากสร้าง VM เสร็จเลือก VM ที่ต้องการแล้วกด Launch console&amp;lt;br&amp;gt;[[File:05-select-vm.PNG|link=]]&lt;br /&gt;
# จะมีหน้าต่าง console ของ VM ที่เลือกขึ้นมาเสมือนกำลังทำงานหน้าเครื่อง มีประโยชน์ไว้ทำ operation พื้นฐานที่ไม่สามารถทำผ่าน network ได้หรือใช้แก้ปัญหา VM กรณีไม่สามารถ remote ผ่าน network เข้ามาได้ ถ้า VM เป็น Windows จะมีปุ่มส่งสัญญาณ Ctrl+Alt+Del เข้าไปใน VM ที่มุมขวาบนของหน้าต่าง&amp;lt;br&amp;gt;[[File:06-vm-linux-console.PNG|link=]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[File:07-vm-windows-console.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การ deploy VM จาก ISO Image ==&lt;br /&gt;
กรณีที่ Template ไม่ตรงกับความต้องการ สามาระ deploy จาก image ISO ของ OS ได้โดยต้องทำการติดตั้ง OS เอง&lt;br /&gt;
=== Linux Image ===&lt;br /&gt;
# กดปุ่ม Create VM ด้านซ้ายบนของจอ&amp;lt;br&amp;gt;[[File:01-create-VM.PNG|link=]]&lt;br /&gt;
# เลือก Disk Images แล้วกด Next&amp;lt;br&amp;gt;[[File:08-vm-image.PNG|link=]]&lt;br /&gt;
# เลือก OS Image ที่ต้องการในที่เลือก Ubuntu Linux 18.04 แล้วกด Next&amp;lt;br&amp;gt;[[File:09-select-image-linux.PNG|link=]]&lt;br /&gt;
# จะเข้าสู่หน้าการกำหนดค่าต่าง ๆ ของ VM ให้ตั้งชื่อ VM แจะสังเกตว่ามี CDROM มาให้  CDROM นี้คือ ISO Image ที่เลือกในขั้นตอนที่แล้ว ให้เพิ่ม Disk ให้ VM(1) แล้วกำหนดขนาดของ Disk แล้วกด Save(2) และกำหนด CPU, Memory ของ VM แล้วกด Save(3)&amp;lt;br&amp;gt;[[File:10-init-vm-image.PNG|link=]]&lt;br /&gt;
# เปิด Console ของเครื่องที่พึ่งทำการ Deploy จะพบว่า VM boot จาก CDROM ที่เป็น Image ของ OS ที่เลือกให้ทำการติดตั้ง OS ตามขั้นตอนของ OS นั้น ๆ&amp;lt;br&amp;gt;[[File:11-install-linux-console.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
=== Windows Image ===&lt;br /&gt;
# กรณี Deploy Windows จาก ISO จะมีขั้นตอนเพิ่มเติมคือต้องติดตั้ง Driver ของ AHV เพื่อให้ Windows เห็น Disk โดยในขั้นตอนการเลือก ISO ต้องเลือก 2 Image คือ Image ของ Windows และ Nutanix-VirIO&amp;lt;br&amp;gt;[[File:12-virtio-image.PNG|link=]]&lt;br /&gt;
# จะเห็นว่ามี CDROM สองชุดเข้ามาใน VM คือ ISO ของ Windows และของ VirtIO ให้กำหนดค่าชื่อ Disk, CPU, Memory แล้วกด Save&amp;lt;br&amp;gt;[[File:13-init-vm-image-windows.PNG|link=]]&lt;br /&gt;
# เปิด Console ของ VM ที่พึ่ง Deploy แล้วทำการติดตั้ง Windows OS ตามปกติ พอไปถึงขั้นตอนเลือก Disk จะไม่พบ Disk ให้กด Load driver&amp;lt;br&amp;gt;[[File:14-load-driver-virtio.PNG|link=]]&lt;br /&gt;
# กด Browse(1) แล้วเลือก Nutanix VirtIO(2) และ Version ของ Windows ที่กำลัง Deploy(3) แล้วกด OK(4)&amp;lt;br&amp;gt;[[File:15-brows-virtIO.PNG|link=]]&lt;br /&gt;
# จะพบรายการของ Driver กด Ctrl+click เลือกทุก Driver(1) แล้วกด Next(2)&amp;lt;br&amp;gt;[[File:16-install-vitIO.PNG|link=]]&lt;br /&gt;
# เมื่อติดตั้ง Driver เสร็จจะพบ Disk สามารถทำการติดตั้ง Windows OS ได้ตามปกติ&amp;lt;br&amp;gt;[[File:17-install-win-vm.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การปรับแต่ง VM ==&lt;br /&gt;
# เมื่อกดที่ชื่อของ VM จากหน้ารายการ VM จะสามารถควบคุม VM ได้เช่นเปลี่ยนปรับแต่ง, เปิดหน้า Console, ลบ, ปิดเครื่องเปลี่ยนเจ้าของ&amp;lt;br&amp;gt;[[File:18-edit-vm.PNG|link=]]&lt;br /&gt;
# การปรับแต่ง resource ของ VM บางอย่างต้องทำการปิดเครื่อง VM ก่อนเช่นเพิ่มหรือลด CPU กับ Memory ส่วนการเพิ่ม Disk สามารถทำได้เลยตอน VM เปิดอยู่ &amp;#039;&amp;#039;&amp;#039;ข้อควรระวังการลบ Disk จะทำให Disk ก้อนนั้นหายไปทันทีและข้อมูลใน Disk ก้อนนั้นก็จะหายไปด้วยและไม่สามารถเอากลับคืนมาได้ควรทำด้วยความระมัดระวัง&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;[[File:19-edit-vm-resorce.PNG|link=]]&lt;br /&gt;
# การลบ VM สามารถลบได้หลาย VM พร้อมกันโดยเลือก VM ที่ต้องการลบ แล้วกด Delete จากเมนูด้านซ้ายบน &amp;#039;&amp;#039;&amp;#039;*การลบ VM จะทำให้ข้อมูลหายทั้งหมดควรทำด้วยความระมัดระวัง&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;[[File:20-delete-vm.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== การใช้งาน Self Service Restore ==&lt;br /&gt;
กรณีที่ deploy Windows Server จาก Template และได้ทำการติดต่อผู้ดูแลระบบให้ทำการ Back Up VM แล้ว สามารถที่จะ Restore file จาก Back Up ได้ด้วยตนเอง&lt;br /&gt;
# ใน VM ที่หน้า Desktop จะมี Shortcut Nutanix SSR อยู่ เปิดขึ้นมาแล้วเข้าสู่ระบบด้วย Local Administrator ของ VM เครื่องนั้น&amp;lt;br&amp;gt;[[File:21-ssr-login.PNG|link=]]&lt;br /&gt;
# เลือก Back up ที่ต้องการ Restore&amp;lt;br&amp;gt;[[File:22-ssr-list.PNG|link=]]&lt;br /&gt;
# เลือก Drive ที่ต้องการแล้วไปที่เมนู Disk Action เลือก Mount&amp;lt;br&amp;gt;[[File:23-ssr-mount.PNG|link=]]&lt;br /&gt;
# เมื่อ Mount สำเร็จ Drive ที่ Back Up ไว้จะมาเป็นอีก Drive หนึ่งสามารถทำการ copy file ที่ต้องการได้&amp;lt;br&amp;gt;[[File:24-ssr-copy-file.PNG|link=]]&lt;br /&gt;
# เมื่อใช้งานเสร็จให้ทำการ Unmount โดยไปที่ Tab Mounted Snapshots แล้วเลือก Drive ที่ mount อยู่แล้วกด Unmount &amp;lt;br&amp;gt;[[File:25-ssr-unmount.PNG|link=]]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถามเพิ่มเติม ==&lt;br /&gt;
* [mailto:supawit.w@cmu.ac.th supawit.w@cmu.ac.th]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5221</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5221"/>
		<updated>2025-10-20T09:46:57Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การขยาย Disk ของ VM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== การขยาย Disk ของ VM ==&lt;br /&gt;
&lt;br /&gt;
* ใช้คำสั่ง df -h เพื่อดูการปริมาณการใช้งาน Disk&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
tmpfs           383M  1.1M  382M   1% /run&lt;br /&gt;
efivarfs        256K   17K  234K   7% /sys/firmware/efi/efivars&lt;br /&gt;
/dev/sda1        48G  1.9G   46G   4% /&lt;br /&gt;
tmpfs           1.9G     0  1.9G   0% /dev/shm&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
/dev/sda16      881M   62M  758M   8% /boot&lt;br /&gt;
/dev/sda15      105M  6.2M   99M   6% /boot/efi&lt;br /&gt;
tmpfs           383M   12K  383M   1% /run/user/100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ใช้คำสั่ง lsblk เพื่อดูโครงสร้าง Disk/Partition&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ lsblk&lt;br /&gt;
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS&lt;br /&gt;
sda       8:0    0   50G  0 disk&lt;br /&gt;
├─sda1    8:1    0   49G  0 part /&lt;br /&gt;
├─sda14   8:14   0    4M  0 part&lt;br /&gt;
├─sda15   8:15   0  106M  0 part /boot/efi&lt;br /&gt;
└─sda16 259:0    0  913M  0 part /boot&lt;br /&gt;
sr0      11:0    1  374K  0 rom&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ถ้าต้องการเพิ่มขนาด Disk ไปที่หน้าจัดการ VM บน Private Cloud เลือก VM, Actions, Update&lt;br /&gt;
[[File:Vm-cloud-image-13.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วน Configuration กด Next&lt;br /&gt;
[[File:Vm-cloud-image-14.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วน Disks กดรูปดินสอทางขวาของ Disk ที่ต้องการขยาย&lt;br /&gt;
[[File:Vm-cloud-image-15.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในหน้าต่าง Update Disk เพิ่ม Capacity ที่ต้องการ &amp;#039;&amp;#039;&amp;#039;ควรเพิ่มทีละน้อย เมื่อใกล้เต็มค่อยมาเพิ่มอีกได้เรื่อย ๆ ไม่จำเป็นต้องจองพื้นที่ไว้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save, Next, Next และ Save&lt;br /&gt;
[[File:Vm-cloud-image-16.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* จากนั้นใช้คำสั่ง lsblk จะเห็นว่าขนาดของ Disk เพิ่มเป็น 100G&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ lsblk&lt;br /&gt;
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS&lt;br /&gt;
sda       8:0    0  100G  0 disk&lt;br /&gt;
├─sda1    8:1    0   49G  0 part /&lt;br /&gt;
├─sda14   8:14   0    4M  0 part&lt;br /&gt;
├─sda15   8:15   0  106M  0 part /boot/efi&lt;br /&gt;
└─sda16 259:0    0  913M  0 part /boot&lt;br /&gt;
sr0      11:0    1  374K  0 rom&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เมื่อใช้ df -h จะยังเห็นว่าขนาดของ partition ยังเป็น 50G อยู่&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
tmpfs           383M  1.1M  382M   1% /run&lt;br /&gt;
efivarfs        256K   17K  234K   7% /sys/firmware/efi/efivars&lt;br /&gt;
/dev/sda1        48G  1.9G   46G   4% /&lt;br /&gt;
tmpfs           1.9G     0  1.9G   0% /dev/shm&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
/dev/sda16      881M   62M  758M   8% /boot&lt;br /&gt;
/dev/sda15      105M  6.2M   99M   6% /boot/efi&lt;br /&gt;
tmpfs           383M   12K  383M   1% /run/user/1000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ให้ขยาย partition โดยใช้คำสั่ง &amp;#039;&amp;#039;&amp;#039;sudo growpart /dev/sda 1&amp;#039;&amp;#039;&amp;#039; และ &amp;#039;&amp;#039;&amp;#039;sudo resize2fs /dev/sda1&amp;#039;&amp;#039;&amp;#039; ดังนี้&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ sudo growpart /dev/sda 1&lt;br /&gt;
CHANGED: partition=1 start=2099200 old: size=102758367 end=104857566 new: size=207615967 end=209715166&lt;br /&gt;
youusername@ubuntu:~$ sudo resize2fs /dev/sda1&lt;br /&gt;
resize2fs 1.47.0 (5-Feb-2023)&lt;br /&gt;
Filesystem at /dev/sda1 is mounted on /; on-line resizing required&lt;br /&gt;
old_desc_blocks = 7, new_desc_blocks = 13&lt;br /&gt;
The filesystem on /dev/sda1 is now 25951995 (4k) blocks long.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ใช้คำสั่ง df -h และ lsblk เพื่อดูการใช้งานและโครงสร้าง partition จะเห็นว่าขยายเป็น 100G แล้ว&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
tmpfs           383M  1.1M  382M   1% /run&lt;br /&gt;
efivarfs        256K   17K  234K   7% /sys/firmware/efi/efivars&lt;br /&gt;
/dev/sda1        96G  1.9G   94G   2% /&lt;br /&gt;
tmpfs           1.9G     0  1.9G   0% /dev/shm&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
/dev/sda16      881M   62M  758M   8% /boot&lt;br /&gt;
/dev/sda15      105M  6.2M   99M   6% /boot/efi&lt;br /&gt;
tmpfs           383M   12K  383M   1% /run/user/1000&lt;br /&gt;
youusername@ubuntu:~$ lsblk&lt;br /&gt;
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS&lt;br /&gt;
sda       8:0    0  100G  0 disk&lt;br /&gt;
├─sda1    8:1    0   99G  0 part /&lt;br /&gt;
├─sda14   8:14   0    4M  0 part&lt;br /&gt;
├─sda15   8:15   0  106M  0 part /boot/efi&lt;br /&gt;
└─sda16 259:0    0  913M  0 part /boot&lt;br /&gt;
sr0      11:0    1  374K  0 rom&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
[https://teams.microsoft.com/l/chat/0/0?users=supawit.w@cmu.ac.th MS Teams Chat]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-16.png&amp;diff=5220</id>
		<title>File:Vm-cloud-image-16.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-16.png&amp;diff=5220"/>
		<updated>2025-10-20T09:30:17Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-15.png&amp;diff=5219</id>
		<title>File:Vm-cloud-image-15.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-15.png&amp;diff=5219"/>
		<updated>2025-10-20T09:26:34Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-14.png&amp;diff=5218</id>
		<title>File:Vm-cloud-image-14.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-14.png&amp;diff=5218"/>
		<updated>2025-10-20T09:24:27Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-13.png&amp;diff=5217</id>
		<title>File:Vm-cloud-image-13.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-13.png&amp;diff=5217"/>
		<updated>2025-10-20T09:22:38Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5216</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5216"/>
		<updated>2025-10-20T09:20:38Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การขยาย Disk ของ VM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== การขยาย Disk ของ VM ==&lt;br /&gt;
&lt;br /&gt;
* ใช้คำสั่ง df -h เพื่อดูการปริมาณการใช้งาน Disk&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
tmpfs           383M  1.1M  382M   1% /run&lt;br /&gt;
efivarfs        256K   17K  234K   7% /sys/firmware/efi/efivars&lt;br /&gt;
/dev/sda1        48G  1.9G   46G   4% /&lt;br /&gt;
tmpfs           1.9G     0  1.9G   0% /dev/shm&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
/dev/sda16      881M   62M  758M   8% /boot&lt;br /&gt;
/dev/sda15      105M  6.2M   99M   6% /boot/efi&lt;br /&gt;
tmpfs           383M   12K  383M   1% /run/user/100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ใช้คำสั่ง lsblk เพื่อดูโครงสร้าง Disk/Partition&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
youusername@ubuntu:~$ lsblk&lt;br /&gt;
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS&lt;br /&gt;
sda       8:0    0   50G  0 disk&lt;br /&gt;
├─sda1    8:1    0   49G  0 part /&lt;br /&gt;
├─sda14   8:14   0    4M  0 part&lt;br /&gt;
├─sda15   8:15   0  106M  0 part /boot/efi&lt;br /&gt;
└─sda16 259:0    0  913M  0 part /boot&lt;br /&gt;
sr0      11:0    1  374K  0 rom&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
[https://teams.microsoft.com/l/chat/0/0?users=supawit.w@cmu.ac.th MS Teams Chat]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5215</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5215"/>
		<updated>2025-10-20T09:04:28Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== การขยาย Disk ของ VM ==&lt;br /&gt;
&lt;br /&gt;
* ใช้คำสั่ง df -h เพื่อดูการปริมาณการใช้งาน Disk&lt;br /&gt;
[[File:Vm-cloud-image-12.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
[https://teams.microsoft.com/l/chat/0/0?users=supawit.w@cmu.ac.th MS Teams Chat]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-12.png&amp;diff=5214</id>
		<title>File:Vm-cloud-image-12.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-12.png&amp;diff=5214"/>
		<updated>2025-10-20T09:03:27Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5213</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5213"/>
		<updated>2025-10-17T09:55:49Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การขยาย Disk ของ VM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== การขยาย Disk ของ VM ==&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
[https://teams.microsoft.com/l/chat/0/0?users=supawit.w@cmu.ac.th MS Teams Chat]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5212</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5212"/>
		<updated>2025-10-17T09:47:27Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* ติดต่อสอบถาม */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== การขยาย Disk ของ VM ==&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
[https://teams.microsoft.com/l/chat/0/0?users=supawit.w@cmu.ac.th MS Teams Chat]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5211</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5211"/>
		<updated>2025-10-17T09:44:43Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== การขยาย Disk ของ VM ==&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5210</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5210"/>
		<updated>2025-10-17T09:44:10Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;br /&gt;
&lt;br /&gt;
== การขยาย Disk ของ VM ==&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5209</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5209"/>
		<updated>2025-10-17T09:30:32Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง VM จาก Cloud image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้ (ข้อแนะนำ : ควร save script นี้ไว้สำหรับใช้ deploy vm ครั้งต่อ ๆ ไป)&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5208</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5208"/>
		<updated>2025-10-17T09:28:18Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง VM จาก Cloud image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* การ remote เข้า server จะใช้ Private Key กรณี Pirvate Key อยู่ใน path default (${HOME}\.ssh\) ใช้คำสั่ง&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* หรือ Private Key ไม่ได้อยู่ path default สามารถระบุ path ของ Private Key ด้วย option -i&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh -i .\id_ed25519 yourusername@ip-address&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ตัวอย่าง&lt;br /&gt;
[[File:Vm-cloud-image-11.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-11.png&amp;diff=5207</id>
		<title>File:Vm-cloud-image-11.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-11.png&amp;diff=5207"/>
		<updated>2025-10-17T09:27:27Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5206</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5206"/>
		<updated>2025-10-17T09:14:51Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง VM จาก Cloud image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* รอ VM สร้างเสร็จเลือก VM แล้วเลือก Action, Power On&lt;br /&gt;
[[File:Vm-cloud-image-10.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-10.png&amp;diff=5205</id>
		<title>File:Vm-cloud-image-10.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-10.png&amp;diff=5205"/>
		<updated>2025-10-17T09:13:54Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5204</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5204"/>
		<updated>2025-10-17T09:11:41Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง VM จาก Cloud image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Next ในส่วนของสรุป กด Create VM&lt;br /&gt;
[[File:Vm-cloud-image-08.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5203</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5203"/>
		<updated>2025-10-17T09:10:05Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง VM จาก Cloud image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;br /&gt;
&lt;br /&gt;
*กด Next ในส่วนของ Resources&lt;br /&gt;
[[File:Vm-cloud-image-06.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Management ตั้งค่า Timezone, Guest Customization เลือก Script Type เป็น &amp;#039;&amp;#039;&amp;#039;Cloud-init(Linux)&amp;#039;&amp;#039;&amp;#039;, Configuration Method เป็น &amp;#039;&amp;#039;&amp;#039;Custom Script&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
[[File:Vm-cloud-image-07.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* เนื้อหาของ Script จะเป็นดังนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  #cloud-config&lt;br /&gt;
  users:&lt;br /&gt;
    - name: youusername&lt;br /&gt;
      ssh-authorized-keys:&lt;br /&gt;
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAnSuDZmnvTDMAhG29cUgw7WQ8CPXPyUxMH3zGkbqfCD supawit-key@x1&lt;br /&gt;
      sudo: ALL=(ALL) NOPASSWD:ALL&lt;br /&gt;
      groups: sudo&lt;br /&gt;
      shell: /bin/bash&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
โดย &lt;br /&gt;
** name: คือ username ที่จะสร้างบน VM&lt;br /&gt;
** ssh-authorized-keys: คือ Public Key ที่สร้างไว้แล้วสามารถดูได้จากคำสั่ง cat&lt;br /&gt;
** sudo: ALL=(ALL) NOPASSWD:ALL คือให้ user ที่สร้างใช้ sudo ได้โดยไม่ต้องถาม password&lt;br /&gt;
[[File:Vm-cloud-image-09.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-09.png&amp;diff=5202</id>
		<title>File:Vm-cloud-image-09.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-09.png&amp;diff=5202"/>
		<updated>2025-10-17T09:06:11Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-08.png&amp;diff=5201</id>
		<title>File:Vm-cloud-image-08.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-08.png&amp;diff=5201"/>
		<updated>2025-10-17T08:49:40Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-07.png&amp;diff=5200</id>
		<title>File:Vm-cloud-image-07.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-07.png&amp;diff=5200"/>
		<updated>2025-10-17T08:49:31Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-06.png&amp;diff=5199</id>
		<title>File:Vm-cloud-image-06.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-06.png&amp;diff=5199"/>
		<updated>2025-10-17T08:26:45Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5198</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5198"/>
		<updated>2025-10-17T08:25:22Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง VM จาก Cloud image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* กด Attach to Subnet เลือก Subnet เลือกการตั้งค่า IP Address เป็น DHCP หรือ Static ได้ จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-04.png|link=]]&lt;br /&gt;
[[File:Vm-cloud-image-05.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-05.png&amp;diff=5197</id>
		<title>File:Vm-cloud-image-05.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-05.png&amp;diff=5197"/>
		<updated>2025-10-17T08:23:11Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-04.png&amp;diff=5196</id>
		<title>File:Vm-cloud-image-04.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-04.png&amp;diff=5196"/>
		<updated>2025-10-17T08:23:03Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5195</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5195"/>
		<updated>2025-10-17T08:20:27Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง VM จาก Cloud image */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ระบุรายละเอียดของ VM ตามต้องการ ชื่อของ VM ควรระบุชื่อผู้สร้างหรือชื่อส่วนงาน เช่น supawit-server, nurse-server จากนั้นกด Next&lt;br /&gt;
[[File:Vm-cloud-image-02.png|link=]]&lt;br /&gt;
&lt;br /&gt;
* ในส่วนของ Resources กด Attach Disk เลือก Type = Disk, Operation = Clone from Image, Image เลือก image ของ OS ที่มีคำว่า cloudimg, Capacuty = &amp;#039;&amp;#039;&amp;#039;ขนาดของ Disk ควรจะใช้น้อย ๆ ก่อน ไม่ต้องเผื่อ จะทำให้เสียพื้นที่โควต้าเกินความจำเป็นได้ สามารถขยายเพิ่มได้&amp;#039;&amp;#039;&amp;#039; จากนั้นกด Save&lt;br /&gt;
[[File:Vm-cloud-image-03.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-03.png&amp;diff=5194</id>
		<title>File:Vm-cloud-image-03.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-03.png&amp;diff=5194"/>
		<updated>2025-10-17T08:16:05Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-02.png&amp;diff=5193</id>
		<title>File:Vm-cloud-image-02.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-02.png&amp;diff=5193"/>
		<updated>2025-10-17T08:04:24Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5192</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5192"/>
		<updated>2025-10-17T08:02:48Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;br /&gt;
[[File:Vm-cloud-image-01.png|link=]]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-01.png&amp;diff=5191</id>
		<title>File:Vm-cloud-image-01.png</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=File:Vm-cloud-image-01.png&amp;diff=5191"/>
		<updated>2025-10-17T08:01:33Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5190</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5190"/>
		<updated>2025-10-16T09:46:58Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* เราจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้น&amp;#039;&amp;#039;&amp;#039;ต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร และห้ามทำหาย&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5189</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5189"/>
		<updated>2025-10-16T09:38:40Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
* เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
* รันคำสั่งต่อไปนี้&lt;br /&gt;
  &amp;lt;pre&amp;gt;ssh-keygen -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/pre&amp;gt; &lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
  -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
* กำหนดชื่อไฟล์และตำแหน่งจัดเก็บ&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter file in which to save the key (C:\Users\yourname/.ssh/id_ed25519):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  กด Enter เพื่อใช้ค่าเริ่มต้น (C:\Users\yourname/.ssh/id_ed25519)&lt;br /&gt;
  หรือพิมพ์ชื่อไฟล์ใหม่ เช่น D:\Data\ssh-key\id_ed25519&lt;br /&gt;
&lt;br /&gt;
* ตั้งรหัสผ่านสำหรับ Key (ถ้าต้องการ)&lt;br /&gt;
ระบบจะถามว่า:&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  Enter passphrase (empty for no passphrase):&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  ถ้าไม่ต้องการรหัสผ่าน ให้กด Enter&lt;br /&gt;
  ถ้าต้องการความปลอดภัยเพิ่ม ให้ใส่รหัสผ่านแล้วกด Enter&lt;br /&gt;
&lt;br /&gt;
* ตรวจสอบไฟล์ที่สร้าง&lt;br /&gt;
  ไฟล์จะถูกสร้างในโฟลเดอร์ที่ระบุก่อนหน้าโดยจะมี 2 ไฟล์&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  id_ed25519 → Private Key&lt;br /&gt;
  id_ed25519.pub → Public Key&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* เราจะใช้ Public Key ทำ Cloud init เพื่อสร้าง user เริ่มต้นให้กับ VM ในการสร้าง VM จาก Cloud image ซึ่งสามารถใช้กับหลาย ๆ  VM ได้ &lt;br /&gt;
* และจะใช้ Private Key ในการเข้าใช้งาน VM ผ่าน ssh โดยไม่ใช้ password ดังนั้นต้องเก็บ Private Key เป็นความลับไม่ส่งต่อให้ใคร&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;br /&gt;
*  ไปที่ Create VM&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5188</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5188"/>
		<updated>2025-10-16T09:11:42Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
# เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
&lt;br /&gt;
# รันคำสั่งต่อไปนี้&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
คำอธิบาย&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
&lt;br /&gt;
# ff&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5187</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5187"/>
		<updated>2025-10-16T09:11:20Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
# เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
# รันคำสั่งต่อไปนี้&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
คำอธิบาย&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
&lt;br /&gt;
# ff&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image ==&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5186</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5186"/>
		<updated>2025-10-16T09:11:14Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
# เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
# รันคำสั่งต่อไปนี้&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
คำอธิบาย&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
&lt;br /&gt;
# ff&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM จาก Cloud image&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5185</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5185"/>
		<updated>2025-10-16T09:10:48Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
# เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
# รันคำสั่งต่อไปนี้&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
คำอธิบาย&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
* ดกห&lt;br /&gt;
&lt;br /&gt;
# ff&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5184</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5184"/>
		<updated>2025-10-16T09:09:05Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
# เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
# รันคำสั่งต่อไปนี้&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;pre&amp;gt;&lt;br /&gt;
  ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
fdsfds&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5183</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5183"/>
		<updated>2025-10-16T09:08:12Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
# เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
# รันคำสั่งต่อไปนี้&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
  ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  คำอธิบาย:&lt;br /&gt;
    * -t  หมาายถึง&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5182</id>
		<title>Deploy VM with Cloud Image</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=Deploy_VM_with_Cloud_Image&amp;diff=5182"/>
		<updated>2025-10-16T09:05:44Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* การสร้าง ssh key pair */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== การสร้าง ssh key pair ==&lt;br /&gt;
# เปิด Windows Powershell หรือ Terminal&lt;br /&gt;
# รันคำสั่งต่อไปนี้&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;ssh-keygen -t rsa -b 4096 -C &amp;quot;your_email@example.com&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  คำอธิบาย&lt;br /&gt;
&lt;br /&gt;
  * -t rsa : ใช้ RSA algorithm&lt;br /&gt;
  * -b 4096 : ขนาดของ key เป็น 4096 บิต&lt;br /&gt;
  * -C : เพิ่ม comment เพื่อระบุว่า key นี้ใช้กับอีเมลใด&lt;br /&gt;
&lt;br /&gt;
# fdsf&lt;br /&gt;
&lt;br /&gt;
== การสร้าง VM ด้วย Cloud Image ==&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
</feed>