主頁 >  其他 > nginx安裝、前后端分離部署流程

nginx安裝、前后端分離部署流程

2021-08-17 09:34:39 其他

1. 筆記資料來源

筆記來源自 狂神的 nginx講說 Nginx入門 和 程式羊的 保姆級教程

2. Nginx簡介

1. 什么是Nginx?

Nginx (engine x)是一個高性能的HTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務,Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambleru站點(俄文:PaM6nep)開發的,第一個公開版本0.1.0發布于2004年10月4日,2011年6月1日,nginx 1.0.4發布,
其特點是占有記憶體少,并發能力強,事實上ngino的并發能力在同型別的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等,在全球活躍的網站中有12.18%的使用比率,大約為2220萬個網站,
Nginx是一個安裝非常的簡單、組態檔非常簡潔(還能夠支持peri語法)、Bug非常少的服務,Nginx啟動特別容易,并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動,你還能夠不間斷服務的情況下進行軟體版本的升級,
Nginx代碼完全用C語言從頭寫成,官方資料測驗表明能夠支持高達50,000個并發連接數的回應,

2. Nginx的作用

Http代理,反向代理:作為web服務器最常用的作用之一,尤其是反向代理

  1. 正向代理

正向代理

  1. 反向代理

反向代理

Nginx提供的負載均衡策略有兩種,內置策略和擴展策略,

內置策略為輪詢、加權輪詢、 ip hash 、

擴展策略是由用戶自己定義了

  1. 輪詢
    nginx輪詢

  2. 加權輪詢

加權輪詢

動靜分離,在我們的軟體開發中,有些請求是需要后臺處理的,有些請求是不需要經過后臺處理的(如: css、 html.jpg. js等等檔案),這些不需要經過后臺處理的檔案稱為靜態檔案,讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做快取操作,提高資源回應的速度,
動靜分離

3. Nginx安裝

1. Windows下安裝

  1. 下載Nginx

下載地址 最好下載穩定版本的,可以下載 nginx/Window-1.16.1,下載成功之后解壓就行了

鏈接: https://pan.baidu.com/s/1G7Qz1fy9jSSttiacpMIL_g 提取碼: x4qg

nginx安裝目錄
2. 啟動Nginx

  • 直接雙擊nginx.exe,啟動成功會一閃而過
  • 使用cmd 啟動nginx.exe

錯誤集錦

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

? 錯誤原因: 80埠被占用

? 解決辦法

  • Win + R 或者打開 cmd ,輸入 netstat -ano|findstr :80 80埠占用

  • 接著使用 tasklist | findstr 4 查詢是那個服務占用了
    tasklist

  • 如果埠號是 4,是 System行程占用 80埠的話,需要進行關閉,否則直接使用taskkill /pid 4 /f 關閉即可

  • 使用 netsh http show servicestate查看行程號
    http服務行程

  • 打開任務管理器,找到PID是4632的行程關閉掉即可,或者是關閉系統的 IIS Admin 服務

  • 再次進入安裝目錄 nginx.exe 運行nginx,沒有任何提示資訊訪問localhost:80 或者 localhost出現下邊的界面即可,因為 http默認埠是 80,所以不加也可以 nginxwelcome

2. Linux下安裝

下載地址 下載成功之后上傳到linux中

scp niginx.tar.gz root@ip:/opt

  • 查看是否安裝nginx whereis nginx,如果沒提示資訊就是沒有安裝

  • 使用 tar -zxvf nginx.tar.gz解壓

  • cd nginx 查看目錄,與window應該是一致的

  • 在此目錄下執行 ./configure

  • 執行make 以及make install

  • 查看nginx配置目錄 whereis nginx

  • 進入配置目錄 cd /usr/local/nginx/
    linux-nginx

  • 啟動nginx

    cd sbin
    #啟動nginx,啟動是沒有任何提示資訊的
    ./nginx
    # 查詢是否安裝成功
    ps -ef|grep nginx
    # 或者直接訪問機器的ip地址,查看是否能出現歡迎頁面結課
    
  • 開放埠號

    # 查看開放的埠號
    firewall-cmd --list-all
    #設定需要開放的埠號
    firewall-cmd --add-service=http --permanent
    firewall-cmd --add-port=80/tcp --permanent
    #重啟防火墻
    firewall-cmd --reload
    # 使用iptables 的方法請參考下邊的 錯誤解決辦法
    # 阿里云或者是騰訊云服務器的話直接在安全組策略添加就行了
    

錯誤集錦

執行 ./configure 報錯

Checking for C complier … not found

錯誤原因:沒有安裝C編譯器

解決辦法

  • yum -y install gcc
  • yum -y install gcc-c++
  • yum -y install openssl openssl-devel

更多錯誤解決辦法,請參考 Centos安裝Nginx錯誤集錦

3. Nginx 常用命令

# 進入 nginx目錄 
cd /usr/local/nginx/sbin/
#啟動
./nginx
#停止
./ngins -s stop
# 安全退出
./nginx -s quit
# 重新加載組態檔
./nginx -s reload
# 查看nginx行程
ps aux|grep nginx

4. Nginx配置

