ติดตั้ง nginx บน Ubuntu 16.04

มาดูวิธีการติดตั้งและคอนฟิก nginx บน Ubuntu 16.04 เพื่อรันเป็นเว็บเซิร์ฟเวอร์เบื้องต้นกัน

ใช้คำสั่ง apt install ติดตั้งแพ็คเกจชื่อ nginx

dev@ubuntu-1604:~$ sudo apt install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4
  nginx-common nginx-core
Suggested packages:
  libgd-tools fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
  fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5 libvpx3 libxpm4
  nginx nginx-common nginx-core
0 upgraded, 13 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,850 kB of archives.
After this operation, 9,314 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
...

หลัง apt ติดตั้งเสร็จเรียบร้อย โปรเซส nginx จะถูกรันขึ้นมาโดยอัตโนมัติ

คอนฟิกไฟล์หลักของ nginx ที่ได้จากการติดตั้งด้วยคำสั่ง apt บน Ubuntu 16.04 คือไฟล์ /etc/nginx/nginx.conf

ตัวอย่างไฟล์คอนฟิกหลักของ nginx ในที่นี้ขอแสดงเฉพาะส่วนของคอนฟิกพื้นฐาน ที่จะอธิบาย

dev@ubuntu-1604:~$ vi /etc/nginx/nginx.conf
user www-data;
...

http {
        ....

        ##
        # Logging Settings
        ##

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

        ....

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}
...

คำอธิบาย

  • คอนฟิก user จะเป็นชื่อ user ที่ใช้ในการรันโปรเซส nginx
dev@ubuntu-1604:~$ ps -ef | grep nginx
root     12533     1 0 19:17 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 12534 12533 0 19:17 ? 00:00:00 nginx: worker process
  • access_log ระบุชื่อไฟล์ที่ใช้เก็บประวัติการเรียกใช้เว็บเซิร์ฟเวอร์
  • error_log ระบุชื่อไฟล์ที่ใช้เก็บข้อผิดพลาด (error) ที่เกิดขึ้น
  • include ระบุชื่อไฟล์คอนฟิกเพิ่มเติม ที่ nginx จะไปอ่าน ในที่นี้ขออธิบายเฉพาะ sites-enabled

