Nginx

Nginx

下载和安装

Nginx是一款轻量级的Web/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少并发能力强

直接安装Nginx

yum -y install nginx

第一步: Nginx是C语言开发的所以需要先安装依赖

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

第二步: 下载Nginx安装包并解压到/usr/local目录下

# 安装wget程序
yum install wget
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/

第三步: 执行nginx解压目录中的./configure --prefix=/usr/local/nginx命令在安装前检查环境,然后将其安装到/usr/local/nginx目录

cd /usr/local/nginx-1.24.0/
# 创建建安装路径文件夹
mkdir /usr/local/nginx
# 安装前检查工作
./configure --prefix=/usr/local/nginx
# 编译并安装
make && make install

第四步: 开发80端口

# 开放指定端口,--add-port=8080/tcp表示放行8080端口的tcp访问,--permanent表示永久生效
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重新载入防火墙规则使其生效
firewall-cmd --reload	
# 查看开放的端口
firewall-cmd --zone=public --list-ports

Nginx目录结构

Nginx的目录结构

├── conf            <-- Nginx配置目录
│   ├── fastcgi.conf
│   ├── fastcgi.conf.default
│   ├── fastcgi_params
│   ├── fastcgi_params.default
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── mime.types.default
│   ├── nginx.conf  <-- nginx配置文件(经常操作)
│   ├── nginx.conf.default
│   ├── scgi_params
│   ├── scgi_params.default
│   ├── uwsgi_params
│   ├── uwsgi_params.default
│   └── win-utf
├── html            <-- 存放静态文件(html、css、Js等),后期部署项目需要将静态文件放在这
│   ├── 50x.html        
│   └── index.html  <-- nginx提供的默认的页面
├── logs            <-- nginx的日志目录存放日志文件(服务启动后会生成访问日志和进程文件)
└── sbin                        
	└── nginx       <-- 二进制文件,用于启动、停止Nginx服务

Nginx命令

Nginx的命令需要在sbin目录下才能执行,可以将Nginx的二进制文件配置到环境变量中这样就可以在任何目录下都能执行

