Nginx(详解以及如何使用)

news2024/9/16 11:30:03

目录

1. 什么是Nginx?

2. 为什么使用nginx?

3. 安装nginx

3.1 安装nginx的依赖插件

3.2 下载nginx

 3.3 创建一个目录作为nginx的安装路径

 3.4 解压

 3.5 进入解压后的目录

3.6 指定nginx的安装路径

 3.7 编译和安装nginx

3.8 启动nginx

 3.9 访问nginx

 4. nginx目录结构

 5.nginx配置文件

6. nginx的核心功能

6.1 nginx反向代理功能

6.2 nginx的负载均衡

6.3 nginx动静分离

7. nginx的HA高可用的搭建

7.1 高可用的原理--keepalived

7.2 搭建ha高可用


1. 什么是Nginx?

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。

并发能力: 50,000 。

2. 为什么使用nginx?

  • Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
  • Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

3. 安装nginx

nginx可以独立安装在一台服务器--也可以和项目在同一个服务器。

3.1 安装nginx的依赖插件

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

如果yum这个命令不能用,请看这篇:Linux查看端口号命令以及yum源无法使用的解决方法-CSDN博客

3.2 下载nginx

nginx: download

 3.3 创建一个目录作为nginx的安装路径

mkdir /usr/nginx

 3.4 解压

tar -zxvf nginx-1.26.1.tar.gz

 3.5 进入解压后的目录

cd nginx-1.26.1

3.6 指定nginx的安装路径

 ./configure --prefix=/usr/nginx

 3.7 编译和安装nginx

make install

3.8 启动nginx

在sbin目录下操作或者配置环境使在任何地方都可以使用:

nginx  启动
nginx -s stop  关闭
nginx -s reload 重新加载配置文件

 3.9 访问nginx

http://nginx所在的ip:nginx的端口/

默认端口号:80 

 4. nginx目录结构

 5.nginx配置文件

 在/usr/nginx/conf/nginx.conf中。

#user  nobody; 
#工作的线程数
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    # 每个工作对象允许的连接数
    worker_connections  1024;
}


http {
    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"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
       listen 81;
       server_name localhost;
       location /{
           root static;
           index main.html;
          
       }
    }

    #gzip  on;
    server {
        listen       80; # 监听的端口号
        server_name  localhost; # 监听的主机名.域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;


        # 资源/ 
        location / {
            root   html; #根目录
            index  index.html main.html; # 资源
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

6. nginx的核心功能

6.1 nginx反向代理功能

正向代理

代理的为客户端,对于服务器不知道真实客户的信息。例如:翻墙软件。

 反向代理服务器

代理的为服务器端。对于客户来说不知道服务器的信息。例如: nginx。

 项目部署例:

 准备web项目

 准备nginx

启动web项目:

 配置nginx:

   server {
       listen 82;
       server_name localhost;
       location /{
           # 代理的服务器地址
          proxy_pass   http://192.168.111.132:8080;
       }
    }

 启动ngin:

./usr/nginx/sbin/nginx

6.2 nginx的负载均衡

负载均衡(Load Balance [4]):其意思就是把请求分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

web项目必须搭建的为集群模式。

 web服务器项目至少搭建2台以上。

运行两个web工程项目:

springboot项目:

 运行springboot项目:java -jar xxx.jar

注意: 端口号别忘记放行。

 配置nginx完成负载均衡:

 重新加载nginx配置

/usr/nginx/sbin/nginx -s reload

测试

 负载均衡的策略

默认为轮询。

权重策略: 服务器硬件配置不同时。

 ip_hash策略: 根据访问者客户的ip固定访问对应的web服务器。

 花钱买第三方策略插件。

6.3 nginx动静分离

动:动态资源(接口)

 静:静态资源 (css js image)。

分离: 之前我们把静态资源和动态资源全部放在web服务器下。 把静态资源放入nginx服务器下。动态资源web服务器下。

7. nginx的HA高可用的搭建

7.1 高可用的原理--keepalived

7.2 搭建ha高可用

俩台机器:

 安装keepalived:

yum install -y keepalived

 默认安装在/etc/keepalived下

 修改keepalived.conf配置文件:

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	# ip的地址
	smtp_ server 192.168.111.188
	smtp_connect_timeout 30
	router_id 192.168.111.188
}
# 执行脚本
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"
	interval 2  # 每2s执行一次该脚本
	weight -20  # keepalive宕机  权重-20 优先级
}

