nginx

本文详细介绍了在Windows环境下Nginx的常用命令,包括查看版本、启动/停止服务、重新加载配置等。此外,还讲解了如何配置Nginx作为静态资源服务器,实现文件压缩、访问限速、日志记录等功能。进一步,文章探讨了Nginx的负载均衡配置,包括轮询、权重、IP_hash和最少连接策略,并提供了反向代理的配置示例。
摘要由CSDN通过智能技术生成

常用命令

记录下,在windows下nginx常用命令:

进入nginx.exe的目录中:

nginx -v    查看当前nginx版本号;

nginx -V   查看当前nginx版本号及配置参数;

start nginx   启动nginx,在windows下回有一个闪烁;

nginx -s stop   强制关闭当前nginx服务;

nginx -s reload   重新加载当前nginx服务;

taskkill /F /IM nginx.exe > null     此命令可强制关闭所有的nginx服务(有可能存在多开的nginx情况,如果有多开情况,会影响到负载均衡,有时候代码配置的都对,但是负载均衡没效果,很有可能是开了好几个nginx!!!);

nginx -t   查看nginx的配置情况;

配置静态资源服务器

一、静态文件访问:

在安装nginx文件夹下,创建一个文件夹,下边我们创建的是static文件夹,里边放一个vue打包好的项目来测试,nginx默认会自动加载以index命名的文件。

下边配置中,当我们访问 http://localhost:8989 时,nginx会执行 location 里边的配置,加载static文件夹里边的index文件,autoindex on; 配置是开启目录访问权限,可以打开目录游览,autoindex 默认情况下是off 关闭的:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    server {
        listen  8989;
        server_name localhost;
        location / {
            alias static/;
            autoindex on;
        }   
    }
}

访问localhost:8989,显示如下:

访问lcoalhost:8989/static目录,显示如下:

二、文件压缩

上边vue项目,打包之后是1M多,在页面初次加载时,如果服务器带宽不够,页面要加载好长时间,用户体验很差,nginx给我们提供了文件压缩功能,如下:

http {
    # 下边这两个必须配置,否则样式加载不出来!不设置css文件就会被当作text/plain类型发送到浏览器,从而导致css样式无法显示。
    include mime.types;
    default_type application/octet-stream;

    gzip  on; # 开启文件压缩
    gzip_min_length 1; # 如果文件小于1字节,就不在压缩了
    gzip_comp_level 2; # 压缩级别
    # 支持的压缩类型
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript text/javascript application/x-httpd-php image/jpeg image/gif image/png;
}

未开启文件压缩之前:

加上gzip之后的文件大小及加载速度提升了不少:

chrome浏览器上:

 火狐浏览器上:

三、访问限速

当文件过大的时候,我们需要限制访问速度,以备足够的带宽来加载js/css。如果想这么做,只需要加下边的指令:

set $limit_rate 1k;
http {
    include mime.types;
    default_type application/octet-stream;
    server {
        listen  8989;
        server_name localhost;
        location / {
            alias static/;
            autoindex on;
            set $limit_rate 1k; # 每秒传输1k
        }   
    }
}

加上限速,在看下效果,访问贼慢:

四、日志记录

平时开发中,经常通过日志来排查问题,当然,Nginx也提供了日志记录。首先在配置文件中的server指令块中设置指令。

默认使用 "main" 的日志格式,当然你也可以自定义格式。

参数明细表:

$remote_addr

客户端的ip地址(代理服务器,显示代理服务ip)

$remote_user

用于记录远程客户端的用户名称(一般为"-")

$time_local

用于记录访问时间和时区

$request

用于记录请求的url以及请求方法

$status

响应状态码,例如: 200成功、404页面找不到等。

$body_bytes_sent

给 客户端发送的文件主体内容字节数

$http_user_agent

用户所使用的的代理(一般为浏览器)

$http_x_forwarded_for

可以记录客户端IP,通过代理服务器来记录客户端的ip地址

$http_referer

可以记录用户是从哪个链接访问过来的

http {
    # 配置日志格式及输出的信息
    log_format  main    '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_refer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
    server {
        # 日志输出地方
        access_log  logs/qf.host.access.log  main;
        location / {
            set $limit_rate 10k;
        }   
    }
}

