Nginx服务器

发布时间 2023-12-27 21:26:25作者: yanggdgg

一、简介

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
  • Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  • Nginx 处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。tomcat并发数理论500,实际300左右。
  • Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

二、Nginx反向代理

正向代理是代理客户端,帮助客户端发送请求到目标服务器,服务器响应后,代理服务器再把响应内容返回给客户端。

1. 正向代理(Forward Proxy)

  • 作用: 正向代理位于客户端和目标服务器之间,代表客户端发出请求并将请求转发到互联网上的其他服务器。

  • 典型场景: 用户通过正向代理访问互联网,正向代理服务器代表用户发送请求并获取响应。例如,科学?上网工具就是典型的正向代理使用场景,用户通过代理服务器访问被墙的网站。

  • 工作方式:

    • 用户向代理服务器发送请求。
    • 代理服务器将请求转发到目标服务器。
    • 目标服务器将响应发送给代理服务器。
    • 代理服务器再将响应返回给用户。

2. 反向代理(Reverse Proxy)

  • 作用: 反向代理位于目标服务器和客户端之间,代表目标服务器处理客户端的请求并将请求转发到内部服务器。

  • 典型场景: 当有多个服务器提供服务时,反向代理将客户端的请求转发到这些服务器中的一个或多个,并将获取的响应返回给客户端。例如,负载均衡就是反向代理的一种应用,将流量分发到多个服务器以提高性能和可靠性。

  • 工作方式:

    • 客户端发送请求到反向代理服务器。
    • 反向代理服务器根据配置的规则将请求转发到内部服务器。
    • 内部服务器处理请求并将响应发送给反向代理服务器。
    • 反向代理服务器再将响应返回给客户端。

总结比较:

  • 正向代理隐藏了客户端,客户端不直接访问目标服务器,而是通过代理服务器进行访问;而反向代理隐藏了服务器端,客户端感知不到真实的服务器,请求被转发到后端服务器。

  • 正向代理位于客户端和目标服务器之间;反向代理位于目标服务器和客户端之间。

  • 正向代理典型用例是访问互联网资源,反向代理典型用例是负载均衡和提供安全保护。

三、Nginx负载均衡 (Load Balancing)

1. 简介

负载均衡是通过分发网络或应用程序流量到多个服务器上,以确保这些服务器能够共同完成工作,防止单个服务器成为瓶颈。

Nginx 提供了多种负载均衡算法,例如轮询(Round Robin)、IP哈希(IP Hash)、最小连接数(Least Connections)等。

2. 实现

修改Nginx的配置文件 nginx.conf

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

在上述配置中,请求会被分发到 backend1.example.combackend2.example.combackend3.example.com 这三个后端服务器中的一个,实现了基本的负载均衡。

3. 负载均衡的几种配置

3.1 轮询(默认)

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

3.2 weight

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

    upstream backend {
        server backend1.example.com weight=10;
        server backend2.example.com weight=1;
        server backend3.example.com weight=20;
    }

3.3 IP Hash

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

    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

3.4 fair(第三方)

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

    upstream backend {
        fair;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

四、Nginx动静分离(Static and Dynamic Content Separation)

1. 简介

动静分离是将动态生成的内容和静态内容分别存放在不同的服务器或路径上,以提高网站性能。

通常,动态内容(例如由后端应用程序生成的页面)由应用服务器处理,而静态内容(例如图片、样式表、JavaScript 文件等)由专门的静态文件服务器处理。

在Web开发中,通常来说,动态资源其实就是指那些后台资源,而静态资源就是指HTML,JavaScript,CSS,img等文件。

动静分离,说白了,就是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用服务器的请求。后台应用服务器只负责动态数据请求。

优势:分担负载,减轻web服务器的压力,适用于大负载。静态资源放置cdn,同时还可以通过配置缓存到客户浏览器中,这样极大减轻web服务器的压力。

劣势:网络环境不佳时,ajax回应很慢,导致页面出现空白,出错处理会不好看。不利于网站SEO(搜索引擎优化),增加了开发复杂度

2. 实现

location  /imgs/{
     root  /data/;
     autoindex  on;
}    

location  /page/{
     root  /page/;
     index  index.html;
}    

五、Nginx常用命令

使用nginx命令前必须保证先进入cd /usr/local/nginx/sbin 目录中,常见的nginx命令如下:

【1】查看nginx版本号

./nginx -v

【2】启动nginx

./nginx

【3】停止nginx

./nginx -s stop

【4】重新加载nginx

./nginx -s reload

-s 是 nginx 命令的一个选项,用于发送信号给正在运行的 Nginx 进程。

六、Nginx配置文件

Nginx配置文件的位置在: /安装nginx的目录/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   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
}

Nginx配置文件主要分为三部分:

①全局块:配置服务器整体运行的配置指令

如 worker_processes 1;处理并发数的配置

②events 块:影响 Nginx 服务器与用户的网络连接 

如 worker_connections 1024; 支持的最大连接数为 1024

③http 块包含两部分: http 全局块、server 块