vrrp_instance VI_1 {
	state MASTER # 角色
	interface ens33 # 网卡名
	virtual_router_id 51 # id 保证主从相同
	priority 100  # 优先级 主节点大于从节点
	advert_int 1
	authentication {
		auth type PASS
		auth pass 1111
        }
	virtual_ipaddress { 
		192.168.111.50 # 虚拟ip. 使用逗号隔开
	}
	track_script {
		 chk_http_port # 追踪nginx脚本
	}
	
}

 从节点

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	# ip的地址
	smtp_ server 192.168.111.189
	smtp_connect_timeout 30
	router_id 192.168.111.189
}
# 执行脚本
vrrp_script chk_http_port {
	script "/usr/local/src/nginx_check.sh"
	interval 2  # 每2s执行一次该脚本
	weight -20  # keepalive宕机  权重-20 优先级
}

vrrp_instance VI_1 {
	state BACKUP # 角色
	interface ens33 # 网卡名
	virtual_router_id 51 # id 保证主从相同
	priority 90  # 优先级 主节点大于从节点
	advert_int 1
	authentication {
		auth type PASS
		auth pass 1111
        }
	virtual_ipaddress { 
		192.168.111.50 # 虚拟ip. 使用逗号隔开
	}
	track_script {
		 chk_http_port # 追踪nginx脚本
	}
	
}

 nginx_check.sh

#!/bin/bash
# 检查是否开启nginx---统计nginx进程的个数
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
        pkill -9 keepalived
fi
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      /app/nginx/sbin/nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              pkill keepalived                    
      fi
fi

修改权限: chmod 777 nginx_check.sh

启动:

nginx         
keepalived    systemctl start|stop keepalived

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1937615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python PDF Magic:合并和拆分随心所欲

大家好!小编今天要为大家带来一篇关于Python操作PDF的秘籍——无论是要将PDF合并成一份整体,还是将一个庞大的PDF文件拆分成多个小伙伴,都轻松hold住!你准备好了吗?让我们开始这场奇妙的PDF操作之旅吧! 准…

Kubernetes 1.24 版弃用 Dockershim 后如何迁移到 containerd 和 CRI-O

在本系列的上一篇文章中,我们讨论了什么是 CRI 和 OCI,Docker、containerd、CRI-O 之间的区别以及它们的架构等。最近,我们得知 Docker 即将从 kubernetes 中弃用!(查看 kubernetes 官方的这篇文章)那么让我…

springboot实现接口请求日志自动生成(日志自动埋点)

文章目录 1.作用:2.原理:3.代码:一.config层二. mq层 :三.service层: 4.效果图5.声明 1.作用: springboot接口请求日志自动生成,实现接口日志自动埋点生成 1.统一日志生成格式;—方便查看 2.汇…

day2 数组

977.有序数组的平方 有负数。暴力快排:先对每个元素平方 o(n),再快排o(nlogn)(先分区 o(n),再递归排序 递归深度 logn) class Solution:def sortedSquares(self, nums: List[int]) -> List…

控制欲过强的Linux小进程

控制欲强?视奸?普通人那才叫视奸,您是皇帝,天下大事无一逃过您的耳目,您想看什么就看什么,臣怀疑他在朋友圈私养兵士,囤积枪甲,蓄意谋反,图谋皇位啊! 哈哈哈哈开个玩笑&…

C++ 类和对象 构造函数(下)