# 编辑配置文件并使其生效: v im /etc/profile和source /etc/profile
ecport PATH=$JAVA_HOME/bin:$PATH
PATH=/usr/local/nginx/sbin:$JAVA_HOME/bin:$PATH
命令 功能
./nginx -v 查看nginx的版本
./nginx -t 检查配置文件正确性(如果有错误会报错,而且也会记日志)
./nginx 启动nginx,启动服务后浏览器输入本机的ip地址就可以访问Nginx的默认页面(需要设置防火墙对80端口放行)
./nginx -s stop 停止nginx
./nginx -s reload 当修改Nginx配置文件后,需要重新加载才能生效
# 查看nginx的版本
[root@localhost sbin]./nginx -v
nginx version: nginx/1.22.1
# 检查配置文件正确性
[root@localhost sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# 启动nginx服务(master与worker进程)
[root@localhost sbin]./nginx 
[root@localhost sbin]ps -ef | grep nginx
root      89623      1  0 22:08 ?        00:00:00 nginx: master process ./nginx
nobody    89624  89623  0 22:08 ?        00:00:00 nginx: worker process
root      89921   1696  0 22:08 pts/0    00:00:00 grep --color=auto nginx
# 停止Nginx服务
[root@localhost sbin]./nginx -s stop
[root@localhost sbin]ps -ef | grep nginx
root      93772   1696  0 22:11 pts/0    00:00:00 grep --color=auto nginx

Nginx配置文件

Nginx配置文件(conf/nginx.conf)整体分为三部分

  • 全局块: Nginx运行相关的全局配置
  • events块: 网络连接相关的配置
  • http块: 代理、缓存、日志记录、虚拟主机配置,又分为http全局块和Server块(可以配置多个)
  • Server块: 分为Server全局块和location块(可以配置多个)
worker_processes  1;                              <-- 全局块(events块之前的配置都是全局块)
  
events {                                          <-- events块
    worker_connections  1024;  
}  
  
http {                                            <-- http块
    include       mime.types;                     <-- http全局块(server块之前的配置都是全局块)
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
  
    server {                                      <-- Server块
        listen       80;                          <-- Server全局块(location块之外 的配置都是全局块)
        server_name  localhost;  
        location / {                              <-- location块
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Nginx特点

跨平台:Nginx可以在大多数操作系统中运行,而且也有Windows的移植版本

配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置

非阻塞、高并发:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2-3万并发连接数(这得益于Nginx使用了最新的epoll模型)

事件驱动:通信机制采用epoll模式,支持更大的并发连接数

内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)

成本低廉:Nginx作为开源软件,可以免费试用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币

内置健康检查功能:如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问。

节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。

稳定性高:用于反向代理,宕机的概率微乎其微。

Nginx具体应用

部署静态资源

Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源

  • 静态资源: 在服务端真实存在并且能够直接展示的一些html页面、css文件、js文件、图片、视频等资源文件
  • 将静态资源部署到Nginx非常简单,只需要将静态资源文件放到到Nginx安装目录下的html目录中就可以正常访问
http {                                        
    include       mime.types;                    
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
  
    server {
        # 监听80端口
        listen       80;       
        # 服务器的IP地址(域名)
        server_name  localhost; 
        # 处理80端口的location块,用来匹配客户端请求的url
        location / {
        	# 指定静态资源的根目录
            root   html;
            # 指定默认首页(可以指定多个,中间用空格隔开,以";"结尾)
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

正向/反向代理

正向代理: 为了从原始服务器取得内容, 客户端向代理服务器发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端

  • 正向代理是给客户端设置代理服务器(客户端知道代理服务器的存在), 通过代理服务器转发请求最终访问到目标服务器
  • 正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径即通过代理访问无法访问的资源

Nginx_第1张图片

反向代理: 用户直接访问反向代理服务器就可以获得目标服务器的资源(用户不需要知道目标服务器的地址), 反向代理服务器负责将请求转发给目标服务器

  • 反向代理服务器也是位于用户与目标服务器之间,但却是给服务端设置代理服务器(用户不知道它的存在),用户以为访问的就是目标服务器
    Nginx_第2张图片

正向代理和反向代理的区别

  • 正向代理隐藏的是用户, 服务器接收的是代理服务器的请求,用户知道可以通过代理访问无法访问的资源(帮助客户端访问目标服务器)
  • 反向代理隐藏的是服务器,用户以为自己访问的是目标服务器,其实自己访问的资源是通过代理人去转发的(帮助目标服务器统一处理请求)

配置反向代理: 客户端 —> 192.168.138.100:82(访问反向代理服务器) —> 192.168.138.101:8080(将请求转发到指定web服务器)

Nginx_第3张图片

http {                                        
    include       mime.types;                    
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
    # 在http块中新增一个server块,用来将请求转发
    server {
        # 监听82端口
        listen       82;
        server_name  localhost;
        location / {
            # 反向代理配置,将请求转发到目标服务器
            proxy_pass http://http://192.168.238.132:8080; 
        }
    }
}

负载均衡

随着业务流量越来越大并且业务逻辑也越来越复杂, 单台服务器的性能及单点故障问题就凸显出来了, 因此需要多台服务器组成应用集群进行性能的水平扩展

  • 应用集群: 将同一应用部署到多台机器上组成应用集群,集群接收负载均衡器分发的请求进行业务处理并返回响应数据
  • 负载均衡器: 将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理

Nginx_第4张图片

负载均衡的规则默认是轮询算法, 第一次访问是192.168.238.132,第二次访问是101.XXX.XXX.160

名称 说明
轮询 默认方式
weight 权重方式(数值越大分发机率越高)
ip_hash 依据ip分配方式
least_conn 依据最少连接方式
url_hash 依据url分配方式
fair 依据响应时间方式

在http块中使用upstream指令定义一组服务器,新增一个server块采用负载均衡的规则将请求转发到集群中的某一台服务器

http {                                        
    include       mime.types;                    
    default_type  application/octet-stream;  
    sendfile        on;  
    keepalive_timeout  65;  
    # upstream指令可以定义一组服务器
    upstream targetServer{
        server 192.168.238.132;
        server 101.XXX.XXX.160;
        # 采用权重的方式定义一组服务器
        server 192.168.238.132 weight=10
        server 101.XXX.XXX.160 weight=5
    }
    server {
        listen       82;
        server_name  localhost;

        location / {
            # 使用定义好的targetServer
            proxy_pass http://targetServe
        }
    }
}

你可能感兴趣的:(Nginx,nginx,服务器,linux)