接下來這篇就會比較偏 server 設定了!

nginx 是一套伺服器軟體,和 apache 並駕齊驅

(其實我覺得 nginx >>> apache XD)

主要是 nginx 清量快速

我們要拿他幫 nodejs 處理接收 request 的部分,再將 request 導往 nodejs

所以感覺就會如下圖:

image

可以讓 nginx 當作是 load balancer,

透過 reverse proxy 的方式轉發 request 給 nodejs, 讓 nginx 承受流量

這就是我們今天要做的事情,

所以首先,我們就要先裝 nginx,因此就先進虛擬機吧!

$ sudo apt-get update && sudo apt-get upgrade -y
$ sudo apt-get install nginx 

這樣就會安裝一個 nginx 了!

Nginx 的設定檔都是放在 /etc/nginx/ 底下

個別網站的設定放在 /etc/nginx/sites-available

如果要讓該網站上線,則會將 /etc/nginx/sites-available 的設定檔 link 到 /etc/nginx/sites-enable

因此若想自己新增設定檔的話,慣例是會在 available 新增,然後再 link 到 enable

如果我們進到 /etc/nginx/sites-enable 的話,裡面應該已經有一個 default 的設定檔了

$ sudo vim /etc/nginx/sites-enable/default

內容應該是:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
        #location /RequestDenied {
        #       proxy_pass http://127.0.0.1:8080;
        #}
        
        ...
}

將設定檔改成如下:

upstream nodejs {
  server 127.0.0.1:3000;
  #server 127.0.0.1:3001;
}

server {
    listen 80;

    server_name localhost;

    location / {
        proxy_pass http://nodejs;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

解釋一下以下這段:

upstream nodejs {
  server 127.0.0.1:3000;
  #server 127.0.0.1:3001;
}

下面這段則是 proxy pass 的部分, 會將 / 的流量導到 nodejs 的 server cluster 裡面,不過因為我們現在只有一台 server 開起來,所以只會被導到 3000 port 的那台機器

location / {
        proxy_pass http://nodejs;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

如果 nodejs server 的承載量不夠,可以開好幾檯,只要 port 不一樣即可

這樣就可以建立一個 nodejs cluster

再來使用 forever 開啓 nodejs server

再重新開啟 nginx

使用 postman 戳戳看 API

就成功囉~~