一 初始化列表: 1.1 构造函数体赋值: 在C中,构造函数用于创建对象并赋予其初始值。通常,我们可以在构造函数体内对成员变量进行赋值: class Date { public:Date(int year, int month, int day) {_year year;_mont…

常见的数据分析用例 —— 信用卡交易欺诈检测

文章目录 引言数据集分析1. 读入数据并快速浏览2.计算欺诈交易占数据集中交易总数的百分比3. 类别不平衡对模型的影响3.1 总体思路(1)数据的划分(2)训练模型(3)测试模型(4)解决不平衡…

知迪科技发布了全新软件产品

近日,知迪科技发布了全新软件产品——Vehicle Bus Tool-Trace Version免费版。该软件产品能高效的离线分析汽车总线数据,并拥有一大亮点功能:Ethernet通信离线文件基于ARXML文件的信号级解析,具体操作如下: 1、新建一…

git修改提交姓名

git config --global user.name “新用户名” git config --global user.email “新邮箱地址” 修改提交的用户名 git config --global user.name “yu***”

java转义文本中的HTML字符为安全的字

java转义文本中的HTML字符为安全的字 &#xff0c;以下字符被转义&#xff1a;替换为 (&apos; doesnt work in HTML4) " 替换为 &quot; & 替换为 &amp; < 替换为 < > 替换为 >1.先添加hutool依赖到pom <dependency><groupId>cn…

Docker安装笔记

1. Mac安装Docker 1.1 Docker安装包下载 1.1.1 阿里云 对于10.10.3以下的用户 推荐使用 对于10.10.3以上的用户 推荐使用 1.1.2 官网下载 系统和芯片选择适合自己的安装包 1.2 镜像加速 【推荐】阿里镜像 登陆后&#xff0c;左侧菜单选中镜像加速器就可以看到你的专属地…

阿尔泰科技利用485模块搭建自动灌溉系统实现远程控制

自动灌溉系统又叫土壤墒情监控系统&#xff0c;土壤墒情监控系统主要实现固定站无人值守情况下的土壤墒情数据的自动采集和无线传输&#xff0c;数据在监控中心自动接收入库&#xff1b;可以实现24小时连续在线监控并将监控数据通过有线、无线等传输方式实时传输到监控中心生成…

怎样在 PostgreSQL 中实现数据的异地备份?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中实现数据的异地备份&#xff1f;一、异地备份的重要性二、PostgreSQL 中的备份方…

Docker的安装【虚拟机】

Docker的安装【虚拟机】 准备环节【可跳过】 # 进入yum.repos.d目录&#xff0c;保留base.repo 和 CentOs-Base.repo&#xff0c;其余删除 cd /etc/yum.repos.d/ ----------------------------------------------------- # 现将base.repo 和 CentOs-Base.repo 存放至bak包中 …

SQL执行流程、SQL执行计划、SQL优化

select查询语句 select查询语句中join连接是如何工作的&#xff1f; 1、INNER JOIN 返回两个表中的匹配行。 2、LEFT JOIN 返回左表中的所有记录以及右表中的匹配记录。 3、RIGHT JOIN 返回右表中的所有记录以及左表中的匹配记录。 4、FULL OUTER JOIN 返回左侧或右侧表中有匹…

深度洞察市场需求,Vatee万腾平台定制化解决方案引领潮流

在当今这个日新月异的商业环境中&#xff0c;深刻理解并精准把握市场需求&#xff0c;已成为企业生存与发展的核心要义。Vatee万腾平台&#xff0c;作为行业内的佼佼者&#xff0c;凭借其卓越的定制化解决方案能力&#xff0c;正引领着市场潮流&#xff0c;为企业客户量身打造数…

【BUG】已解决:AttributeError: ‘DataFrame‘ object has no attribute ‘append‘

已解决&#xff1a;AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 目录 已解决&#xff1a;AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 【常见模块错误】 错误原因&#xff1a; 解决办法&#xff1a; 欢迎来到英杰社区https:/…

Linux—KVM虚拟化中(虚拟机克隆,快照,还原,删除)等应用实例

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…

【数据结构初阶】顺序表三道经典算法题(详解+图例)

Hello&#xff01;很高兴又见到你了~~~ 看看今天要学点什么来充实大脑吧—— 目录 1、移除元素 【思路图解】 【总结】 2、删除有序数组中的重复项 【思路图解】 【总结】 3、合并两个有序数组 【思路图解】 【总结】 至此结束&#xff0c;Show Time&#xff01; 1、…

加拿大上市药品查询-加拿大药品数据库

在加拿大&#xff0c;药品的安全性、有效性和质量是受到严格监管的。根据《食品药品法案》的规定&#xff0c;所有药品制造商必须提供充分的科学证据&#xff0c;证明其产品的安全性和有效性。为此&#xff0c;加拿大卫生部建立了一个全面的药品数据库 &#xff08;DPD) &#…