百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Nginx入门的基本使用和配置详解

off999 2025-01-03 18:12 14 浏览 0 评论

Nginx版本:nginx-1.12.2.tar.gz

内容介绍

一、 nginx 简介

1、什么是 nginx 和可以做什么事情

Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的, 能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数,实际上能达到2~3万个并发连接数

2、正向代理

需要在客户端配置代理服务器进行指定网站访问(代理的是客户端)

3、反向代理

暴露的是代理服务器地址,隐藏了真实服务器 IP 地址(代理的是服务器端)

4、负载均衡

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

5、动静分离

二、 Nginx 的安装

1、准备工作

(1)打开虚拟机,使用远程连接工具连接 linux 操作系统

(2)到 nginx 官网下载软件: http://nginx.org/

2、开始进行 nginx 安装,在linux系统的服务器端安装

(1)安装 pcre 依赖第一种方式:

第一步 联网下载 pcre 压缩文件依赖到自己的电脑中

命令: wget
http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

第二步 连接远程服务器,把pcre 压缩文件上传到服务器中,然后解压该压缩文件

命令: tar –xvf pcre-8.37.tar.gz

第三步 进入 pcre-8.37.tar.gz解压后的目录,执行 ./configure , 执行完成后,再执行 make && make install 命令,完成pcre的安装

第四步 查看pcre是否成功安装的命令: pcre-config --version

(2)安装 pcre 依赖第二种方式:

第一步 yum -y install pcre (yum命令直接自动下载并且安装pcre)

第二步 查看pcre是否成功安装的命令: pcre-config --version

(3)安装 openssl 、 zlib 、 gcc 依赖

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

(4)安装 nginx

第一步 联网下载 nginx 压缩文件依赖到自己的电脑中

nginx 官网下载软件: http://nginx.org/

第二步 连接远程服务器,把 nginx 压缩文件上传到服务器中,然后解压该压缩文件

执行命令: tar –xvf nginx-1.12.2.tar.gz

第三步 进入 nginx-1.12.2.tar.gz 解压后的目录,执行 ./configure 来进行检查, 执行完成后,再执行 make && make install 命令,完成pcre的安装

第四步 安装完Nginx后,需要知道系统中多了哪些文件,它们都安装到了那里。可以使用下面的命令进行查看: rpm -ql nginx 其中rpm 是linux的rpm包管理工具,-q 代表询问模式,-l 代表返回列表,这样我们就可以找到nginx的所有安装位置了

第五步 安装完Nginx后,会在usr下多出来一个文件夹local/nginx/nginx/sbin,在sbin里面有一个 nginx 启动脚本,因此我们先执行命令 cd/usr/local/nginx/sbin 找到nginx这个启动脚本,然后执行命令 ./nginx 来启动nginx

第六步 执行命令: ps -ef | grep nginx 查看进程中是否有nginx,有就说明nginx启动成功

第七步 用浏览器访问nginx,在浏览器中输入:127.0.0.1 查看效果

第八步 如果没有显示上图中的内容,应该是服务端没有开放80端口,把80端口开放一下就可以了

  • 查看开放的端口号
  • firewall-cmd --list-all
  • 设置开放的端口号
  • firewall-cmd --add-service=http –permanent
  • firewall-cmd --add-port=80/tcp --permanent
  • 重启防火墙
  • firewall-cmd –reload

三、 Nginx 的常用命令和配置文件

Nginx 的常用命令

使用nginx操作命令,必须进入 nginx 目录中才可以

cd /usr/local/nginx/sbin

1、查看 nginx 版本号

./nginx -v

2、产看 nginx 的状态

ps -ef | grep nginx

3、启动 nginx

./nginx

4、停止 nginx

./nginx -s stop

4、从容停止 nginx

./nginx -s quit

4、比较野蛮的,直接杀死nginx进程

./killall nginx

4、停止 nginx

./nginx -s stop

5、重新加载 nginx

./nginx -s reload

Nginx 的配置文件

Nginx 的配置文件的位置

1、查询Nginx 的配置文件的位置,执行命令: rpm -ql nginx

  • 其中rpm 是linux的rpm包管理工具,-q 代表询问模式,-l 代表返回列表,这样我们就可以找到nginx的所有安装位置了

2、配置文件的位置:cd /usr/local/nginx/conf/nginx.conf

配置文件中的内容包含三部分内容:全局块 、 events 块 、 http 块(包含http块自身和server块)

nginx.conf文件的内容如下:

# 第一部分:全局块:配置服务器整体运行的配置指令
#运行用户,默认即是nginx,可以不进行设置
user  nginx;
#Nginx进程,一般设置为和CPU核数一样 -=> 处理并发数的配置
worker_processes  1;   
#错误日志存放目录
error_log  /var/log/nginx/error.log warn;
#进程pid存放位置
pid        /var/run/nginx.pid;

