Nginx配置详解

Nginx基础配置

一、nginx介绍

在这里插入图片描述
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,专为性能优化而开发,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

1、nginx应用场景

HTTP服务器 nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

FTP服务器 通常会提供一个上传的功能,其他应用如果需要静态资源就从该静态服务器中获取

反向代理 以代理服务器来接受internet上的连接请求,然后将请求发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求的客户端,此时代理服务器对外就表现为一个反向代理服务器。

负载均衡 分摊到多个操作单元上进行执行,例如Web服务器,FTP服务器,企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务

2、nginx优点

高并发支持 单机能够支持50,000的并发连接(取决于内存大小)

内存消耗低 开启1个nginx进程消耗15MB,10个才150MB。在同类型web服务中,nginx比apache占用的内存资源更少

高稳定性 Nginx具有强大的错误恢复能力和自我修复能力。例如,如果某个工作进程出现问题,主进程可以平滑地重启这个进程而不会影响到其他进程或服务的正常运行。

反向代理和负载均衡 Nginx不仅可以作为Web服务器,还可以作为反向代理服务器和负载均衡器。它支持多种负载均衡策略,如轮询、IP哈希等,可以有效分配流量到后端服务器。

二、反向代理

在这里插入图片描述

1、正向代理

由于防火墙的原因,我们并不能直接访问谷歌、看GitHub等等,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。正向代理代理的是客户端,而且 客户端知道目标的,而目标是不知道客户端是通过VPN访问的。

2、反向代理

比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。(在服务器中配置代理服务器)

配置:

server {
        listen       80;
        server_name  localhost;

        location / {
            root   /root/project/RuoYi-Vue/ruoyi-ui/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://127.0.0.1:8080/;
}

三、负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

Nginx给出来三种关于负载均衡的方式:

  • 轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器。
  • 权重(加权轮询): 指定轮询几率,weight访问比率成正比,用于后端服务器性能不均的情况。
  • ip_hash: 在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
    我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

轮询配置:

    upstream myserver {
        server 192.168.100.75:8081;
        server 192.168.100.75:8082;
    }
    server {
        listen       80;
        server_name  192.168.100.75;

        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

权重配置:

    upstream myserver {
        server 192.168.100.75:8081 weight=5;
        server 192.168.100.75:8082 weight=3;
    }
    server {
        listen       80;
        server_name  192.168.100.75;

        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

ip_hash配置:

    upstream myserver {
    	ip_hash;
        server 192.168.100.75:8081 ;
        server 192.168.100.75:8082 ;
    }
    server {
        listen       80;
        server_name  192.168.100.75;

        location / {
            root   html;
            proxy_pass   http://myserver;
            index  index.html index.htm;
    }

四、动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

在这里插入图片描述

软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、 js 等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开,动态资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,以提高资源的响应速度。

配置:

    server {
        listen       80;
        server_name  192.168.100.75;

        location / {
            root   /root/project/html/;
            index  index.html index.htm;
    	}
    	
    	location /car/ {
            root   /data/;
    	}
    	
    	location /image/ {
            root   /data/;
    	}
    	
    }

五、Nginx常用命令和配置文件

目录位置:/usr/local/nginx/

cd /usr/local/nginx/sbin

常用命令

1、查询Nginx版本号

./nginx -v

2、启动Nginx

./nginx

3、关闭Nginx

./nginx -s stop
./nginx -s quit

4、重启Nginx

./nginx -s reload

5、检测配置文件语法

./nginx -t

配置文件

/usr/local/nginx/conf/nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行Nginx服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。
比如上面第一行配置的:

worker_processes  1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

events块

events {
    worker_connections  1024;
}

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

http块

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。

需要注意的是:http块也可以包括http全局块、server块。

  • http全局块

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

  • server块

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

    全局server块

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

    location块

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

posted @ 2025-06-26 18:02  叶小格  阅读(0)  评论(0)    收藏  举报  来源