天天看點

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

如果對nodeJS的後端的系統,源代碼在github上,https://github.com/saucxs/nodeJSBlog ,如果覺得可以,請請

star

fork

項目

項目位址:http://www.mwcxs.top/

接下來你會看到以下部分:

一、安裝nginx

二、将Nginx設定為Windows服務

三、将Nginx設定為Windows服務

四、 将項目檔案上傳到伺服器指定的地方

五、使用nssm在windows伺服器上部署nodeJS

六、但是外網通路不了

 之前弄過linux伺服器,弄過win伺服器,感覺linux伺服器作為伺服器才是最佳的選擇,選擇ubuntu系統,或者centos最為伺服器也比win伺服器好,配置更簡單,逼格更高,但是有出現win伺服器

的時候也可以玩一玩,遇到坑,踩一踩,填一填,就會收獲很多。

下面進入到正題。

下載下傳windows版nginx (http://nginx.org/download/nginx-1.12.2.zip),之後解壓到需要放置的位置(C:\nginx)

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

需要借助"Windows Service Wrapper"小工具,項目位址: https://github.com/kohsuke/winsw

下載下傳位址: http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/1.18/winsw-1.18-bin.exe

下載下傳該工具後,将其放在 Nginx安裝目錄下,并重命名為nginx-service.exe,建立配置檔案nginx-service.xml(名字要和工具名一樣)。

下面是nginx-service.xml檔案内容:

<service>
  <id>nginx</id>
  <name>Nginx Service</name>
  <description>High Performance Nginx Service</description>
  <logpath>D:\xampp\nginx\logs</logpath>
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
  </log>
  <executable>D:\xampp\nginx\nginx.exe</executable>
  <startarguments>-p D:\xampp\nginx</startarguments>
  <stopexecutable>D:\xampp\nginx\nginx.exe</stopexecutable>
  <stoparguments>-p D:\xampp\nginx -s stop</stoparguments>
</service>      

在cmd中運作如下指令安裝windows服務

C:\nginx\nginx-service.exe install      

在服務中,浏覽器可以正常通路,localhost。

注意:

(1)解除安裝服務

C:\nginx\nginx-service.exe uninstall      

(2)檢視系統服務

在指令行中輸入

services.msc      
windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

(3)啟動服務(指令行)

net start nginx      

(4)關閉服務(指令行)

net stop nginx      

 配置項Nginx核心配置檔案是nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http{
   include       mime.types;

     default_type  application/octet-stream;

     sendfile on;
     tcp_nopush on;
     tcp_nodelay on;

     keepalive_timeout 60;

     client_header_buffer_size 4k;

     open_file_cache max=51200 inactive=20s;
     open_file_cache_valid 30s;
     open_file_cache_min_uses 1;

     types_hash_max_size 2048;
     client_max_body_size 10m;

     gzip_vary on;
     gzip_proxied any;
     gzip_comp_level 6;
     gzip_buffers 16 8k;
     gzip_http_version 1.1;
     gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
     gzip on;
     gzip_disable "msie6";

server {
    listen 80;
    server_name www.mwcxs.top;
    root XXXX;
    set $node_port 8361;

    index index.js index.html index.htm;
    if ( -f $request_filename/index.html ){
        rewrite (.*) $1/index.html break;
    }
    if ( !-f $request_filename ){
        rewrite (.*) /index.js;
    }
    location = /index.js {
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        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_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:$node_port$request_uri;
        proxy_redirect off;
    }

    location = /production.js {
        deny all;
    }

    location = /testing.js {
        deny all;
    }

    location ~ /static/ {
        etag         on;
        expires      max;
    }
}   
}      

記住一定不要用記事本編輯conf檔案,推薦使用notepad++,因為本人就是使用記事本在伺服器上修改,導緻了服務進行意外停止,啟動不了服務。報錯如下圖所示:

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

1、超級無敵大錯特錯不能容忍的操作習慣-用記事本修改配置檔案引起的1067錯誤

由于這種原因修改.conf為字尾的配置檔案産生的1067錯誤是毀滅性的,隻要你用記事本編輯儲存了配置檔案,不管你怎麼嘗試都無法啟動,用其它軟體再次編輯儲存也無效,直到你拿原始檔案覆寫為止。

推薦用源代碼編輯利器Notepad6.3.3簡體中文綠色版編輯配置檔案

參考:http://www.upupw.net/bug/n61.html

問題才得以解決。先在本地使用notepad++修改配置項,再ftp上傳到伺服器。

 四、将項目檔案上傳到伺服器指定的地方

通過ftp上到伺服器指定地方

正常情況下:

在伺服器上推薦使用 pm2 來管理 Node.js 服務,來保證系統正常運作。

編輯并儲存根目錄下的pm2.json 

{
  "apps": [{
    "name": "liblog",
    "script": "www/production.js",
    "cwd": "C:/Work/liblog",
    "max_memory_restart": "1G",
    "autorestart": true,
    "node_args": [],
    "args": [],
    "instances": "max",
    "exec_mode": "cluster",
    "env": {

    }
  }]
}      

注意:注意:cwd為項目在伺服器上的路徑

然後正常是啟動服務使用

pm2 start pm2.json      

在Linux上,可以輕松的使用forever或者pm2來部署nodejs應用。但是在windows下就麻煩了,pm2明确的說支援Linux & MacOS,forever在windows下貌似問題多多:

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

為什麼要使用pm2,而不是像本地環境一樣,直接使用npm start。

因為伺服器是windows的,是以很麻煩的。

今天先說下比較簡單的nssm。nssm會監控你安裝的node服務,如果node挂了,nssm會自動重新開機它。

nssm安裝使用

目前最新版的是2.23(下載下傳位址),下載下傳之後解壓,根據你的系統選擇32位和64位的版本,直接在

nssm.exe

 所在目錄運作指令行,輸入

nssw install

 +你的服務名,例如:

nssm install NodeJSBlog      
windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

Path

 中選擇你安裝的node.exe,

Startup directory

 選擇你的node應用的目錄,

Argument

 輸入你的啟動檔案,例如在我桌面上運作

index.js

 (在Startup directory目錄執行

node index.js

 ):

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

如果你啟動的是 npm start ,就是 node www/development.js

 點選Install Service:

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

之後運作:

nssm start NodeJSBlog      
windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

在nssm.exe所在的目錄執行

(1)解除安裝(删除)該服務

nssm remove 服務名      
windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

(2)停止該服務

一種去服務清單中,手動重新開機,暫停

一種是指令行:nssm uninstall 服務名

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法
nssm start <servicename>
nssm stop <servicename>
nssm restart <servicename>      

 服務已經啟動:

可以在伺服器的浏覽器上檢視

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

 六、但是外網通路不了

 6.1外網通路,系統報nginx 504 Gateway Time-out,Windows伺服器外網無法通路web的解決方法

才發現是自己伺服器的防火牆沒有開啟web的80 端口。

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

 (1)建立規則,選擇端口

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

(2)選擇tcp,以及特定的本地端口

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

(3)選擇允許連接配接

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

(4)使用該規則選擇全部

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

(5)名稱以及描述

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

這樣設定之後

6.2内網可以通路,外網通路不了,報伺服器502

windows server,nginx安裝,配置,運作nodeJS後端的web項目的實作,以及錯誤分析及解決方法

 其實502的錯誤是很多原因造成的,但是自己的系統也突然出現了這個問題,發現了是自己的nginx配置的日志過大,網頁檔案沒多少,最後排查得知是日志檔案占滿了空間。一般日志檔案在這個目錄:

  nginx/logs檔案夾下面

解決方案:

logs檔案夾都删掉,删不掉就不删,然後重新開機伺服器,一切正常。

PS:window服務下的nginx,參考這篇文章的:二、将Nginx設定為Windows服務

外網就可以通路nginx的配置的nodeJS背景系統。歡迎通路:http://www.mwcxs.top

如果在win伺服器上配置nodeJS服務,可以留言交流

文中有錯誤的地方希望指出,共同進步

繼續閱讀