ค้นหาเว็บไซต์

วิธีติดตั้ง Nginx ด้วยโฮสต์เสมือนและใบรับรอง SSL


Nginx (ย่อมาจาก Engine-x) เป็นโอเพ่นซอร์สฟรี ทรงพลัง ประสิทธิภาพสูง และปรับขนาดได้ HTTP และพร็อกซีเซิร์ฟเวอร์ย้อนกลับ เมล และพร็อกซี TCP/UDP มาตรฐาน เซิร์ฟเวอร์ ใช้งานง่ายและกำหนดค่าด้วยภาษาการกำหนดค่าที่เรียบง่าย ขณะนี้ Nginx เป็นซอฟต์แวร์เว็บเซิร์ฟเวอร์ที่ต้องการสำหรับการขับเคลื่อนไซต์ที่มีการโหลดจำนวนมาก เนื่องจากความสามารถในการปรับขนาดและประสิทธิภาพ

ในบทความนี้จะกล่าวถึงวิธีใช้ Nginx เป็นเซิร์ฟเวอร์ HTTP กำหนดค่าให้ให้บริการเนื้อหาเว็บ และตั้งค่าโฮสต์เสมือนตามชื่อ และสร้างและติดตั้ง SSL สำหรับการส่งข้อมูลที่ปลอดภัย รวมถึงใบรับรองที่ลงนามด้วยตนเองบน Ubuntu และ CentOS .

วิธีการติดตั้งเว็บเซิร์ฟเวอร์ Nginx

ขั้นแรกด้วยการติดตั้งแพ็คเกจ Nginx จากที่เก็บข้อมูลอย่างเป็นทางการโดยใช้ตัวจัดการแพ็คเกจของคุณดังที่แสดง

------------ On Ubuntu ------------ 
sudo apt update 
sudo apt install nginx 

------------ On CentOS ------------
sudo yum update 
sudo yum install epel-release 
sudo yum install nginx 

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

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

ณ จุดนี้ เว็บเซิร์ฟเวอร์ Nginx ควรเปิดใช้งานแล้ว คุณสามารถตรวจสอบสถานะได้ด้วยคำสั่ง netstat

sudo netstat -tlpn | grep nginx

หากระบบของคุณเปิดใช้งานไฟร์วอลล์ คุณจะต้องเปิดพอร์ต 80 และ 443 เพื่ออนุญาตการรับส่งข้อมูล HTTP และ HTTPS ตามลำดับ โดยวิ่งผ่านมัน

------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload 

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

http://Your-IP-Address
OR
http://Your-Domain.com

ควรระบุการติดตั้งที่ใช้งานได้บนหน้าจอต่อไปนี้

วิธีกำหนดค่าเว็บเซิร์ฟเวอร์ Nginx

ไฟล์การกำหนดค่าของ Nginx อยู่ในไดเรกทอรี /etc/nginx และไฟล์การกำหนดค่าส่วนกลางอยู่ที่ /etc/nginx/nginx.conf บนทั้ง CentOS และ Ubuntu

Nginx ประกอบด้วยโมดูลที่ควบคุมโดยตัวเลือกการกำหนดค่าต่างๆ ที่เรียกว่า คำสั่ง คำสั่งอาจเป็นแบบธรรมดาก็ได้ (ในชื่อแบบฟอร์มและค่าที่ลงท้ายด้วย ;) หรือ บล็อก ( มีคำแนะนำเพิ่มเติมอยู่ใน {}) และคำสั่งบล็อกซึ่งมีคำสั่งอื่นเรียกว่า บริบท

คำสั่งทั้งหมดได้รับการอธิบายอย่างครอบคลุมในเอกสาร Nginx ในเว็บไซต์โครงการ คุณสามารถดูข้อมูลเพิ่มเติมได้

วิธีแสดงเนื้อหาแบบคงที่โดยใช้ Nginx ในโหมดสแตนด์อโลน

ในระดับพื้นฐาน Nginx สามารถใช้เพื่อแสดงเนื้อหาคงที่ เช่น ไฟล์ HTML และสื่อ ในโหมดสแตนด์อโลน ซึ่งใช้เฉพาะบล็อกเซิร์ฟเวอร์เริ่มต้นเท่านั้น (คล้ายกับ Apache ที่ไม่มีการกำหนดค่าโฮสต์เสมือน)

