วิธีติดตั้ง 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 หรือมีคำถามหรือความคิดเห็นใดๆ โปรดใช้แบบฟอร์มคำติชมด้านล่างเพื่อติดต่อเรา