随笔 - 13  文章 - 0  评论 - 2  阅读 - 3426

NG

1、常用命令

/apps/svr/nginx-1.17.5/sbin

启动:./nginx,在浏览器输入ip地址,默认80端口

./nginx -s stop

./nginx -s quit

stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。

重新载入Nginx:./nginx -s reload,当修改配置信息conf文件夹中的nginx.conf文件信息时,需要重新载入这些配置时使用此命令

./nginx -s reopen            # 重启 Nginx

2、nginx.conf主要由三部分组成

全局块

events块

http块

1、全局块

配置文件从头开始到events块之间的内容,主要设置的是影响nginx服务器整体运行的配置指令。

比如worker_process, 值越大,可以支持的并发处理量也越多,但是还是和服务器的硬件相关

1
2
3
4
5
#user  www www;
worker_processes  auto;
#worker_cpu_affinity auto;
 
worker_rlimit_nofile 65535;

2、events块

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

1
2
3
4
events {
        use epoll;
        worker_connections  65535;
}

3、HTTP块

包括http全局块,以及多个server块

3.1、HTTP全局块

http 全局块配置的指令包括文件引入、 MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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" "$request_time" "$upstream_response_time"';
 
 
access_log  logs/access.log  main;
 
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay on;
 
#keepalive_timeout  0;
keepalive_timeout  65;
 
#gzip  on;

  

 3.2、Server块

1、这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
2、每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
3、而每个 server 块也分为全局 server 块,以及可以同时包含多个 location 块。

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
      listen       80;
      server_name  localhost;
 
      #charset koi8-r;
 
      #access_log  logs/host.access.log  main;
  # 表示如果请求路径是/就是用这个location块进行处理
      location / {
          root   html;
          index  index.html index.htm;
      }
  }

  

3.2.1、Server全局块

最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置

3.2.2、location块

1、一个 server 块可以配置多个 location 块。

2、主要作用是根据请求地址路径的匹配,匹配成功进行特定的处理

3、这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

3、反向代理

3.1、正向代理与反向代理概述

3.1.1、正向代理

正向代理代理的是客户端,需要在客户端配置,我们访问的还是真实的服务器地址。

 

 

3.1.2、反向代理

反向代理代理的是服务器端,客户端不需要任何配置,客户端只需要将请求发送给反向代理服务器即可,代理服务器将请求分发给真实的服务器,获取数据后将数据转发给你。隐藏了真实服务器,有点像网关。

 

3.1.3、 区别

1、正向代理代理的是客户端,需要为每一个客户端都做一个代理服务器,客户端访问的路径是目标服务器

2、反向代理代理的是真实服务器,客户端不需要做任何的配置,访问的路径是代理服务器,由代理服务器将请求转发到真实服务器

3.2、配置

1
2
3
4
5
6
7
8
9
10
11
12
server {
#   监听端口80 即当访问服务器的端口是80时,进入这个server块处理
        listen       80;
# server_name当配置了listen时不起作用       
        server_name  localhost;
 
# location后面代表访问路径 当是/ 请求时 代理到tomcat的地址
        location / {
# 使用 proxy_pass(固定写法)后面跟要代理服务器地址           
            proxy_pass http://ip:8080;
        }
}

当访问Linux的http://192.168.80.102:80这个地址时,由于配置Nginx监听的是80端口,所以会进入这个server块进行处理,然后看你的访问路径,根据location块配置的不同路径进入对应的处理,由于配置了/请求,所以进入/的location处理,然后配置了proxy_pass,所以进行代理到指定的路径。

4、负载均衡

4.1、概述

简单来说就是使用分布式的场景,将原先的一台服务器做成一个集群,然后将请求分发到各个服务器上,原来我们都是直接访问服务器,现在我们可以使用Nginx进行反向代理,然后我们访问Nginx,由Nginx将我们的请求分发到不同的服务器上,以实现负载均衡。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 在http块中的全局块中配置
# upstream固定写法 后面的myserver可以自定义
upstream myserver{
    server ip:8081;
    server ip:8082;
}
 
# server配置
    server {
      # 监听80端口
        listen 80;  
        #location块
        location / {
# 反向代理到上面的两台服务器 写上自定义的名称
        proxy_pass http://myserver;
        }
}

4.2、访问规则

4.2.1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除

4.2.2、weight权重

weight 代表权重默认为 1,权重越高被分配的客户端越多

1
2
3
4
5
6
7
8
9
upstream myserver {
    server ip:8081 weight=1 ;
    server ip:8082 weight=2 ;
}
server { 
    listen       80
    location / {
    proxy_pass http://myserver;
}

4.2.3、ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。

当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。这样,当来自某一个IP的用户在后端Web服务器A上登录后,在访问该站点的其他URL,能保证其访问的还是后端web服务器A。

使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接收的请求少,而且设置后端服务器权重等方法将不起作用。

hash值是根据ip段的前三个来计算的,例如ip 经过nginx的hash值计算是根据ip段的192 168 1来计算的。所以如果在本地的虚拟机中来使用这种负载均衡的方式,那么ip 这三个ip访问的其实是一台tomcat。

原理:


首先通过将ip地址映射成一个hash值,然后将hash值对Tomcat的数量3取模,得到Tomcat的索引0、1、2;

比如:5%3=2,则把这个请求发送到Tomcat3服务器,以此类推;

这样一来,只要用户的IP不发生改变,当前用户的会话就能够一直保持;

 

 nginx的ip_hash算法是取ip地址的前三段数字进行hash映射,如果只有最后一段不一样,也会发送到同一个Tomcat里面

1
2
3
4
5
6
7
8
9
10
11
12
#配置负载均衡的服务器和端口
upstream myserver {
    server ip:8081;
    server ip:8082;
    ip_hash;
}
server { 
    listen       80
    location / {
    proxy_pass http://myserver;
   }
}

4.2.4、fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

1
2
3
4
5
6
7
8
9
10
11
12
#配置负载均衡的服务器和端口
upstream myserver {  
    server ip:8081;
    server ip:8082;
    fair;
}
server { 
    listen       80;  
    location / {
    proxy_pass http://myserver;
    }   
}

https://blog.csdn.net/qq_46312987/article/details/118895520

posted on   irongzone  阅读(345)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示