เราจะเริ่มต้นด้วยการอธิบายโครงสร้างการกำหนดค่าโดยย่อในไฟล์การกำหนดค่าหลัก

 
sudo vim /etc/nginx/nginx.conf

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

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

ต่อไปนี้คือตัวอย่างไฟล์การกำหนดค่าหลักของ Nginx (/etc/nginx/nginx.conf) โดยที่บล็อก http ด้านบนมีคำสั่งรวมซึ่งจะบอก Nginx ว่าจะค้นหาไฟล์การกำหนดค่าเว็บไซต์ได้ที่ไหน (การกำหนดค่าโฮสต์เสมือน) .

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

โปรดทราบว่าใน Ubuntu คุณจะพบคำสั่งรวมเพิ่มเติม (include /etc/nginx/sites-enabled/*;) โดยที่ไดเรกทอรี /etc /nginx/sites-enabled/ จัดเก็บ symlink ไปยังไฟล์การกำหนดค่าของเว็บไซต์ที่สร้างใน /etc/nginx/sites-available/ เพื่อเปิดใช้งานไซต์ และการลบ symlink จะเป็นการปิดการใช้งานไซต์นั้น

ขึ้นอยู่กับแหล่งที่มาการติดตั้งของคุณ คุณจะพบไฟล์การกำหนดค่าเว็บไซต์เริ่มต้นที่ /etc/nginx/conf.d/default.conf (หากคุณติดตั้งจากพื้นที่เก็บข้อมูล NGINX อย่างเป็นทางการ และ EPEL) หรือ /etc/nginx/sites-enabled/default (หากคุณติดตั้งจากที่เก็บ Ubuntu)

นี่คือตัวอย่างบล็อกเซิร์ฟเวอร์ nginx เริ่มต้นของเราซึ่งอยู่ที่ /etc/nginx/conf.d/default.conf บนระบบทดสอบ

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

คำอธิบายโดยย่อของคำสั่งในการกำหนดค่าข้างต้น:

  • ฟัง: ระบุ พอร์ต ที่เซิร์ฟเวอร์รับฟัง
  • server_name: กำหนดชื่อเซิร์ฟเวอร์ซึ่งอาจเป็นชื่อที่ตรงกันทุกประการ ชื่อไวด์การ์ด หรือนิพจน์ทั่วไป
  • root: ระบุไดเร็กทอรีที่ Nginx จะแสดงหน้าเว็บและเอกสารอื่น ๆ
  • ดัชนี: ระบุประเภทของไฟล์ดัชนีที่จะให้บริการ
  • ตำแหน่ง: ใช้เพื่อประมวลผลคำขอสำหรับไฟล์และโฟลเดอร์เฉพาะ

จากเว็บเบราว์เซอร์ เมื่อคุณชี้ไปที่เซิร์ฟเวอร์โดยใช้ ชื่อโฮสต์ localhost หรือที่อยู่ IP เซิร์ฟเวอร์จะประมวลผลคำขอและให้บริการไฟล์ /var/www/html/index.html และบันทึกเหตุการณ์ลงในบันทึกการเข้าถึงทันที (/var/log/nginx/access.log) พร้อมการตอบสนอง 200 (ตกลง) ในกรณีที่เกิดข้อผิดพลาด (เหตุการณ์ล้มเหลว) ระบบจะบันทึกข้อความในบันทึกข้อผิดพลาด (/var/log/nginx/error.log)

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

แทนที่จะใช้ไฟล์บันทึกเริ่มต้น คุณสามารถกำหนดไฟล์บันทึกแบบกำหนดเองสำหรับเว็บไซต์ต่างๆ ได้ ตามที่เราจะดูในภายหลัง ภายใต้หัวข้อ “การตั้งค่าโฮสต์เสมือนตามชื่อ (บล็อกเซิร์ฟเวอร์)”

วิธีจำกัดการเข้าถึงเว็บเพจด้วย Nginx

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

เริ่มต้นด้วยการสร้างไฟล์ที่จะจัดเก็บข้อมูลรับรองการเข้าถึงของคุณ (ชื่อผู้ใช้/รหัสผ่าน) โดยใช้ยูทิลิตี htpasswd

 
yum install httpd-tools		#RHEL/CentOS
sudo apt install apache2-utils	#Debian/Ubuntu

ตามตัวอย่าง ลองเพิ่มผู้ดูแลระบบผู้ใช้ลงในรายการนี้ (คุณสามารถเพิ่มผู้ใช้ได้มากที่สุดเท่าที่จะเป็นไปได้) โดยที่ตัวเลือก -c ใช้เพื่อระบุไฟล์รหัสผ่าน และ -B เพื่อเข้ารหัสรหัสผ่าน เมื่อคุณกด [Enter] คุณจะถูกขอให้ป้อนรหัสผ่านผู้ใช้:

sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

จากนั้น มากำหนดสิทธิ์และความเป็นเจ้าของที่เหมาะสมให้กับไฟล์รหัสผ่าน (แทนที่ผู้ใช้และกลุ่ม nginx ด้วย www-data บน Ubuntu)

sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

ดังที่เราได้กล่าวไว้ก่อนหน้านี้ คุณสามารถจำกัดการเข้าถึงเว็บเซิร์ฟเวอร์ของคุณ เว็บไซต์เดียว (โดยใช้บล็อกเซิร์ฟเวอร์) หรือไดเร็กทอรีหรือไฟล์เฉพาะได้ สามารถใช้คำสั่งที่เป็นประโยชน์สองประการเพื่อให้บรรลุเป้าหมายนี้:

  • auth_basic – เปิดการตรวจสอบความถูกต้องของชื่อผู้ใช้และรหัสผ่านโดยใช้โปรโตคอล “การตรวจสอบสิทธิ์ขั้นพื้นฐาน HTTP
  • auth_basic_user_file – ระบุไฟล์ข้อมูลประจำตัว

ตามตัวอย่าง เราจะแสดงวิธีการป้องกันด้วยรหัสผ่านไดเรกทอรี /var/www/html/protected

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

ตอนนี้ บันทึกการเปลี่ยนแปลง และเริ่มบริการ Nginx ใหม่

sudo systemctl restart nginx 

ครั้งถัดไปที่คุณชี้เบราว์เซอร์ของคุณไปที่ไดเรกทอรีด้านบน (http://localhost/protected) คุณจะถูกขอให้ป้อนข้อมูลรับรองการเข้าสู่ระบบของคุณ (ชื่อผู้ใช้ ผู้ดูแลระบบ และรหัสผ่านที่เลือก ).

การเข้าสู่ระบบที่สำเร็จจะทำให้คุณสามารถเข้าถึงเนื้อหาของไดเร็กทอรี ไม่เช่นนั้นคุณจะได้รับข้อผิดพลาด “401 Authorization Required

วิธีการตั้งค่าโฮสต์เสมือนตามชื่อ (เซิร์ฟเวอร์บล็อก) ใน Nginx

บริบทของเซิร์ฟเวอร์อนุญาตให้หลายโดเมน/ไซต์ถูกจัดเก็บและให้บริการจากเครื่องเดียวกันหรือเซิร์ฟเวอร์ส่วนตัวเสมือน (VPS) สามารถประกาศบล็อกเซิร์ฟเวอร์หลายรายการ (แทนโฮสต์เสมือน) ภายในบริบท http สำหรับแต่ละไซต์/โดเมน Nginx ตัดสินใจว่าเซิร์ฟเวอร์ใดที่ประมวลผลคำขอตามส่วนหัวคำขอที่ได้รับ

เราจะสาธิตแนวคิดนี้โดยใช้โดเมนจำลองต่อไปนี้ ซึ่งแต่ละโดเมนอยู่ในไดเร็กทอรีที่ระบุ:

  • wearelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

ถัดไป กำหนดสิทธิ์ที่เหมาะสมในไดเร็กทอรีสำหรับแต่ละไซต์

sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

ตอนนี้ ให้สร้างไฟล์ index.html ตัวอย่างภายในไดเร็กทอรี public_html แต่ละรายการ

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

จากนั้น สร้างไฟล์การกำหนดค่าบล็อกเซิร์ฟเวอร์สำหรับแต่ละไซต์ภายในไดเร็กทอรี /etc/httpd/conf.d

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf

เพิ่มการประกาศบล็อกเซิร์ฟเวอร์ต่อไปนี้ในไฟล์ wearelinux-console.net.conf

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

จากนั้น เพิ่มการประกาศบล็อกเซิร์ฟเวอร์ต่อไปนี้ในไฟล์ welovelinux.com.conf

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

หากต้องการใช้การเปลี่ยนแปลงล่าสุด ให้รีสตาร์ทเว็บเซิร์ฟเวอร์ Nginx

sudo systemctl restart nginx

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

http://wearelinux-console.net
http://welovelinux.com

ข้อสำคัญ: หากคุณเปิดใช้งาน SELinux การกำหนดค่าเริ่มต้นจะไม่อนุญาตให้ Nginx เข้าถึงไฟล์นอกตำแหน่งที่ได้รับอนุญาตซึ่งเป็นที่รู้จัก (เช่น /etc/nginx สำหรับการกำหนดค่า /var/log/nginx สำหรับบันทึก /var/www/html สำหรับไฟล์เว็บ ฯลฯ..) .

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

วิธีการติดตั้งและกำหนดค่า SSL ด้วย Nginx

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

เราจะกล่าวถึงวิธีการสร้างและติดตั้งใบรับรองที่ลงนามด้วยตนเอง และสร้างคำขอลงนามใบรับรอง (CSR) เพื่อรับใบรับรอง SSL จากผู้ออกใบรับรอง (CA) เพื่อใช้กับ Nginx

ใบรับรองที่ลงนามด้วยตนเองนั้นสร้างได้ฟรีและใช้งานได้จริงเพื่อวัตถุประสงค์ในการทดสอบและบริการ LAN ภายในเท่านั้น สำหรับเซิร์ฟเวอร์แบบสาธารณะ ขอแนะนำให้ใช้ใบรับรองที่ออกโดย CA (เช่น Let's Encrypt) เพื่อรักษาความถูกต้อง

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

sudo mkdir /etc/nginx/ssl-certs/

จากนั้นสร้างใบรับรองที่ลงนามด้วยตนเองและคีย์โดยใช้เครื่องมือบรรทัดคำสั่ง openssl

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

มาอธิบายตัวเลือกที่ใช้ในคำสั่งด้านบนโดยย่อ:

  • req -X509 – แสดงว่าเรากำลังสร้างใบรับรอง x509
  • -nodes (NO DES) – หมายถึง “อย่าเข้ารหัสคีย์”
  • -วัน 365 – ระบุจำนวนวันที่ใบรับรองจะใช้งานได้
  • -newkey rsa:2048 – ระบุว่าคีย์ที่สร้างโดยใช้อัลกอริทึม RSA ควรเป็น 2048 บิต
  • -keyout /etc/nginx/ssl-certs/nginx.key – ระบุเส้นทางแบบเต็มของคีย์ RSA
  • -out /etc/nginx/ssl-certs/nginx.crt – ระบุเส้นทางแบบเต็มของใบรับรอง

จากนั้น เปิดไฟล์การกำหนดค่าโฮสต์เสมือนของคุณ และเพิ่มบรรทัดต่อไปนี้ลงในการประกาศบล็อกเซิร์ฟเวอร์ที่รับฟังบนพอร์ต 443 เราจะทดสอบกับไฟล์โฮสต์เสมือน /etc/nginx/conf.d/wearelinux-console.net.conf

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

จากนั้นเพิ่มคำสั่ง ssl ลงในไฟล์กำหนดค่า nginx ซึ่งควรมีลักษณะคล้ายกับด้านล่าง

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

ตอนนี้รีสตาร์ท Nginx แล้วชี้เบราว์เซอร์ของคุณไปยังที่อยู่ต่อไปนี้

https://www.wearelinux-console.net

หากคุณต้องการซื้อใบรับรอง SSL จาก CA คุณต้องสร้างคำขอลงนามใบรับรอง (CSR) ดังที่แสดง

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

คุณยังสามารถสร้าง CSR จากคีย์ส่วนตัวที่มีอยู่ได้

sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

จากนั้น คุณต้องส่ง CSR ที่สร้างขึ้นไปยัง CA เพื่อขอการออกใบรับรอง SSL ที่ลงนามโดย CA เมื่อคุณได้รับใบรับรองจาก CA แล้ว คุณสามารถกำหนดค่าได้ตามที่แสดงด้านบน

อ่านเพิ่มเติม: สุดยอดคู่มือในการรักษาความปลอดภัย เสริมประสิทธิภาพ และปรับปรุงประสิทธิภาพของเว็บเซิร์ฟเวอร์ Nginx

สรุป

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

หากคุณประสบปัญหาใดๆ ในระหว่างกระบวนการติดตั้ง/กำหนดค่า nginx หรือมีคำถามหรือความคิดเห็นใดๆ โปรดใช้แบบฟอร์มคำติชมด้านล่างเพื่อติดต่อเรา