# 第二部分:events 块:影响 Nginx 服务器与用户的网络连接
events {
    worker_connections  1024; # 单个后台进程的最大并发数
}

# 第三部分:http 块:还包含两部分:http 全局块和server 块
http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;   #nginx访问日志存放位置

    sendfile        on;   #开启高效传输模式
    #tcp_nopush     on;    #减少网络报文段的数量

    keepalive_timeout  65;  #保持连接的时间,也叫超时时间

    #gzip  on;  #开启gzip压缩

    include /etc/nginx/conf.d/*.conf; #包含的子配置项位置和文件[server快]

复制代码

nginx.conf文件的内容的最后一行,有一个子文件的配置项include /etc/nginx/conf.d/*.conf;,那我们打开这个include子文件配置项看一下里边都有些什么内容,default.conf文件的内容如下:

server {
    listen       80;   #配置监听端口
    server_name  localhost;  //配置域名

    #charset koi8-r;     
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;     #服务默认启动目录
        index  index.html index.htm;    #默认访问文件
    }

    #error_page  404              /404.html;   # 配置404页面

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;   #错误状态码的显示页面,配置后需要重启
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    # ~ \.php$ 是正则表达式,匹配以.php结尾的所有文件
    #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; // deny是禁止访问
    #    allow  all; // allow是允许访问
    #}
}

复制代码

四、 Nginx 配置实例 1 反向代理

反向代理指令:proxy_pass

server{
        listen 80; // 浏览器端访问地址的端口号  
        # server_name 可以是网址域名; // 浏览器端访问的地址  
        # server_name 192.168.191.34; // 浏览器端访问的地址
        # location / {
               # proxy_pass http://123.com; // nginx 反向代理的地址,可以是域名
               # proxy_pass 192.168.23.45.8080; // nginx 反向代理的地址
        # };
        
        # ~ /edu/ 是正则表达式,区分大小写,匹配的是edu目录
        # ~* /edu/ 是正则表达式,不区分大小写,匹配的是edu目录
        # = /edu/ 是正则表达式,严格匹配,匹配的是edu目录  
        location ~ /edu/ {
             proxy_pass 192.168.23.45.8081; // nginx 反向代理的地址
        };
        
        # ~ /vod/ 是正则表达式,匹配的是vod目录
        location ~ /vod/ {
             proxy_pass 192.168.23.45.8082; // nginx 反向代理的地址
        }
}
复制代码

反向代理还有些常用的指令,我在这里给大家列出:

  • proxy_set_header : 在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息
  • proxy_connect_timeout: 配置Nginx与后端代理服务器尝试建立连接的超时时间
  • proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间
  • proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间
  • proxy_redirect : 用于修改后端服务器返回的响应头中的Location和Refresh
  • 关于proxy代理指令的详细信息: www.nginx.cn/doc/mail/ma…

五、 Nginx 配置实例 2 负载均衡

配置文件中的内容包含三部分内容:全局块 、 events 块 、 http 块(包含http块自身和server块)

实现负载均衡主要在http块和server块里面配置

  • http块的配置如下:
http {
	# ... 省略http块默认带有的配置
	upstream myserver {
            server 115.28.52.63:8080 ;
            server 115.28.52.63:8081 ;
        }	
}
复制代码
  • server块的配置如下:
aerver {
	location / {
    	... 省略location里面默认带有的配置
        proxy_pass http://myserver; //myserver是上面创建的myserver服务名
        proxy_connect_timeout 10;
    }
}
复制代码
  • Nginx 提供了几种常用的负载均衡(load balance)的分配方式(策略)

1、轮询(默认)

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

2、 weight

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

upstream server_pool {
  server 192.168.5.21 weight=10; // weight 代表权,重默认为 1,权重越高被分配的客户端越多
  server 192.168.5.22 weight=10; 
}
复制代码

3、 ip_hash

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

upstream server_pool {
  ip_hash;
  server 192.168.5.21:80;
  server 192.168.5.22:80;
}
复制代码

4、 fair(第三方)

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

upstream server_pool {
  server 192.168.5.21:80;
  server 192.168.5.22:80;
  fair;
}
复制代码

六、 Nginx 配置实例 3 动静分离

1、什么是动静分离?

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯地把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面, Tomcat 处理动态页面

动静分离从目前实现角度来讲大致分为两种:

  • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案
  • 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开

2、动静分离具体配置

  • 在 liunx 系统中准备静态资源,用于进行访问,在nginx里面,新建一个文件夹data
  • 配置文件中的内容包含三部分内容:全局块 、 events 块 、 http 块(包含http块自身和server块)

在 nginx 配置文件中server块中进行配置,server块的配置如下:

aerver {
	server 80;
    server_name 192.168.17.129;
    
    #chartset koi8-r;
    #access_log log/host.access.log main;
    
    # 通过nginx实现静态资源跳转
    location /www/ {
    	# /data/是静态资源目录
        root /data/; 
        index index.html index.htm;
    }
    
    # 通过nginx实现静态资源跳转
    location /image/ {
        # /data/是静态资源目录
    	root /data/;
        # autoindex on是列出访问目录,可以不加
        autoindex on;
    }
}
复制代码

七、 Nginx 的高可用集群

1、什么是 nginx 高可用?

服务器的主nginx挂掉了,但是我们依然可以成功的请求到数据

(1)需要两台带有 nginx 的服务器

(2)需要 keepalived 软件;类似于路由,里面通过脚本来检查当前的 主服务器的nginx(主nginx) 是否还活着,如果活着就用,如果宕机死了,就去使用 从服务器的nginx(备份的nginx),在这个过程中,该软件会向外提供一个虚拟IP,这个IP实际是不存在的,但是我们需要用这个虚拟IP去访问

(3)需要虚拟 ip

2、配置高可用的准备工作

(1)需要两台服务器 192.168.17.129 和 192.168.17.131

(2)在两台服务器安装 nginx 软件

在上面有说明如何安装nginx

(3)在两台服务器安装 keepalived 软件

1) 为了方便,可以直接使用 yum 命令进行安装

yum install keepalived –y

安装的版本是 keepalived.x86_64 0:1.3.5-8.el7_6.5

2)查看是否安装成功:rpm -q -a keepalived

3)安装之后,在 etc 目录里面生成目录 keepalived,目录 keepalived里面有文件 keepalived.conf

3、完成高可用配置(主从配置,2个服务器都要配置)

(1)主要是修改/etc/keepalived/keepalivec.conf 配置文件

# 全局定义
global_defs {
  notification_email {
  acassen@firewall.loc
  failover@firewall.loc
  sysadmin@firewall.loc
  }
  notification_email_from Alexandre.Cassen@firewall.loc
  smtp_server 192.168.17.129
  smtp_connect_timeout 30
  router_id LVS_DEVEL # 服务器的主机的名字,可以访问到主机
  # /etc/hosts 文件中,添加主机名字 例如:127.0.0.1 LVS_DEVEL
}

# 检测脚本(查看nginx是否还活着)和权重参数
vrrp_script chk_http_port {
  script "/usr/local/src/nginx_check.sh" # 这个是自己创建的脚本文件位置
  interval 2 # 检测脚本执行的间隔,2秒执行一次
  weight 2 # 权重
}

# 虚拟IP的配置,常用的配置
vrrp_instance VI_1 {
  state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
  interface ens33 //服务器网卡名称 使用ifconfig命令来查看
  virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
  priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
  advert_int 1 # 心跳检测,确认主服务器是否还活着,检测间隔为1秒
  authentication {
    auth_type PASS # 权限校验的方式:密码
    auth_pass 1111 # 权限校验的密码:1111
  }
  virtual_ipaddress {
  	192.168.17.50 // VRRP H 虚拟地址
  }
}

复制代码

(2)在/usr/local/src 添加检测脚本文件nginx_check.sh

/usr/local/nginx/sbin/nginx 是nginx的启动路径

3)把两台服务器上 nginx 和 keepalived 启动

启动 nginx: ./nginx

启动 keepalived: systemctl start keepalived.service

4、最终测试

1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50

2)把主服务器(192.168.17.129) nginx 和 keepalived 停止,再输入 192.168.17.50查看效果

八、Nginx 的原理的简单分析

1、 Nginx 的原理

是通过 mater 和 worker 来实现的

2、 worker 如何进行工作的?

默认只有一个master,多个worker,有请求过来后,首先master会收到,然后由mster告知worker有新的请求过来了,这时候woker通过争抢机制,来得到这个新的请求,从来进行相应的处理

3、一个 master 和多个 woker 有好处

(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作

(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断

4、设置多少个 woker 合适

worker 数和服务器的 cpu 数相等是最为适宜的

5、连接数 worker_connection

(1)第一个:发送请求,占用了 woker 的几个连接数?

答案: 2 或者 4 个

解析:nginx配置的动静分离,请求静态资源占用2个连接数,请求动态资源,因为要通过tomcat找数据库的数据,所以占用4个连接数

(2)第二个: nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?

普通的静态访问最大并发数是: worker_connections * worker_processes /2

普通的静态访问最大并发数是: 每个woker 支持最大的连接数 * woker个数 /2

而如果是 HTTP 作 为反向代理来说,最大并发数量是 worker_connections * worker_processes/4

而如果是 HTTP 作 为反向代理来说,最大并发数量是: 每个woker 支持最大的连接数 * woker个数 /4

原文链接:
https://juejin.cn/post/6933106590446944264

相关推荐

Python四种常用的高阶函数,你会用了吗

每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试码同学抖音号:小码哥聊软件测试1、什么是高阶函数把函数作为参数传入,这样的函数称为高阶函数例如:...

Python之函数进阶-函数加强(上)(python函数的作用增强代码的可读性)

一.递归函数递归是一种编程技术,其中函数调用自身以解决问题。递归函数需要有一个或多个终止条件,以防止无限递归。递归可以用于解决许多问题,例如排序、搜索、解析语法等。递归的优点是代码简洁、易于理解,并...

数据分析-一元线性回归分析Python

前面几篇介绍了数据的相关性分析,通过相关性分析可以看出变量之间的相关性程度。如果我们已经发现变量之间存在明显的相关性了,接下来就可以通过回归分析,计算出具体的相关值,然后可以用于对其他数据的预测。本篇...

python基础函数(python函数总结)

Python函数是代码复用的核心工具,掌握基础函数的使用是编程的关键。以下是Python函数的系统总结,包含内置函数和自定义函数的详细用法,以及实际应用场景。一、Python内置函数(...

python进阶100集(9)int数据类型深入分析

一、基本概念int数据类型基本上来说这里指的都是整形,下一届我们会讲解整形和浮点型的转化,以及精度问题!a=100b=a这里a是变量名,100就是int数据对象,b指向的是a指向的对象,...

Python学不会来打我(73)python常用的高阶函数汇总

python最常用的高阶函数有counter(),sorted(),map(),reduce(),filter()。很多高阶函数都是将一个基础函数作为第一个参数,将另外一个容器集合作为第二个参数,然...

python中有哪些内置函数可用于编写数值表达式?

在Python中,用于编写数值表达式的内置函数很多,它们可以帮助你处理数学运算、类型转换、数值判断等。以下是常用的内置函数(不需要导入模块)按类别归类说明:一、基础数值处理函数函数作用示例ab...

如何在Python中获取数字的绝对值?

Python有两种获取数字绝对值的方法:内置abs()函数返回绝对值。math.fabs()函数还返回浮点绝对值。abs()函数获取绝对值内置abs()函数返回绝对值,要使用该函数,只需直接调用:a...

【Python大语言模型系列】使用dify云版本开发一个智能客服机器人

这是我的第359篇原创文章。一、引言上篇文章我们介绍了如何使用dify云版本开发一个简单的工作流:【Python大语言模型系列】一文教你使用dify云版本开发一个AI工作流(完整教程)这篇文章我们将引...

Python3.11版本使用thriftpy2的问题

Python3.11于2022年10月24日发布,但目前thriftpy2在Python3.11版本下无法安装,如果有使用thriftpy2的童鞋,建议晚点再升级到最新版本。...

uwsgi的python2+3多版本共存(python多版本兼容)

一、第一种方式(virtualenv)1、首先,机器需要有python2和python3的可执行环境。确保pip和pip3命令可用。原理就是在哪个环境下安装uwsgi。uwsgi启动的时候,就用的哪个...

解释一下Python脚本中版本号声明的作用

在Python脚本中声明版本号(如__version__变量)是一种常见的元数据管理实践,在IronPython的兼容性验证机制中具有重要作用。以下是版本号声明的核心作用及实现原理:一、版本号...

除了版本号声明,还有哪些元数据可以用于Python脚本的兼容性管理

在Python脚本的兼容性管理中,除了版本号声明外,还有多种元数据可以用于增强脚本与宿主环境的交互和验证。以下是一些关键的元数据类型及其应用场景:一、环境依赖声明1.Python版本要求pyth...

今年回家没票了?不,我有高科技抢票

零基础使用抢票开源软件Py12306一年一度的抢票季就要到了,今天给大家科普一下一款软件的使用方法。软件目前是开源的,禁止用于商用。首先需要在电脑上安装python3.7,首先从官网下载对应的安装包,...

生猛!春运抢票神器成GitHub热榜第一,过年回家全靠它了

作者:车栗子发自:凹非寺量子位报道春节抢票正在如火如荼的进行,过年回家那肯定需要抢票,每年的抢票大战,都是一场硬战,没有一个好工具,怎么能上战场死锁呢。今天小编推荐一个Python抢票工具,送到...

取消回复欢迎 发表评论: