[ NodeJS ] NodeJS + nginx 設置

工欲善其事,必先利其器
我們的環境使用Amazon EC2 的Ubuntu

Ubuntu上面準備事項請參考這篇
但是有個好用的工具 byobu, 安裝 sudo apt-get install byobu
如果要每次透過文字介面登入時都自動啟動byobu,請輸入byobu-enable


NodeJS 使用 PM2 去管理

  • pm2 start app.js
  • envirent_variable=value port=8080 pm2 start app.js
    • 新增環境變數
      • envirent_variable=value
      • port = 8080 (指定環境變數por=8080)
  • pm2 logs (看所有的logs)

為了要加速與封包導向用途, 大部份的人都推薦用Nginx - Reverse Proxy 來加速
假如說我們把NodeJS的App建立在port 8080
這樣我們的URL 會長的像 http://localhost:8080/
如果要讓port number消失, 可以使用iptables將封包導向
或是可以使用Nginx將特定的port封包導向到另一個

使用iptables

  • sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
使用Nginx
  1. sudo apt-get install nginx
  2. sudo vi /etc/nginx/sites-available/default
  3. 將port 80 的Request導向port 8080
    # 設定一個名稱在NodeJS App跑的port上
    upstream appName {
      server 127.0.0.1:8080;
    }

    server {
      # 監聽port 80
      listen 80;
      server_name 你的domain/app網址; #ex: neil.domain.com
     
      # 將網址是/開頭的Request都走向此規則
      location / {
          #try_files $uri $uri/ =404; 用原生NodeJS架http/https server別開啟這行
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_set_header X-NginX-Proxy true;
          proxy_pass http://appName/;
          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;
      }
    }
  4. 重啟Nginx
    • sudo service nginx stop
    • sudo service nginx start
    • 若無法啟動可以直接執行sudo nginx觀察錯誤
  5. 就可以直接測試http://localhost/, 應該就會導向到http://localhost:8080

如果有使用virtual host的話可以看這篇

要讓virtual host生效, 必須先在sites-available內建立該host的config
然後使用soft link過去

sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

Reference

留言

這個網誌中的熱門文章

[翻譯] 介紹現代網路負載平衡與代理伺服器

[MySQL] schema 與資料類型優化