1. 組態檔

官方原來的組態檔


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
#################以上為nginx的全域配置################

#最大連接數
events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

2. 自定義配置

主要用到的就是一下幾個內容,修改完成之后使用 nginx -s reload 重新加載 Nginx

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
########全域配置###########
events {
	# 最大連接數
	worker_connections 1024;
}
###http配置
http{
	upstream lesscoding{
		#負載均衡配置
		server 127.0.0.1:8080 weight=1;
		server 127.0.0.1:8081 weight=1;
	}
	server{
		listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://lesscoding;
        }
		
		#匹配正則運算式的方式,請求中中帶有 test 就會轉發到這個地址,主要是PCRE的功勞
		location ~ /test/ {
            proxy_pass http://127.0.0.1:8080;
		}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	}
	server{
		# 監聽8081埠
		listen 8081;
		server_name localhost;
	}
}

3. 錯誤集錦

java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.

解決辦法: 檢查nginx.conf 中的 upstream 后邊跟的名字是否有非法字符 _

慘痛教訓:更改檔案之后一定要用 nginx -s stop關閉后重啟,或者是 nginx -s reload重繪組態檔,而不是直接關閉命令視窗,否則就會出現莫名其妙的400錯誤

5. 前后端分離配置

什么是動靜分離

Nginx 動靜分離簡單來說就是吧動態跟靜態請求分開,不能理解成只是簡單的把動態頁面和靜態頁面物理分離,嚴格來說是把動態請求和靜態請求分開,可以理解成 Nginx處理靜態頁面,Tomcat處理動態頁面,大致可以分為兩種

  • 把靜態資源放在單獨的服務器上
  • 前后端一起發布通過nginx分開

1. 前端打包

前端使用 npm run build (:prod) 打包,將生成的dist 目錄上傳到服務器

  • 修改 nginx.conf
#最上邊的 user 修改為 root,但是也有人不建議用root賬戶,看個人需求吧
user root;
# 找到 server標簽下邊的 location
location / {
	root #上傳之后的dist的路徑;
	index index.html index.htm;
}
  • 啟動nginx
# 進入nginx安裝目錄
cd /usr/local/nginx/sbin
#運行nginx
./nginx

2. 后端打包

后端使用 maven 打包成 jar包直接運行或者是達成 war 包放在tomcat容器里邊運行

打 war 包請參考 https://blog.csdn.net/qq_42059717/article/details/119718896

  • 后端打包
mvn clean package
  • 后端運行jar 包
nohup java -jar demo.jar & nohup.out

3. 修改nginx組態檔

這里不知道放什么,先放這個占著位置

  • 修改組態檔
http{
	#權重越大,訪問的幾率越大
	upstream demo {
		server 127.0.0.1:8080 weight=1;
		server 127.0.0.1:8081 weight=10;
	}
	server{
		location / {
			root /root/workspace/demo/dost;
			index index.html index.htm;
		}
		 
        location ~ /demo/ {
        	proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass http://demo/; #直接寫ip也行
		}
	}
}
  • 重啟nginx
# 進入 nginx安裝目錄
cd /usr/local/nginx/sbin
#重新加載組態檔
./nginx -s reload

4. 后端部署war包配置

  • 將 war 包放到 tomcat目錄下
#進入tomcat
cd /usr/local/tomcat/apache-tomcat
# 進入webapps目錄
cd webapps/
# 復制檔案到當前目錄
cp /root/woekspeace/demo/demo.war ./
# 或者使用mv命令進行移動
mv /root.workspace/demo/demo.war ./
  • 啟動 tomcat
service tomcat start

這樣之后必須要在埠號之后加上我們的目錄名稱才能夠訪問到我們的專案

  • 修改 tomcat組態檔
#進入tomcat的配置目錄
cd /usr/local/tomcat/apache-tomcat/conf
#編輯組態檔
vim server.xml
#輸入/Host 或者是 ?Host快速定位
?Host
#按 i 進入編輯模式 在<Host>變遷內添加下列內容
<Context path="" docBase="/usr/local/src/apache-tomcat-7.0.106/webapps/demo" debug="0" privileged="true" reloadable="true"/>
# esc 退出編輯模式保存退出
:wq!
#重啟tomcat
service tomcat stop
service tomcat start
emo/demo.war ./
  • 啟動 tomcat
service tomcat start

這樣之后必須要在埠號之后加上我們的目錄名稱才能夠訪問到我們的專案

  • 修改 tomcat組態檔
#進入tomcat的配置目錄
cd /usr/local/tomcat/apache-tomcat/conf
#編輯組態檔
vim server.xml
#輸入/Host 或者是 ?Host快速定位
?Host
#按 i 進入編輯模式 在<Host>變遷內添加下列內容
<Context path="" docBase="/usr/local/src/apache-tomcat-7.0.106/webapps/demo" debug="0" privileged="true" reloadable="true"/>
# esc 退出編輯模式保存退出
:wq!
#重啟tomcat
service tomcat stop
service tomcat start

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294326.html

標籤:其他

上一篇:rsync+inotify介紹

下一篇:【實戰】CentOS7.9配置DNS服務器

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more