Linux系统

  • 一. Nginx介绍
  • 二. Nginx作用
  • 1. 反向代理
  • 2. 正向代理
  • 3. vue部署
  • 三. Nginx部署
  • 1. nginx本地安装
  • 1.1 下载
  • 1.2 启动nginx
  • 2. nginx的配置文件
  • 3. 反向代理
  • 3.1 图片代理
  • 3.2 域名代理
  • 4. 负载均衡
  • 4.1 轮询策略
  • 4.2 权重策略
  • 4.3 负载均衡策略--IPHASH
  • 5. nginx配置文件其他关键字说明
  • 5.1 关闭服务器_down属性
  • 5.2 标识备用机_backup属性
  • 5.3 设定最大的失败次数和失败的超时时间


一. Nginx介绍

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。
其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

特点:
	1.占用内存少   tomcat服务器启动200M     Nginx服务器启动时 2M
	2.并发能力强   tomcat并发能力150-200左右    Nginx并发能力 3-5万/秒
	3.Nginx主要的功能做反向代理
	4.Nginx可以作为负载均衡服务器使用

nginx 安装 做软链接_nginx 安装 做软链接

二. Nginx作用

1. 反向代理

视频: 4.7a.2h30min

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定
反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

1. 反向代理服务器是介于用户和服务器之间的
2. 用户直接访问代理服务器,以为代理服务器就是真实的服务器.
3. 用户不清楚真实的服务器到底是谁.
4. 反向代理是服务器端代理.保护了真实的服务器信息.
5. 反向代理主要的作用 访问服务器获得服务器数据的.

nginx 安装 做软链接_Nginx_02

2. 正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器
为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

1.正向代理服务器介于用户和目标服务器之间
2.用户非常清楚的知道服务器网址是谁.
3.服务器端不清楚真实的用户是谁.
4.正向代理一般都是客户端代理.保护了用户的信息.
5.正向代理一般都是为了获取网络资源.例如路由器

nginx 安装 做软链接_服务器_03

3. vue部署

nginx 安装 做软链接_nginx_04


nginx 安装 做软链接_服务器_05

server {
		listen       80;
		server_name  zldalm;
        location / {
            root   project/alm;
            index  index.html index.htm;
			try_files $uri $uri/ /index.html;
        }
	}

nginx 安装 做软链接_服务器_06

三. Nginx部署

1. nginx本地安装

1.1 下载

官方网址

nginx 安装 做软链接_nginx 安装 做软链接_07


下载windows版本

nginx 安装 做软链接_nginx_08

1.2 启动nginx

创建快捷指令bat文件,代码如下:
脚本1:

@echo off
rem 提供Windows下nginx的启动,重启,关闭功能
 
echo ==================begin========================
 
cls 
::ngxin 所在的盘符
set NGINX_PATH=D:
 
::nginx 所在目录
set NGINX_DIR=D:\nginx-1.23.1\
color 0a 
TITLE Nginx 管理程序增强版
 
CLS 
 
echo. 
echo. ** Nginx 管理程序  *** 
echo. *** create 2017-09-22 *** 
echo. 
 
:MENU 
 
echo. ***** nginx 进程list ****** 
::tasklist|findstr /i "nginx.exe"
tasklist /fi "imagename eq nginx.exe"
 
echo. 
 
    if ERRORLEVEL 1 (
        echo nginx.exe不存在
    ) else (
        echo nginx.exe存在
    )
 
echo. 
::*************************************************************************************************************
echo. 
	echo.  [1] 启动Nginx  
	echo.  [2] 关闭Nginx  
	echo.  [3] 重启Nginx 
	echo.  [4] 刷新控制台  
	echo.  [5] 重新加载Nginx配置文件
	echo.  [6] 检查测试nginx配置文件
	echo.  [7] 查看nginx version
	echo.  [0] 退 出 
echo. 
 
echo.请输入选择的序号:
set /p ID=
	IF "%id%"=="1" GOTO start 
	IF "%id%"=="2" GOTO stop 
	IF "%id%"=="3" GOTO restart 
	IF "%id%"=="4" GOTO MENU
	IF "%id%"=="5" GOTO reloadConf 
	IF "%id%"=="6" GOTO checkConf 
	IF "%id%"=="7" GOTO showVersion 
	IF "%id%"=="0" EXIT
PAUSE 
 
::*************************************************************************************************************
::启动
:start 
	call :startNginx
	GOTO MENU
 
::停止
:stop 
	call :shutdownNginx
	GOTO MENU
 
::重启
:restart 
	call :shutdownNginx
	call :startNginx
	GOTO MENU
 
::检查测试配置文件
:checkConf 
	call :checkConfNginx
	GOTO MENU
 
::重新加载Nginx配置文件
:reloadConf 
    call :checkConfNginx
	call :reloadConfNginx
	GOTO MENU
	
::显示nginx版本
:showVersion 
    call :showVersionNginx
	GOTO MENU	
	
	
