Skip to content
On this page

简介

Nginx是高性能Http和反向代理服务器。 Nginx是一个静态的Http服务器,那么就可以处理Http请求,能够对静态资源进行处理,但是不能对动态请求做出处理,因此可以支持的并发是非常高的。 因此利用这一特性,可以利用反向代理实现负载均衡。

  • 将静态资源交给Nginx处理
  • 动态资源,nginx就利用反向代理、负载均衡来访问真实的服务器

安装

接下来的是在Windows下的安装:

  1. 点击下面的链接,选择稳定版下载

nginx: download

  1. 下载完成后,解压,解压后的目录结构

image.png

启动

点击nginx.exe启动 或者在命令行下,在此目录下,利用命令启动

shell
nginx

# 或者
start nginx

浏览器访问http://localhost:80,看到如下页面,代表启动成功 image.png

关闭

关闭掉命令行窗口后,Nginx不会关闭,而是继续在后台运行。 命令行,进入Nginx的根目录,就是有nginx.exe的那一层目录。 执行命令

shell
# 正常关闭
nginx -s quit

# 强制退出
nginx -s stop

再次访问http://localhost:80image.png 关闭Nginx成功

静态资源部署

_nginx_每次启动时,都会加载conf/nginx.conf配置文件,这个配置文件中定义着nginx服务器相关的配置。

打开Nginx根目录下conf/nginx.conf, image.png 所以,了解了Nginx代理静态资源的原理后。 我们将前端打包后的静态资源,例如html、css、js等文件,可以直接扔在nginx根目录下的html中,并修改**nginx.conf**中资源的首页文件 也可以直接在nginx根目录下,将我们打包后的文件扔在根目录,并修改nginx.conf中资源目录和首页文件。 例如: 我将打包后的文件夹,直接扔在nginx根目录 image.png 修改配置文件nginx.confimage.png 重启Nginx,访问即可

Nginx常用命令

shell
# 启动nginx
nginx
# 或
start nginx

# 关闭nginx
# 正常退出
nginx -s quit

# 强制推出
nginx -s stop

# 在运行的状态下
# 重启nginx
# 重新加载配置文件
nginx -s reload

多虚拟主机

虚拟主机的意思就是在我们的nginx中部署多个项目,看起来就好像有了多台服务器一样。 在_conf/nginx.conf_配置文件中,是这样的

nginx
worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;

    server {
        listen       80;	# 端口
        server_name  localhost;		# 域名或ip

        location / {
            root   dist;		# 默认资源的目录
            index  index.html index.htm;	# 默认访问资源名称
        }
 
        error_page   500 502 503 504  /50x.html;		# 错误页面
        location = /50x.html {
            root   html;
        }

    }

}

端口绑定

http节点下,一个server就是一个应用,因此我们可以通过配置多个server来达到配置多虚拟主机的目的image.png

域名绑定

通过不同域名的方式来达到虚拟主机的目的。 image.png

反向代理

首先要知道什么是正向代理正向代理的目标是客户端,帮助客户端来访问服务器

来看反向代理反向代理的目标是互联网,用户只需要访问nginx,具体访问的是哪个服务器,用户不知道,多目标服务器

如何通过Nginx来实现代理? 在Nginx的conf/nginx.conf配置文件中,修改 image.png 源文件

nginx
worker_processes  1;

events {
    worker_connections  1024;
}


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

    sendfile        on;

	# 配置代理
	upstream shop-server{
		server 127.0.0.1:8080;
	}

    server {
        listen       80;	# 端口
        server_name  127.0.0.1;		# 域名或ip

        location / {
			# proxy_pass 使用代理
			proxy_pass http://shop-server;
            index  index.html index.htm;	# 默认访问资源名称
        }
 
        error_page   500 502 503 504  /50x.html;		# 错误页面
        location = /50x.html {
            root   html;
        }

    }

}

这样,反向代理就配置好了,当我们访问nginx时,nginx帮我们去寻找配置好的真实的服务器,服务器响应数据给Nginx,Nginx将数据再响应给客户端,客户端全程是无感的,只与Nginx进行交互。 当被代理的服务器只有一台时,看起来与正向代理差不多。

负载均衡

负载均衡是反向代理的真正目的。 当Tomcat服务器只有一台时,肯定扛不住很高的请求,所以此时可以搭建Tomcat集群,然后利用Nginx来做负载均衡。 我们将Tomcat服务器的地址配置到Nginx中,客户端请求nginx,nginx在所有的Tomcat中挑选一台进行访问,然后将响应结果返回给客户端。 如何在Nginx中配置负载均衡? 刚才配置了反向代理,那么负载均衡就是我们多配几台Tomcat。 image.png

负载均衡策略

轮询(默认)

轮着来,挨个挨个分配,Nginx的默认策略。

nginx
upstream myserver {
        server 192.168.156.156:8080 ;
        server 192.168.156.163:8080 ;
				server 127.0.0.1:80; 
    }
    server {
        listen       80;
        server_name  208.208.128.122;
        location / {
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

权重分配

给某个服务或全部服务配置了权重后,就开了权重策略。 权重越大,被访问的概率越大,只需要在配置文件中,通过weight属性来配置即可。

nginx
upstream myserver {
        server 192.168.156.156:8080 weight=10;   #  在这儿
        server 192.168.156.163:8080 weight=5;
				server 127.0.0.1:80; # 默认的权重是1
    }
    server {
        listen       80;
        server_name  208.208.128.122;
        location / {
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

服务器之间被访问的概率就是权重之比。 此时各个服务器之间被访问的概率就是10:5:1

ip_hash

通过检查客户端的ip,计算得到一个结果,根据这个结果选择要访问的服务器 这样能保证,一个客户端,最终交互的服务器是同一个

nginx
upstream myserver {
				ip_hash; # 设置策略
        server 192.168.156.156:8080 ; 
        server 192.168.156.163:8080 ;
				server 127.0.0.1:80; 
    }
    server {
        listen       80;
        server_name  208.208.128.122;
        location / {
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

本网站基于VitePress构建   仅用于学习途径