配置好之后,客户端访问时,会生成一个日志文件,以及输出响应的信息:

负载均衡配置

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    # 负载均衡配置
    upstream test {
        server  192.168.1.85:3000   weight=1; # 权重配置
        server  192.168.1.85:4000   weight=2;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass  http://test; # test必须跟上边upstream后的test一致
        }
    }
}

这里我使用koa创建好了服务,在本地分别启动3000端口和4000端口:

本地起了2个服务,当我们访问三次localhost时,可以看到权重高的 端口为4000的被访问了2次,而3000端口被访问了一次,证明已配置成功。

负载均衡的策略:

nginx的负载均衡策略有4种:

(1)轮询(默认)

最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器。

(2)权重

weight默认为1,weight值越高,被访问的次数越高。

注意:

适用环境:此策略适合服务器的硬件配置车别比较大的情况

upstream test {
    server    localhost:3000 weight=1;
    server    localhost:4000 weight=2; # 用户访问三次,有2次会打到4000端口
}

(3)ip_hash

负载均衡起按照IP地址的分配方式,可以确保相同客户端的请求一直会发送到相同的服务器,这样每个访客都固定访问一个后端服务器(也就是同一个ip客户端不会一会儿访问端口为3000的服务,一会儿又访问端口为4000的服务)。

注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。
upstream test {
   ip_hash;
   server  192.168.1.85:3000   weight=1;
   server  192.168.1.85:4000   weight=2;
}

(4)least_conn 最小链接

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn 这种方式就可以达到更好的负载均衡效果。

upstream test {
    least_conn;
    server  192.168.1.85:3000   weight=1;
    server  192.168.1.85:4000   weight=2;
}

注意:

  • 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。除了上面这些调度策略之后,还有一些第三方的调度策略可以集成到nginx中。在实际运用中,需要根据不同的场景选择不同的策略,大多是多种策略结合使用以达到实际需求的性能。

补充(2022-03-04):

如果别的服务直接访问接口,或第三方服务往接口推数据,这种方式做后端接口的负载均衡,如下:

upstream chr {
        server localhost:8080;
        server localhost:8085;
    }

    server {
        listen       80;
        server_name  localhost;
		charset utf-8;

		location / {
            root   D:\dist;
			try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
		
		location /prod-api/ {
			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://localhost:8080/;
		}
    }
    server {
        listen       8088;
        server_name  localhost;
		charset utf-8;

        # 负载均衡,
        # 注意:/mychr 这个路径是后端真实的接口路径,而不是代理的路径!!!
        # 访问:http://localhost:8088/mychr 时,会把域名和端口号做负载均衡的代理
        # 真实请求是:http://localhost:8080/mychr 或 http://localhost:8085/mychr
        location /mychr {
            proxy_set_header Host $host;
			proxy_pass http://chr;
		}
    }

反向代理:

有这么一个需求,我在浏览器输入www.123.com 之后, 需要访问本地开启的一个服务,地址为:192.168.141.2:3000,最后效果如下:

我们可以用nginx作反向代理,流程应该为:浏览器输入www.123.com 之后, 首先会查看本机hosts文件中是否有对应ip和域名映射,我们提前配置好hosts文件之后,浏览器会拿到 192.168.32.64 这个IP地址(也就是我本机的一个ip地址)去访问,此时这个访问 会被nginx拦截,nginx已经配置好了,当我们访问192.168.32.64 时,它会执行localtion中proxy_pass的代理地址 -> 也就是192.168.141.2:3000这个地址,所以最终会在页面上看到正确结果。

第一步:配置本机hosts文件(当我们在浏览器输入一个网址时,首先会查看本机hosts文件中是否有对应ip和域名映射,有的话会直接拿到这个ip去查找内容):

前边的192.168.32.64 是我本机的一个ip地址

第二步:配置完hosts文件之后,在nginx中,做反向代理:

worker_processes  4;
events {
    worker_connections  1024;
}
http {
    upstream local {
        server 192.168.141.2:3000;
    }
    # 反向代理
    server {
        listen  80;
        server_name 192.168.32.64;
        location / {
            proxy_pass  http://local;
        }
    }

}

配置完,即可访问成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值