การระบุไฟล์คอนฟิก /etc/nginx/sites-enabled/* หมายถึง ให้ nginx ไปอ่านทุกไฟล์ ที่อยู่ในไดเรคทอรี /etc/nginx/sites-enabled/ เพื่อคอนฟิกเพิ่มเติม

ดีฟอลต์จากการติดตั้ง ถ้าลอง ls -l ดูชื่อไฟล์ในไดเรคทอรีนี้

dev@ubuntu-1604:~$ ls -l /etc/nginx/sites-enabled/
total 0
lrwxrwxrwx 1 root root 34 Oct 16 19:17 default -> /etc/nginx/sites-available/default

จะเห็นลิงก์ไฟล์ (symbolic link) ไปยังไฟล์ /etc/nginx/sites-available/default

ลองเปิดไฟล์ที่ถูกลิงก์ไป

dev@ubuntu-1604:~$ vi /etc/nginx/sites-available/default
...
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        ...

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        ...

ไฟล์ default นี้เป็นไฟล์ที่ระบุคอนฟิกส่วนเว็บเซิร์ฟเวอร์ (server) โดยระบุหมายเลขพอร์ต (listen 80) ที่ใช้รอรับการเรียกเว็บจากไคลเอนต์

root เป็นคอนฟิกกำหนดไดเรคทอรีหลัก ตอนเรียกเว็บเซิร์ฟเวอร์โดยไม่ได้ระบุพาธใดๆ ต่อท้ายชื่อเว็บไซต์ เช่น http://www.example.com

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

ทดลองใช้ browser เข้าเว็บไซต์ โดยระบุ IP ของเครื่องเซิร์ฟเวอร์ Ubuntu

ตัวอย่างหน้าจอเว็บดีฟอลต์ของ เว็บเซิร์ฟเวอร์ nginx

01-welcome-to-nginx

คำอธิบายคือ browser เข้าเว็บเซิร์ฟเวอร์โดยการระบุ IP ของตัวเซิร์ฟเวอร์ แต่ไม่ได้ระบุพาธ หรือชื่อไฟล์ใดๆ ต่อท้าย

เพราะฉะนั้น เว็บเซิร์ฟเวอร์ nginx จะไปเรียกไฟล์ที่อยู่ในไดเรคทอรีที่ระบุเป็น root แล้วไล่หาไฟล์ที่อยู่ในคอนฟิก index ตามลำดับ

ถ้า ls -l ดูไฟล์ที่อยู่ในไดเรคทอรี root หรือโดยดีฟอลต์คือ /var/www/html/

dev@ubuntu-1604:~$ ls -l /var/www/html/
total 4
-rw-r--r-- 1 root root 612 Oct 16 19:17 index.nginx-debian.html

ไฟล์ index.nginx-debian.html จะอยู่ในรายชื่อของ คอนฟิก index ด้วย

ดังนั้นไฟล์นี้จะถูกเรียกขึ้นมาแสดงผลผ่านหน้าเว็บ

dev@ubuntu-1604:~$ vi /var/www/html/index.nginx-debian.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

ตัวอย่างข้อความที่แสดงในไฟล์ access_log

dev@ubuntu-1604:~$ tail /var/log/nginx/access.log
192.168.56.1 - - [16/Oct/2016:20:29:58 +0700] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 Chrome/53.0..."

ไฟล์ index.html

ถ้าลองสร้างไฟล์ index.html ซึ่งมีลำดับนำหน้าไฟล์ index.nginx-debian.html

dev@ubuntu-1604:~$ sudo vi /var/www/html/index.html
test index order by creating index.html

dev@ubuntu-1604:~$ ls -l /var/www/html/
total 8
-rw-r--r-- 1 root root  40 Oct 16 20:11 index.html
-rw-r--r-- 1 root root 612 Oct 16 19:17 index.nginx-debian.html

แล้วลอง refresh บน browser ดู

02-test-index-html

ไฟล์ index.html จะถูกเรียกขึ้นมาแสดงหน้าเว็บแทน เพราะมีลำดับก่อนหน้า ในคอนฟิก index

หรือจะเรียกเว็บโดยระบุชื่อไฟล์ ก็จะให้ผลเหมือนกัน เช่นระบุเป็น

http://192.168.56.116/index.html

หรือถ้าต้องการเรียกไฟล์ index.nginx-debian.html ขึ้นมาแสดง ก็สามารถระบุที่อยู่เป็น

http://192.168.56.116/index.nginx-debian.html

403 Forbidden

ถ้าลองลบไฟล์ทั้งสองไฟล์ออกไป

dev@ubuntu-1604:~$ sudo rm /var/www/html/index.html
dev@ubuntu-1604:~$ sudo rm /var/www/html/index.nginx-debian.html

ลอง refresh บน browser ดู

03-403-forbidden

ขึ้นข้อความ 403 Forbidden คือไม่มีไฟล์ที่ระบุในคอนฟิก index ในพาธที่ระบุ

หมายเหตุ จะแตกต่างจาก 404 Not Found ด้านล่างคือ พาธที่เรียกแล้วขึ้น 403 นี้มีไดเรคทอรีอยู่ แต่ไม่มีไฟล์ที่ทำหน้าที่ index

ตัวอย่างข้อความในไฟล์ access_log ที่เรียกพาธ แต่ไม่ได้ระบุไฟล์ และก็ไม่มีมีไฟล์ที่ทำหน้าที่เป็น index

dev@ubuntu-1604:~$ tail /var/log/nginx/access.log
192.168.56.1 - - [16/Oct/2016:20:31:42 +0700] "GET / HTTP/1.1" 403 208 "-" "Mozilla/5.0 Chrome/53.0..."

สังเกตตัวเลข 403 ในไฟล์ access_log  แสดงผลการเรียกพาธ ที่ไม่มีไฟล์ที่ทำหน้าที่ index

ตัวอย่างข้อความที่แสดงในไฟล์ error_log

dev@ubuntu-1604:~$ tail /var/log/nginx/error.log
2016/10/16 20:31:42 [error] 12534#12534: *15 directory index of "/var/www/html/" is forbidden, client: 192.168.56.1, server: _, request: "GET / HTTP/1.1", host: "192.168.56.116"

404 Not Found

ถ้าลองเรียกไฟล์หรือพาธที่ไม่มีอยู่บนเว็บเซิร์ฟเวอร์ จะขึ้นข้อความ 404 Not Found

04-404-not-found

ตัวอย่างข้อความในไฟล์ access_log กรณีที่เรียกไฟล์หรือพาธที่ไม่มี

dev@ubuntu-1604:~$ tail /var/log/nginx/access.log
192.168.56.1 - - [16/Oct/2016:20:33:51 +0700] "GET /nofile.html HTTP/1.1" 404 209 "-" "Mozilla/5.0 Chrome/53.0..."

สังเกตตัวเลข 404 ในไฟล์ access_log แสดงผลการเรียกไฟล์ที่ไม่มี

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.