前后端代碼部署:nginx配置

先確定安裝了nginx, 通過nginx -v查看版本

一、目標(biāo)

要實現(xiàn)的效果是:一個服務(wù)器下有兩個網(wǎng)站(個人博客和博客后臺管理系統(tǒng))和一個nodejs服務(wù)(就是后臺——提供接口服務(wù)),

二、知識點

2.1 反向代理

反向代理:普通的代理設(shè)備是內(nèi)網(wǎng)用戶通過代理設(shè)備出外網(wǎng)進(jìn)行訪問(如:vpn),而工作在這種模式下的負(fù)載均衡設(shè)備,則是外網(wǎng)用戶通過代理設(shè)備訪問內(nèi)網(wǎng)(用戶通過瀏覽器上網(wǎng)),因此稱之為反向代理。

三、思路

3.1 網(wǎng)站的訪問

兩個網(wǎng)站其實都是靜態(tài)資源,它們是存放在服務(wù)器上,然后通過相應(yīng)的地址可以訪問到

主要的問題在于: 我們通過地址怎么可以訪問到服務(wù)器上的文件夾。

兩種實現(xiàn)思路

  1. 使用nginx作為反向代理服務(wù)器來處理從瀏覽器接收到的請求(nginx處理靜態(tài)資源)
  2. 使用nodejs來響應(yīng)從瀏覽器接收到的請求(nodejs處理靜態(tài)資源)

nginx簡單點理解:它是一個web服務(wù)器,凡是通過域名或ip地址訪問服務(wù)器,先要經(jīng)過nginx進(jìn)行處理,然后由它來轉(zhuǎn)發(fā)請求到各個不同的端口或其他服務(wù)器上?;谶@個特性,它可以作為反向代理、負(fù)載均衡器以及Http緩存(這里沒有涉及緩存),nginx是完全由配置文件控制,也就是可以直接通過配置文件來操作它

3.1.1 思路一:nginx作為反向代理服務(wù)器處理靜態(tài)資源

分為兩步:

  1. 準(zhǔn)備好對應(yīng)的資源
  2. 配置nginx
第一步:準(zhǔn)備好資源

在服務(wù)器的/www/blog/目錄下創(chuàng)建index.html文件,里面就是普通的html內(nèi)容

第二步:配置nginx

打開/etc/nginx/conf.d/文件夾,創(chuàng)建配置文件smallmage.conf,內(nèi)容如下:

server {
    listen 80;  // 表示http協(xié)議的端口
    server_name smallmage.com;  // 域名地址
    location / {  // 定位
            root   /www/blog;  // 根目錄
            index  index.php index.html index.htm;  // index定義的是首頁
        }
}

上面的配置文件意思是:當(dāng)訪問http://smallmage.com這個域名地址時(http協(xié)議的默認(rèn)端口是80),就到服務(wù)器的/www/blog路徑下去取文件,默認(rèn)首頁是:index.php、index.html、index.htm,假如/www/blog文件夾下有index.phpindex.html文件,則優(yōu)先返回index.php文件,也就是有優(yōu)先級的。如果沒有開啟目錄瀏覽權(quán)限,又找不到這些默認(rèn)首頁,就會報403錯誤。

nginx怎么找到/etc/nginx/conf.d/smallmage.conf這個文件呢?
該文件是在/etc/nginx/nginx.conf中會被引入,如果不確定nginx的配置文件路徑,可以通過sudo nginx -t來查看nginx的狀態(tài),從里面可以獲取到nginx的配置文件路徑,如下所示:

nginx -t命令

nginx.conf里面可以查找到引入的所有配置nginx的配置文件信息,如下:
nginx.conf配置文件

注意

  • 要想通過smallmage.com來訪問服務(wù)器,需要將smallmage.com這個域名解析到我們的服務(wù)器ip地址上,才可以通過smallmage.com來訪問
  • 更改了nginx相關(guān)的配置后,需要重啟nginx,nginx命令如下:
    sudo nginx -t: 查看nginx狀態(tài)
    sudo nginx -s reload:重啟服務(wù)器

上面便設(shè)置了nginx作為反向代理服務(wù)器處理靜態(tài)資源

3.1.2 思路二:使用nodejs來處理靜態(tài)資源

其實就是在服務(wù)器上啟動一個nodejs服務(wù),然后通過ip地址+端口來訪問資源,由node來響應(yīng)請求,不需要配置nginx;

分為兩步:

  • 編寫使用nodejs接口的js文件
  • 使用node來啟動該文件
第一步:編寫使用nodejs接口的js文件

/www/test/目錄下創(chuàng)建test.js文件,內(nèi)容如下;

const http = require('http')
http.createServer(function(req,res) {
res.writeHead(200,{'Content-Type':'text/plain'})
res.end('hello world')
}).listen(8082)  // 監(jiān)聽8082端口

console.log('server test')
第二步:使用node來啟動該文件

使用node test.js來執(zhí)行該文件,當(dāng)然也可以使用pm2

假設(shè)該服務(wù)器的ip為: 123.45.67.9,那么就可以通過123.45.67.9:8082來訪問,可以在瀏覽器上看到hello world

3.2 nodejs服務(wù)(提供接口服務(wù))

接口服務(wù):就是指前端調(diào)用后端的api接口

常說的前端和后端,這里的nodejs服務(wù)(接口服務(wù))其實就是后端,也就是說我們的后端使用的是nodejs來實現(xiàn)的。
其實就是將上兩個例子結(jié)合起來,也就是:在服務(wù)器啟動一個nodejs服務(wù),然后使用nginx來作為反向代理以及負(fù)載均衡處理;

一般如果使用nodejs作為后端,會選擇一個框架進(jìn)行開發(fā),常用框架有:express、Koa

主要分為兩大步來實現(xiàn)該nodejs服務(wù):

  • 編寫后端(nodejs)代碼
  • 配置nginx
    • 使用nginx作為反向代理
    • 使用nginx處理負(fù)載均衡

3.2.1 編寫后端代碼

跟上面的使用nodejs來處理靜態(tài)資源是一樣的, 只不過是更復(fù)雜一些,需要對各個接口進(jìn)行處理,假如是一個商品接口,就需要有:goods/get、goods/add、goods/delete、goods/update等接口,這是代碼層面的;

因為我們的網(wǎng)站肯定是在服務(wù)器開機(jī)的時候一直運行的,否則我們的網(wǎng)站將無法訪問,因此需要使用一些部署工具來處理nodejs服務(wù),例如在node服務(wù)掛掉的時候可以重啟、在服務(wù)器重啟后,node服務(wù)也需要自動重啟,常用的部署工具有:pm2

3.2.2 配置nginx

前端訪問接口時,肯定不會使用ip地址來訪問,因此使用nginx來做反向代理。
nginx配置如下:

upstream server {
  server 127.0.0.1:8083;
}

server {
    listen 80;
    server_name www.smallmage.com;

    location /api {
      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;

      # value for proxy_pass has to match upstream name
      proxy_pass http://server;
      proxy_redirect off;
    }
}

上面配置的意思就是:當(dāng)訪問www.smallmage.com/api時就將請求丟給proxy_pass設(shè)置的服務(wù),也就是127.0.0.1:8083,假如我們的node服務(wù)就監(jiān)聽著8083端口,那么node服務(wù)就會接收到該請求,然后再對該請求進(jìn)行處理,最后返回相應(yīng)的數(shù)據(jù)

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容