::*************************************************************************************
::底层
::*************************************************************************************
:shutdownNginx
	echo. 
	echo.关闭Nginx...... 
	taskkill /F /IM nginx.exe > nul
	echo.OK,关闭所有nginx 进程
	goto :eof
 
:startNginx
	echo. 
	echo.启动Nginx...... 
	IF NOT EXIST "%NGINX_DIR%nginx.exe" (
        echo "%NGINX_DIR%nginx.exe"不存在
        goto :eof
     )
 
	%NGINX_PATH% 
	cd "%NGINX_DIR%" 
 
	IF EXIST "%NGINX_DIR%nginx.exe" (
		echo "start '' nginx.exe"
		start "" nginx.exe
	)
	echo.OK
	goto :eof
	
 
:checkConfNginx
	echo. 
	echo.检查测试 nginx 配置文件...... 
	IF NOT EXIST "%NGINX_DIR%nginx.exe" (
        echo "%NGINX_DIR%nginx.exe"不存在
        goto :eof
     )
 
	%NGINX_PATH% 
	cd "%NGINX_DIR%" 
	nginx -t -c conf/nginx.conf
 
	goto :eof
	
::重新加载 nginx 配置文件
:reloadConfNginx
	echo. 
	echo.重新加载 nginx 配置文件...... 
	IF NOT EXIST "%NGINX_DIR%nginx.exe" (
        echo "%NGINX_DIR%nginx.exe"不存在
        goto :eof
     )
 
	%NGINX_PATH% 
	cd "%NGINX_DIR%" 
	nginx -s reload
 
	goto :eof
	
::显示nginx版本
:showVersionNginx
	echo. 
	%NGINX_PATH% 
	cd "%NGINX_DIR%" 
	nginx -V
 	goto :eof

脚本2:

@echo off
rem @author zhaohy
chcp 65001
 --- nginx安装目录----
set NGINX_DIR=D:\nginx-1.21.1\
 
:INFO
  echo.
  echo --------------------- 进程列表 ---------------------
  tasklist|findstr /i "nginx.exe"
  if errorlevel 1 echo nginx未启动
  echo --------------------- 进程列表 ---------------------
 
  echo.
  echo. 1. 启动Nginx
  echo. 2. 关闭Nginx
  echo. 3. 重启Nginx
  echo. 4. 退出
  echo.
  echo 请输入功能序号:
  set /p id=
    if "%id%"=="1" goto START
    if "%id%"=="2" goto STOP
    if "%id%"=="3" goto RESTART
    if "%id%"=="4" exit
  pause
 
:START 
  if exist "%NGINX_DIR%nginx.exe" (
    cd /d %NGINX_DIR%
    start "" nginx.exe
    echo 启动成功
  ) else (
    echo "%NGINX_DIR%nginx.exe不存在"
  )
  goto INFO
 
:STOP
  taskkill /F /IM nginx.exe > nul
  echo 已关闭所有nginx进程
  goto INFO
 
:RESTART
  taskkill /F /IM nginx.exe > nul
  if exist "%NGINX_DIR%nginx.exe" (
    cd /d %NGINX_DIR%
    start "" nginx.exe
  ) else (
    echo "%NGINX_DIR%nginx.exe不存在"
  )
  echo 已重启
  goto INFO
 
goto :eof

测试 访问: localhost

nginx 安装 做软链接_nginx_09


cmd常用命令:

进入nginx目录
1).启动命令      start   nginx
2).重启命令      nginx    -s   reload
3).关闭命令      nginx    -s   stop

2. nginx的配置文件

nginx 安装 做软链接_nginx 安装 做软链接_10


在http{}协议内添加

#服务器设置 改
   #server 代表反向代理的具体服务信息
   server {
   		#监听端口号
       listen       80;
       # 监听的服务名称,即监听浏览器访问 localhost:80
       server_name  localhost;
       
			#反向代理的配置,获取用户指定的请求之后,将请求转向到什么位置
			# / 请求访问的根目录
       location / {
       		# root关键字 指定反向代理文件目录
           root   html;
           # index关键字 指定默认跳转页面
           index  index.html index.htm;
       }
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
   }

这里的root html指的是nginx-1.21.1目录下的html文件夹

nginx 安装 做软链接_服务器_11


index index.html index.htm; 和 error_page 500 502 503 504 /50x.html; 指的是nginx-1.21.1\html目录下的index.html

nginx 安装 做软链接_Nginx_12

3. 反向代理

3.1 图片代理

需求: 客户端访问D:\images目录下的profile-img.jpg文件,而客户端只知道文件名profile-img.jpg和网址,

即客户端访问http:///profile-img.jpg时,展示图片!!!

nginx 安装 做软链接_Nginx_13


在http{}协议内添加

# 配置图片服务器代理
	server{
		# 监听:80,即当客户端访问  网址端口号为 80 上传图片,nginx将图片保存到 D:\images;
		listen		80;
		server_name  ;
		
		location / {	
		 # 配置图片服务器代理
         root   D:\images;
         #root /usr/local/src/image; # linux环境下图片保存路径
     }
	}

