1、安裝Nginx
1.1 解壓上傳安裝包
解壓# nginx-1.16.1.tar.gz
# nginx需要一些環境(全部執行,不存在的會執行,存在的會跳過)
yum install -y wget
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y openssl openssl-devel
yum install -y zlib zlib-devel

1.2 自定義安裝目錄安裝
進入解壓目錄# cd nginx-1.16.1/
指定安裝目錄# ./configure --prefix=/usr/local/kh96/nginx
編譯和安裝# make && make install
#修改組態檔
進入安裝目錄# cd /usr/local/kh96/nginx
修改 server 下的 server_name localhost#server_name 1.117.75.57;
添加環境變數# echo 'export PATH=$PATH:/usr/local/kh96/nginx/nginx/sbin' >> /etc/profile
重繪環境變數# source /etc/profile
1.3 啟動
啟動# nginx
重啟# nginx -s reload
停止# nginx -s stop
檢查組態檔(nginx.conf)是否合法# nginx -t
1.4 訪問 (保證80埠開放)
訪問服務器80埠:

如果80埠打開了但是還是訪問不到的,可以注意一下防火墻,可能是防火墻打開的但是又沒有打開80埠
# 方法一:關閉防火墻
查看防火墻狀態(是否是running)# firewall-cmd --state
關閉防火墻# systemctl stop firewalld.service
設定禁止開啟啟動防火墻# systemctl disable firewalld.service
#方法二:開放埠
放行80埠: firewall-cmd --zone=public --add-port=80/tcp --permanent
重啟防火墻# firewall-cmd --reload
2、Nginx反向代理
2.1 demo專案說明
2.1.1 后端模塊
2.1.1.1 配置
#埠
server:
port: 8080
# 專案發布路徑
servlet-path: /nginx-back
2.1.1.2 controller控制層
/**
* Created On : 7/11/2022.
* <p>
* Author : huayu
* <p>
* Description: nginx后端提供的測驗入口
*/
@Slf4j
@RestController
public class NginxBackController {
/**
* @author : huayu
* @date : 7/11/2022
* @param : []
* @return : java.util.Map<java.lang.String,java.lang.Object>
* @description : 后端查詢學生資訊串列
*/
@PostMapping("/user/userInfos")
public Map<String,Object> userInfos(HttpServletRequest request,Integer time){
int serverPort = request.getServerPort();
log.info("------ 第:{}次, 埠:{}, nginx 后端查詢學生資訊串列 ------",time,serverPort);
//定義回傳的學生串列結合
Map<String, Object> contentMap = new HashMap<>();
//模擬創建一個學生資訊集合串列
List<Map<String,Object>> userMap = new ArrayList<>();
//模擬從資料庫查詢學生資訊存入集合串列
List<String> nameList = Arrays.asList("孫悟空","豬八戒","沙和尚");
nameList.forEach(name->{
Map<String, Object> user = new HashMap<>();
user.put("name",name);
user.put("age",200);
user.put("hobby","nginx");
//保存到回傳的集合中
userMap.add(user);
});
//將查詢的學生資訊,存入到我們回傳大map集合中
contentMap.put("content",userMap);
//回傳json格式的學生資訊串列
return contentMap;
}
}
2.1.2 前端模塊
2.1.2.1 home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>人員資訊</title>
</head>
<body>
<p align="center">課工場學員資訊</p>
<div >
<table border="1" align="center" cellspacing="0">
<thead>
<tr>
<th>姓名</th>
<th>年齡</th>
<th>愛好</th>
</tr>
</thead>
<tbody id="content">
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div ></div>
</body>
<script src="https://www.cnblogs.com/xiaoqigui/p/js/jquery-1.12.2.js"></script>
<script src="https://www.cnblogs.com/xiaoqigui/p/js/home.js"></script>
<script>
</script>
</html>
2.1.2.2 home.js
$(function(){
initData();
});
function initData(){
var params={};
params.token="111";
$.ajax({
type: "POST",
url:"http://1.117.75.57:8080/nginx-back/user/userInfos",
contentType:"application/json;charset=UTF-8",
data:JSON.stringify(params),
dataType: "json",
success: function (res) {
if("undefined" != typeof(res.content)){
var list=res.content;
if(list.length>0){
$("#content").empty();
var $html="";
for (var i = 0; i < list.length; i++) {
$html=$html+"<tr><td>"+list[i].name+"</td><td>"+list[i].age+"</td><td>"+list[i].hobby+"</td></tr>";
}
$("#content").html($html);
}
}else{
alert("無資料");
}
}
});
}
2.2 demo專案部署
2.2.1 后端模塊
2.2.1.1 上傳 并后臺啟動專案
專案打 jar 包,并上傳
后臺運行并輸出到日志檔案# nohup java -jar edocmall96-nginx-0.0.1-SNAPSHOT.jar >nginx.log 2>&1 &
2.2.1.2 添加配置
在nginx.conf的 server節點中添加 代理配置
# 代理 后端專案
location /nginx-back/ {
proxy_pass http://1.117.75.57:8080;
}
重新啟動nginx
nginx -s stop
nginx
2.2.1.1.3 測驗
2.2.1.1.3.1 直接訪問服務器上的專案


