<?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-06-19T06:31:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5301</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5301"/>
		<updated>2026-06-09T08:13:46Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* สำหรับผู้ดูแลระบบ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ Software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
: บริการซอฟต์แวร์ลิขสิทธิ์สำหรับบุคลากรของมหาวิทยาลัยเชียงใหม่ โดยปัจจุบันมีซอฟต์แวร์ลิขสิทธิ์ที่ให้บริการ ได้แก่ Microsoft Office โดยการใช้งานซอฟต์แวร์ลิขสิทธิ์ต้องใช้ CMU Account ในการระบุตัวตนเพื่อเข้าใช้บริการ&lt;br /&gt;
&lt;br /&gt;
: เงื่อนไขในการใช้บริการ&lt;br /&gt;
# ห้ามนำผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ไปแจกจ่ายแก่นักศึกษาหรือบุคคลที่ไม่ใช่บุคคลากรของมหาวิทยาเชียงใหม่ ด้วยวิธีการใดๆ&lt;br /&gt;
# ผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้มีไว้เพื่องานของทางมหาวิทยาลัยเชี่ยงใหม่ ห้ามนำไปใช้เพื่อประโยชน์ส่วนบุคคลหรือใช้ในเชิงพาณิชย์หรืออื่นๆ ไม่ว่ากรณีใดๆ&lt;br /&gt;
# ผลิตภัณฑ์จะต้องติดตั้งบนเครื่องคอมพิวเตอร์ที่มีลิขสิทธิ์ติดตั้งจากไมโครซอฟท์ โดยสังเกตจากเครื่องที่จะติดตั้งต้องมีสติกเกอร์ของไมโครซอฟท์&lt;br /&gt;
# การใช้งานผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ต้องไม่ขัดกับกฎข้อบังคับของมหาวิทยาลัยเชียงใหม่ กฎหมายทุกฉบับที่เกี่ยวข้อง และศีลธรรมอันดีงาม&lt;br /&gt;
# การใช้งานเว็บไซต์นี้ มีการบันทึกพฤติกรรมการใช้งาน พฤติกรรมการใช้งานจะถูกรายงานต่อเจ้าหน้าที่ฝ่ายกฎหมายเมื่อมีการร้องขอ กรณีมีการกระทำผิดกฎหมาย&lt;br /&gt;
# การกระทำอันผิดกฎหมายทุกฉบับที่เกี่ยวข้องถือเป็นความผิดส่วนบุคคล ทางมหาวิทยาลัยจะไม่รับผิดชอบใดๆ ต่อการกระทำผิดส่วนบุคคลนี้&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วย CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://cmu.to/software-installer Download Installer]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
&lt;br /&gt;
: ห้อง One stop Services ชั้น 1 สำนักบริการเทคโนโลยีสารสนเทศ&lt;br /&gt;
: เบอร์โทร 053-943800 กด 1&amp;lt;br&amp;gt;&lt;br /&gt;
: e-mail : [mailto:onestop@cmu.ac.th onestop@cmu.ac.th]&lt;br /&gt;
: ITSC Facebook Fanpage: [https://www.facebook.com/fanpage.itsc https://www.facebook.com/fanpage.itsc]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5300</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5300"/>
		<updated>2026-06-09T07:15:02Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* บริการ software ลิขสิทธิ์ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ Software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
: บริการซอฟต์แวร์ลิขสิทธิ์สำหรับบุคลากรของมหาวิทยาลัยเชียงใหม่ โดยปัจจุบันมีซอฟต์แวร์ลิขสิทธิ์ที่ให้บริการ ได้แก่ Microsoft Office โดยการใช้งานซอฟต์แวร์ลิขสิทธิ์ต้องใช้ CMU Account ในการระบุตัวตนเพื่อเข้าใช้บริการ&lt;br /&gt;
&lt;br /&gt;
: เงื่อนไขในการใช้บริการ&lt;br /&gt;
# ห้ามนำผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ไปแจกจ่ายแก่นักศึกษาหรือบุคคลที่ไม่ใช่บุคคลากรของมหาวิทยาเชียงใหม่ ด้วยวิธีการใดๆ&lt;br /&gt;
# ผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้มีไว้เพื่องานของทางมหาวิทยาลัยเชี่ยงใหม่ ห้ามนำไปใช้เพื่อประโยชน์ส่วนบุคคลหรือใช้ในเชิงพาณิชย์หรืออื่นๆ ไม่ว่ากรณีใดๆ&lt;br /&gt;
# ผลิตภัณฑ์จะต้องติดตั้งบนเครื่องคอมพิวเตอร์ที่มีลิขสิทธิ์ติดตั้งจากไมโครซอฟท์ โดยสังเกตจากเครื่องที่จะติดตั้งต้องมีสติกเกอร์ของไมโครซอฟท์&lt;br /&gt;
# การใช้งานผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ต้องไม่ขัดกับกฎข้อบังคับของมหาวิทยาลัยเชียงใหม่ กฎหมายทุกฉบับที่เกี่ยวข้อง และศีลธรรมอันดีงาม&lt;br /&gt;
# การใช้งานเว็บไซต์นี้ มีการบันทึกพฤติกรรมการใช้งาน พฤติกรรมการใช้งานจะถูกรายงานต่อเจ้าหน้าที่ฝ่ายกฎหมายเมื่อมีการร้องขอ กรณีมีการกระทำผิดกฎหมาย&lt;br /&gt;
# การกระทำอันผิดกฎหมายทุกฉบับที่เกี่ยวข้องถือเป็นความผิดส่วนบุคคล ทางมหาวิทยาลัยจะไม่รับผิดชอบใดๆ ต่อการกระทำผิดส่วนบุคคลนี้&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วย CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://foo.bar Download Installer]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
&lt;br /&gt;
: ห้อง One stop Services ชั้น 1 สำนักบริการเทคโนโลยีสารสนเทศ&lt;br /&gt;
: เบอร์โทร 053-943800 กด 1&amp;lt;br&amp;gt;&lt;br /&gt;
: e-mail : [mailto:onestop@cmu.ac.th onestop@cmu.ac.th]&lt;br /&gt;
: ITSC Facebook Fanpage: [https://www.facebook.com/fanpage.itsc https://www.facebook.com/fanpage.itsc]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5299</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5299"/>
		<updated>2026-06-09T07:11:48Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* สำหรับนักศึกษาและบุคคลากร */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
: บริการซอฟต์แวร์ลิขสิทธิ์สำหรับบุคลากรของมหาวิทยาลัยเชียงใหม่ โดยปัจจุบันมีซอฟต์แวร์ลิขสิทธิ์ที่ให้บริการ ได้แก่ Microsoft Office โดยการใช้งานซอฟต์แวร์ลิขสิทธิ์ต้องใช้ CMU Account ในการระบุตัวตนเพื่อเข้าใช้บริการ&lt;br /&gt;
&lt;br /&gt;
: เงื่อนไขในการใช้บริการ&lt;br /&gt;
# ห้ามนำผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ไปแจกจ่ายแก่นักศึกษาหรือบุคคลที่ไม่ใช่บุคคลากรของมหาวิทยาเชียงใหม่ ด้วยวิธีการใดๆ&lt;br /&gt;
# ผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้มีไว้เพื่องานของทางมหาวิทยาลัยเชี่ยงใหม่ ห้ามนำไปใช้เพื่อประโยชน์ส่วนบุคคลหรือใช้ในเชิงพาณิชย์หรืออื่นๆ ไม่ว่ากรณีใดๆ&lt;br /&gt;
# ผลิตภัณฑ์จะต้องติดตั้งบนเครื่องคอมพิวเตอร์ที่มีลิขสิทธิ์ติดตั้งจากไมโครซอฟท์ โดยสังเกตจากเครื่องที่จะติดตั้งต้องมีสติกเกอร์ของไมโครซอฟท์&lt;br /&gt;
# การใช้งานผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ต้องไม่ขัดกับกฎข้อบังคับของมหาวิทยาลัยเชียงใหม่ กฎหมายทุกฉบับที่เกี่ยวข้อง และศีลธรรมอันดีงาม&lt;br /&gt;
# การใช้งานเว็บไซต์นี้ มีการบันทึกพฤติกรรมการใช้งาน พฤติกรรมการใช้งานจะถูกรายงานต่อเจ้าหน้าที่ฝ่ายกฎหมายเมื่อมีการร้องขอ กรณีมีการกระทำผิดกฎหมาย&lt;br /&gt;
# การกระทำอันผิดกฎหมายทุกฉบับที่เกี่ยวข้องถือเป็นความผิดส่วนบุคคล ทางมหาวิทยาลัยจะไม่รับผิดชอบใดๆ ต่อการกระทำผิดส่วนบุคคลนี้&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วย CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://foo.bar Download Installer]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
&lt;br /&gt;
: ห้อง One stop Services ชั้น 1 สำนักบริการเทคโนโลยีสารสนเทศ&lt;br /&gt;
: เบอร์โทร 053-943800 กด 1&amp;lt;br&amp;gt;&lt;br /&gt;
: e-mail : [mailto:onestop@cmu.ac.th onestop@cmu.ac.th]&lt;br /&gt;
: ITSC Facebook Fanpage: [https://www.facebook.com/fanpage.itsc https://www.facebook.com/fanpage.itsc]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5298</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5298"/>
		<updated>2026-06-09T07:11:09Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* ติดต่อสอบถาม */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
: บริการซอฟต์แวร์ลิขสิทธิ์สำหรับบุคลากรของมหาวิทยาลัยเชียงใหม่ โดยปัจจุบันมีซอฟต์แวร์ลิขสิทธิ์ที่ให้บริการ ได้แก่ Microsoft Office โดยการใช้งานซอฟต์แวร์ลิขสิทธิ์ต้องใช้ CMU Account ในการระบุตัวตนเพื่อเข้าใช้บริการ&lt;br /&gt;
&lt;br /&gt;
: เงื่อนไขในการใช้บริการ&lt;br /&gt;
# ห้ามนำผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ไปแจกจ่ายแก่นักศึกษาหรือบุคคลที่ไม่ใช่บุคคลากรของมหาวิทยาเชียงใหม่ ด้วยวิธีการใดๆ&lt;br /&gt;
# ผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้มีไว้เพื่องานของทางมหาวิทยาลัยเชี่ยงใหม่ ห้ามนำไปใช้เพื่อประโยชน์ส่วนบุคคลหรือใช้ในเชิงพาณิชย์หรืออื่นๆ ไม่ว่ากรณีใดๆ&lt;br /&gt;
# ผลิตภัณฑ์จะต้องติดตั้งบนเครื่องคอมพิวเตอร์ที่มีลิขสิทธิ์ติดตั้งจากไมโครซอฟท์ โดยสังเกตจากเครื่องที่จะติดตั้งต้องมีสติกเกอร์ของไมโครซอฟท์&lt;br /&gt;
# การใช้งานผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ต้องไม่ขัดกับกฎข้อบังคับของมหาวิทยาลัยเชียงใหม่ กฎหมายทุกฉบับที่เกี่ยวข้อง และศีลธรรมอันดีงาม&lt;br /&gt;
# การใช้งานเว็บไซต์นี้ มีการบันทึกพฤติกรรมการใช้งาน พฤติกรรมการใช้งานจะถูกรายงานต่อเจ้าหน้าที่ฝ่ายกฎหมายเมื่อมีการร้องขอ กรณีมีการกระทำผิดกฎหมาย&lt;br /&gt;
# การกระทำอันผิดกฎหมายทุกฉบับที่เกี่ยวข้องถือเป็นความผิดส่วนบุคคล ทางมหาวิทยาลัยจะไม่รับผิดชอบใดๆ ต่อการกระทำผิดส่วนบุคคลนี้&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วน CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://foo.bar Download Installer]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
&lt;br /&gt;
: ห้อง One stop Services ชั้น 1 สำนักบริการเทคโนโลยีสารสนเทศ&lt;br /&gt;
: เบอร์โทร 053-943800 กด 1&amp;lt;br&amp;gt;&lt;br /&gt;
: e-mail : [mailto:onestop@cmu.ac.th onestop@cmu.ac.th]&lt;br /&gt;
: ITSC Facebook Fanpage: [https://www.facebook.com/fanpage.itsc https://www.facebook.com/fanpage.itsc]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5297</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5297"/>
		<updated>2026-06-09T07:10:10Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* บริการ software ลิขสิทธิ์ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
: บริการซอฟต์แวร์ลิขสิทธิ์สำหรับบุคลากรของมหาวิทยาลัยเชียงใหม่ โดยปัจจุบันมีซอฟต์แวร์ลิขสิทธิ์ที่ให้บริการ ได้แก่ Microsoft Office โดยการใช้งานซอฟต์แวร์ลิขสิทธิ์ต้องใช้ CMU Account ในการระบุตัวตนเพื่อเข้าใช้บริการ&lt;br /&gt;
&lt;br /&gt;
: เงื่อนไขในการใช้บริการ&lt;br /&gt;
# ห้ามนำผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ไปแจกจ่ายแก่นักศึกษาหรือบุคคลที่ไม่ใช่บุคคลากรของมหาวิทยาเชียงใหม่ ด้วยวิธีการใดๆ&lt;br /&gt;
# ผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้มีไว้เพื่องานของทางมหาวิทยาลัยเชี่ยงใหม่ ห้ามนำไปใช้เพื่อประโยชน์ส่วนบุคคลหรือใช้ในเชิงพาณิชย์หรืออื่นๆ ไม่ว่ากรณีใดๆ&lt;br /&gt;
# ผลิตภัณฑ์จะต้องติดตั้งบนเครื่องคอมพิวเตอร์ที่มีลิขสิทธิ์ติดตั้งจากไมโครซอฟท์ โดยสังเกตจากเครื่องที่จะติดตั้งต้องมีสติกเกอร์ของไมโครซอฟท์&lt;br /&gt;
# การใช้งานผลิตภัณฑ์หรือคีย์จากเว็บไซต์นี้ต้องไม่ขัดกับกฎข้อบังคับของมหาวิทยาลัยเชียงใหม่ กฎหมายทุกฉบับที่เกี่ยวข้อง และศีลธรรมอันดีงาม&lt;br /&gt;
# การใช้งานเว็บไซต์นี้ มีการบันทึกพฤติกรรมการใช้งาน พฤติกรรมการใช้งานจะถูกรายงานต่อเจ้าหน้าที่ฝ่ายกฎหมายเมื่อมีการร้องขอ กรณีมีการกระทำผิดกฎหมาย&lt;br /&gt;
# การกระทำอันผิดกฎหมายทุกฉบับที่เกี่ยวข้องถือเป็นความผิดส่วนบุคคล ทางมหาวิทยาลัยจะไม่รับผิดชอบใดๆ ต่อการกระทำผิดส่วนบุคคลนี้&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วน CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://foo.bar Download Installer]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
&lt;br /&gt;
ห้อง One stop Services ชั้น 1 สำนักบริการเทคโนโลยีสารสนเทศ&amp;lt;br&amp;gt;&lt;br /&gt;
เบอร์โทร 053-943800 กด 1&amp;lt;br&amp;gt;&lt;br /&gt;
e-mail : onestop@cmu.ac.th&amp;lt;br&amp;gt;&lt;br /&gt;
ITSC Facebook Fanpage:&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.facebook.com/fanpage.itsc https://www.facebook.com/fanpage.itsc]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5296</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5296"/>
		<updated>2026-06-09T07:06:54Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* ติดต่อสอบถาม */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วน CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://foo.bar Download Installer]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
&lt;br /&gt;
ห้อง One stop Services ชั้น 1 สำนักบริการเทคโนโลยีสารสนเทศ&amp;lt;br&amp;gt;&lt;br /&gt;
เบอร์โทร 053-943800 กด 1&amp;lt;br&amp;gt;&lt;br /&gt;
e-mail : onestop@cmu.ac.th&amp;lt;br&amp;gt;&lt;br /&gt;
ITSC Facebook Fanpage:&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.facebook.com/fanpage.itsc https://www.facebook.com/fanpage.itsc]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5295</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5295"/>
		<updated>2026-06-09T07:06:20Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วน CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://foo.bar Download Installer]&lt;br /&gt;
&lt;br /&gt;
== ติดต่อสอบถาม ==&lt;br /&gt;
&lt;br /&gt;
ห้อง One stop Services ชั้น 1 สำนักบริการเทคโนโลยีสารสนเทศ&lt;br /&gt;
เบอร์โทร 053-943800 กด 1&lt;br /&gt;
e-mail : onestop@cmu.ac.th&lt;br /&gt;
ITSC Facebook Fanpage:&lt;br /&gt;
https://www.facebook.com/fanpage.itsc&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5294</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5294"/>
		<updated>2026-06-09T07:03:19Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* สำหรับผู้ดูแลระบบ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วน CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน ติดต่อ Onestop Service เพื่อขอสิทธิ์เข้าถึงตัวติดตั้ง และ download ตัวติดตั้งได้ที่ [https://foo.bar Download Installer]&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5293</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5293"/>
		<updated>2026-06-09T07:00:56Z</updated>

		<summary type="html">&lt;p&gt;Supawit: /* สำหรับนักศึกษาและบุคคลากร */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com] และเข้าสู่ระบบด้วน CMU IT Account&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5292</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5292"/>
		<updated>2026-06-09T04:58:46Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com https://office.com]&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5291</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5291"/>
		<updated>2026-06-09T04:57:44Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. Tempus leo eu aenean sed diam urna tempor. Pulvinar vivamus fringilla lacus nec metus bibendum egestas. Iaculis massa nisl malesuada lacinia integer nunc posuere. Ut hendrerit semper vel class aptent taciti sociosqu. Ad litora torquent per conubia nostra inceptos himenaeos.&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
ใช้ Microsoft office 365 จาก [https://office.com]&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5290</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5290"/>
		<updated>2026-06-09T04:55:29Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
=== สำหรับนักศึกษาและบุคคลากร ===&lt;br /&gt;
&lt;br /&gt;
=== สำหรับผู้ดูแลระบบ ===&lt;br /&gt;
&lt;br /&gt;
ติดตั้งเครื่องส่วนงานที่ใช้ร่วมกัน&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5289</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5289"/>
		<updated>2026-06-09T04:54:08Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
== Microsoft Windows ==&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5288</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5288"/>
		<updated>2026-06-09T04:53:58Z</updated>

		<summary type="html">&lt;p&gt;Supawit: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&lt;br /&gt;
&lt;br /&gt;
== Microsoft office ==&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;/div&gt;</summary>
		<author><name>Supawit</name></author>
	</entry>
	<entry>
		<id>https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5287</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://network.cmu.ac.th/wiki/index.php?title=License&amp;diff=5287"/>
		<updated>2026-06-09T04:52:36Z</updated>

		<summary type="html">&lt;p&gt;Supawit: Created page with &amp;quot;== บริการ software ลิขสิทธิ์ ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== บริการ software ลิขสิทธิ์ ==&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=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>
</feed>