测试

nginx 安装 做软链接_服务器_14

3.2 域名代理

nginx 安装 做软链接_nginx 安装 做软链接_15

http://192.168.126.1:8091配置反向代理,即当访问www.hy.com时跳转到登录页面

# 域名代理
server{
	# 客户端信息
	listen		80;
	server_name  www.hy.com;
	
	location / {	
		# 服务端信息
        proxy_pass   http://192.168.126.1:8091;
    }
}

修改host文件

nginx 安装 做软链接_Nginx_16


测试

nginx 安装 做软链接_Nginx_17

4. 负载均衡

host文件

nginx 安装 做软链接_服务器_18


为了方便测试,创建查询端口号访问

测试添加端口号显示MsgController

package com.pearadmin.business.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 客户端查询系统配置
 */
@RestController
public class MsgController {
    @Value("${server.port}")
    private int port;

    @RequestMapping("/getPort")
    public String getMsg() {
        return "当前服务器端口号:" + port;
    }
}

nginx 安装 做软链接_nginx_19


准备工作: 创建三个端口号不同,其他相同的项目jar包。8090,9091,9092发布

nginx 安装 做软链接_nginx_20

4.1 轮询策略

不推荐,测试推荐

server {
		listen		80;
		server_name  www.hy.com;
		
		location / {	
			proxy_pass   http://hyShip;
     	}
}

#配置域名的代理之--配置多台Tomcat服务器  轮询策略
upstream hyShip {
		ip_hash;	# 登录问题等==>让用户与服务器进行绑定,缺点是使用ip_hash指令无法保证后端服务器的负载均衡==>redis做中间件												
		server 127.0.0.1:8090 ;		# weight设置并发量	max_fails最大失败次数	fail_timeout失败超时时间
		server 127.0.0.1:8091 ;
		server 127.0.0.1:8092 ;
}

4.2 权重策略

server {
		listen		80;
		server_name  www.hy.com;
		
		location / {	
			proxy_pass   http://hyShip;
     	}
}

#配置域名的代理之--配置多台Tomcat服务器  轮询策略 权重5:3:2
upstream hyShip {
		ip_hash;	# 让用户与服务器进行绑定,缺点是使用ip_hash指令无法保证后端服务器的负载均衡==>redis做中间件												
		server 127.0.0.1:8090 weight=5;		# weight设置并发量	max_fails最大失败次数	fail_timeout失败超时时间
		server 127.0.0.1:8091 weight=3;
		server 127.0.0.1:8092 weight=2;
}

4.3 负载均衡策略–IPHASH

nginx 安装 做软链接_服务器_21


nginx 安装 做软链接_nginx 安装 做软链接_22


使用环境及缺点

nginx 安装 做软链接_nginx_23


优化负载均衡策略_SSO策略

单点登录_后续

5. nginx配置文件其他关键字说明

5.1 关闭服务器_down属性

关闭服务器
案例:关闭8090服务器

upstream hyShip {
		ip_hash;	# 让用户与服务器进行绑定,缺点是使用ip_hash指令无法保证后端服务器的负载均衡==>redis做中间件												
		server 127.0.0.1:8090 weight=5 down;		# weight设置并发量	max_fails最大失败次数	fail_timeout失败超时时间
		server 127.0.0.1:8091 weight=3;
		server 127.0.0.1:8092 weight=2;
}

5.2 标识备用机_backup属性

说明:该属性用来标识备用机,正常的情况下,用户不会访问备用机,除非当前服务器遇忙/当前服务器宕机.才有可能访问备用机.
案例: 设置8094为备用机

upstream hyShip {
		ip_hash;	# 让用户与服务器进行绑定,缺点是使用ip_hash指令无法保证后端服务器的负载均衡==>redis做中间件												
		server 127.0.0.1:8090 weight=5 down;		# weight设置并发量	max_fails最大失败次数	fail_timeout失败超时时间
		server 127.0.0.1:8091 weight=3;
		server 127.0.0.1:8092 weight=2;
		server 127.0.0.1:8094 weight=2 backup;
}

5.3 设定最大的失败次数和失败的超时时间

max_fails:设定最大的失败次数。
fail_timeout:设置失败的超时时间。
高可用(HA)说明: 当服务器发生故障时,无需人为的干预,可以自动化的实现故障的迁移.
说明: 如果发现服务器宕机如果由人工来完成 效率较低. 可以通过程序自动完成.

upstream hyShip {
		ip_hash;	# 让用户与服务器进行绑定,缺点是使用ip_hash指令无法保证后端服务器的负载均衡==>redis做中间件												
		server 127.0.0.1:8090 weight=5 down;		# weight设置并发量	max_fails最大失败次数	fail_timeout失败超时时间
		server 127.0.0.1:8091 weight=3 max_fails=1 fail_timeout=60s;
		server 127.0.0.1:8092 weight=2 max_fails=1 fail_timeout=60s;
		server 127.0.0.1:8094 weight=2 backup;
}