2.2.1.1.3.1 通過代理訪問服務器上的專案


2.2.2 前端模塊
2.2.2.1 上傳前端模塊
上傳nginx-front.zip 到 nginx安裝目錄的/html下
解壓# unzip nginx-front.zip
洗掉__MACOSX# rm -rf __MACOSX/
洗掉nginx-front.zip# rm -rf nginx-front.zip
2.2.2.2 添加配置
# 代理 靜態前端專案
location /nginx-front/ {
root html;
index home.html;
}
2.2.2.3 測驗 (出現跨域問題)

2.2.2.4 解決跨域問題
所謂同源(即指在同一個域)就是兩個頁面具有相同的協議(protocol),主機(host)和埠號(port)
所以我們需要保證同源
# 出現跨域問題
請求頁面靜態資源 # http://1.117.75.57/nginx-front/ (埠不寫就是80)
請求頁面資料# url:"http://1.117.75.57:8080/nginx-back/user/userInfos"
# 修改請求資料路徑
請求頁面資料# url:"/nginx-back/user/userInfos"
/#當前導航欄訪問路徑的ip+埠
或者# url:"http://1.117.75.57:80/nginx-back/user/userInfos"
# 寫的時候有些不理解,后面發現的 url的絕對路徑和相對路徑
# Ajax請求中url的絕對路徑和相對路徑
https://blog.csdn.net/qq_34198539/article/details/115526677
2.2.2.5 測驗 (解決跨域問題)

3、Nginx 負載均衡 (服務端)
3.1 輪詢
3.1.1配置
# 在http節點中配置
# 反向代理服務組
upstream nginxGrop {
server 1.117.75.57:8080;
server 1.117.75.57:8081;
server 1.117.75.57:8082;
}
# 在server節點中
# 代理 后端專案 服務組
location /nginx-back/ {
proxy_pass http://nginxGrop;
}
3.1.2 啟動專案 (后面一樣的開啟操作)
# 服務 1
nohup java -jar edocmall96-nginx-0.0.1-SNAPSHOT.jar --server.port=8080 >nginx8080.log 2>&1 &
# 服務 2
nohup java -jar edocmall96-nginx-0.0.1-SNAPSHOT.jar --server.port=8081 >nginx8081.log 2>&1 &
# 服務3
nohup java -jar edocmall96-nginx-0.0.1-SNAPSHOT.jar --server.port=8082 >nginx8082.log 2>&1 &
3.1.2 測驗
3.2.1 8080 服務

3.2.1 8081 服務

3.2.1 8082 服務

3.2 指定權重
3.2.1 配置
#反向代理服務組
upstream nginxGrop {
ip_hash;
server 1.117.75.57:8080;
server 1.117.75.57:8081;
server 1.117.75.57:8082;
}
3.2.2 測驗
3.2.1 8080 服務 weight=1

3.2.1 8081 服務 weight=10

3.2.1 8082 服務 weight=5

3.3 IP_Hash
直接添加ip_hash關鍵字即可,后續同一ip的訪問將只會請求同一個服務器,
3.3.1 配置
#反向代理服務組
upstream nginxGrop {
ip_hash;
server 1.117.75.57:8080;
server 1.117.75.57:8081;
server 1.117.75.57:8082;
}
3.3.2 測驗
3.3.2.1 第一個ip

3.3.2.2 第二個ip

一旦使用了ip_hash,當我們需要移除一臺服務器的時候,不能直接洗掉這個配置項,而是需要在這臺服務器配置后面加上關鍵字down,表示不可用;
因為如果直接移除配置項,會導致hash演算法發生更改,后續所有的請求都會發生混亂;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/531387.html
標籤:Java
