Nginx学习(1/2)

目录

第 1 章 Nginx 简介与应用场景

1.1什么是Nginx?  

1.2Nginx的应用场景

1.2.1Nginx 作为 web 服务器

1.2.2反向代理

 你可能会问那正向代理该是个什么样子??????????

1.2.3负载均衡

1.2.4动静分离 

第 2 章 Nginx (Linux)安装

1、准备工作

2、开始进行 nginx 安装

3.在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为(linux默认开启)防火墙问题(两种解决方式)

第 3 章 nginx 常用的命令和配置文件

3.1 nginx 常用的命令:

3.2 nginx.conf 配置文件(最重要)

概述 (Nginx配置文件详解 - 程序员自由之路 - 博客园)

全局块

events块

http块

http.server块

http.listen指令

 http.server_name指令

location块#

第 4 章 nginx 配置实例-反向代理 

第 5 章 nginx 配置实例-负载均衡

具体配置

流程

nginx 分配服务器的策略

第 6 章 nginx 配置实例-动静分离

概述

原理图


第 1 章 Nginx 简介与应用场景


1.1什么是Nginx?  

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强(Nginx是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存)。事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等.

1.2Nginx的应用场景

1.2.1Nginx 作为 web 服务器

Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。

1.2.2反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。(来自百度)

 你可能会问那正向代理该是个什么样子??????????

正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。当使用正向代理的时候,需要在客户端设置代理服务器

正向代理代理的客户端 反向代理代理的服务端

终于有人把正向代理和反向代理解释的明明白白了! - 云+社区 - 腾讯云

1.2.3负载均衡

   客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服 务器处理完毕后,再将结果返回给客户端。 这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易 造成服务器直接崩溃。

    很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

    我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量 是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能 够满足需求的。那么怎么办呢? 上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题 的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的

服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们 所说的负载均衡

1.2.4动静分离 

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

第 2 章 Nginx (Linux)安装

1、准备工作

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

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

2、开始进行 nginx 安装

安装nginx首先安装几个依赖

(1)安装 pcre 依赖 第一步 联网下载 pcre 压缩文件依赖 /usr/src目录下

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

第二步 解压压缩文件 使用命令 tar –zxvf pcre-8.37.tar.gz

第三步 进入该目录中 执行./configure 命令,完成后回到 pcre 目录下执行 make,最后执行 make install

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

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

(3)安装 nginx * 使用命令解压 * ./configure * make && make install 进入目录 /usr/local/nginx/sbin/nginx 启动服务

3.在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为(linux默认开启)防火墙问题(两种解决方式)

(1)关闭防火墙

(2)开放访问的端口号,80 端口                 

                查看开放的端口号 firewall-cmd --list-all

                设置开放的端口号 firewall-cmd --add-service=http –permanent         

                                               firewall-cmd --add-port=80/tcp --permanent

                重启防火墙 firewall-cmd –reload

第 3 章 nginx 常用的命令和配置文件

3.1 nginx 常用的命令:

进入 nginx 目录中 cd /usr/local/nginx/sbin(可以配置全局变量)

1、查看 nginx 版本号 ./nginx -v

2、启动 nginx ./nginx

3、停止 nginx ./nginx -s stop

4、重新加载 nginx ./nginx -s reload(更改了配置文件后要重新加载)

3.2 nginx.conf 配置文件(最重要)

概述 (Nginx配置文件详解 - 程序员自由之路 - 博客园

Nginx的主配置文件是nginx.conf(位置/usr/local/nginx/conf/nginx.conf nginx ),这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server全局块和多个location块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。

配置文件支持大量可配置的指令,绝大多数指令不是特定属于某一个块的。同一个指令放在不同层级的块中,其作用域也不同,一般情况下,高一级块中的指令可以作用于自身所在的块和此块包含的所有低层级块。如果某个指令在两个不同层级的块中同时出现,则采用“就近原则”,即以较低层级块中的配置为准。比如,某指令同时出现在http全局块中和server块中,并且配置不同,则应该以server块中的配置为准。

全局块

全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。

通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。

处理并发数的配置 据官方说法,一般开一个就够了

nginx的worker_processes优化 - 云+社区 - 腾讯云

events块

events块涉及的指令主要影响Nginx服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。

这一部分的指令对Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。

http块

http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块中。

前面已经提到,http块中可以包含自己的全局块,也可以包含server块,server块中又可以进一步包含location块。

http.server块

server块和“虚拟主机”的概念有密切联系。

虚拟主机,又称虚拟服务器、主机空间或是网页空间,它是一种技术。该技术是为了节省互联网服务器硬件成本而出现的。这里的“主机”或“空间”是由实体的服务器延伸而来,硬件系统可以基于服务器群,或者单个服务器等。虚拟主机技术主要应用于HTTP、FTP及EMAIL等多项服务,将一台服务器的某项或者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。从用户角度来看,一台虚拟主机和一台独立的硬件主机是完全一样的。

在使用Nginx服务器提供Web服务时,利用虚拟主机的技术就可以避免为每一个要运行的网站提供单独的Nginx服务器,也无需为每个网站对应运行一组Nginx进程。虚拟主机技术使得Nginx服务器可以在同一台服务器上只运行一组Nginx进程,就可以运行多个网站。

在前面提到过,每一个http块都可以包含多个server块,而每个server块就相当于一台虚拟主机,它内部可有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务(或网站)。

和http块相同,server块也可以包含自己的全局块,同时可以包含多个location块。在server全局块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

http.listen指令

server块中最重要的指令就是listen指令,这个指令有三种配置语法。这个指令默认的配置值是:listen *:80 | *:8000;只能在server块种配置这个指令。

 

 http.server_name指令

用于配置虚拟主机的名称,对于name 来说,可以只有一个名称,也可以由多个名称并列,之间用空格隔开。例如 server_name server.com www.server.com...第一个作为虚拟主机的主要名称。

在name 中可以使用通配符“*”,但通配符只能用在由三段字符串组成的名称的首段或尾段,或者由两段字符串组成的名称的尾段

location块#

每个server块中可以包含多个location块。在整个Nginx配置文档中起着重要的作用,而且Nginx服务器在许多功能上的灵活性往往在location指令的配置中体现出来。

location块的主要作用是,基于Nginx服务器接收到的请求字符串(例如, server_name/uri-string),对除虚拟主机名称(也可以是IP别名,后文有详细阐述)之外的字符串(前例中“/uri-string”部分)进行匹配,对特定的请求进行处理。

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。(常用)

3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。 注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识

第 4 章 nginx 配置实例-反向代理 

在nginx.conf中配置(这里的nginx,tomcat都在同一个虚拟机中)

在上述nginx.conf配置中

 listen 监听的端口号        

 server_name 本虚拟主机的名称或IP配置

location ~ /edu/ location ~ /vod/    对/edu/,/vod/ 进行反向代理

proxy_pass uri :要转发到的端口中去(当前设置的是两个tomcat服务器)

流程 :nginx监听客户端是否有发往主机名为192.168.***.***端口号为9001的请求,如果存在,将于location中进行uri的匹配,匹配成功,那么nginx将会前往对应的服务中去(即8080或8081中)在此过程中暴露的只有代理服务器的ip,将目标服务器的IP隐藏了起来。(即反向代理代理的是服务端)

第 5 章 nginx 配置实例-负载均衡

 在nginx.conf中配置

具体配置

(1)先找到nginx的配置文件

cd /usr/local/nginx/conf/
vi nginx.conf

(2)找到 http 块,添加:

upstream + 服务名 ,里面是负载均衡的ip+端口。

(3)修改server块

将server_name后面改为ip地址,proxy_pass后面改为服务名。

(4)重启nginx

cd /usr/local/nginx/conf/sbin
./nginx -s reload

流程

同样的nginx监听发往192.169.**.** :80的请求,接收到请求之后,通过proxy_pass后的服务名,找到upstream +服务名中的负载均衡的ip+端口,选择服务器进行处理。

nginx 分配服务器的策略

nginx upstream的五种分配方式 - caonw - 博客园

1、轮询(weight=1)

默认选项,当weight不指定时,各服务器weight相同,
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
如果后端服务器down掉,能自动剔除。
比如以下配置,则1.11服务器的访问量为1.10服务器的两倍。

upstream myserver{
    server 192.168.168.129:8080 weight=5;
    server 192.168.168.129:8081 weight=10;
}

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。
如果后端服务器down掉,要手工down掉。

upstream myserver{
    ip_hash;
    server 192.168.168.129:8080;
    server 192.168.168.129:8081;
}

4、fair(第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream myserver{
    server 192.168.168.129:8080;
    server 192.168.168.129:8081;
    fair;
}

5、url_hash(第三方插件)(不是很了解)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。
在upstream中加入hash语句,hash_method是使用的hash算法。

upstream resinserver{
server 192.168.1.10:8080;
server 192.168.1.11:8080;
hash $request_uri;
hash_method crc32;
}

第 6 章 nginx 配置实例-动静分离

概述

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

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

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

     通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使 浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件, 不建议使用 Expires 来缓存),如果设置 3d,表示在这 3 天之内访问这个 URL,发送 一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

原理图

 

 root

这个指令用于设置请求寻找资源的根目录,此指令可以在http块、server块或者location块中配置。由于使用Nginx服务器多数情况下要配置多个location块对不同的请求分别做出处理,因此该指令通常在location块中进行设置。

autoindex on 列出文件内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]中提供的Docker Stack配置文件,可以看出nginx容器的日志目录是"/data/dtms/nginx-1.24.0/logs"。而根据引用\[2\]中提供的修改Docker配置文件的方法,可以通过修改配置文件中的目录位置来解决该问题。你可以按照以下步骤进行操作: 1. 停止Docker服务:使用命令"systemctl stop docker.service"停止Docker服务。 2. 编辑配置文件:使用命令"vim /var/lib/docker/containers/container-ID/config.v2.json"打开配置文件,将其中的"/data/dtms/nginx-1.24.0/logs"修改为正确的日志目录位置,然后保存退出。 3. 启动Docker服务:使用命令"systemctl start docker.service"重新启动Docker服务。 这样,nginx容器应该能够找到正确的日志目录并正常启动。如果问题仍然存在,请确保目录位置和权限设置正确,并检查是否有其他错误导致无法打开日志文件。 #### 引用[.reference_title] - *1* *3* [Docker基础、进阶笔记,为k8s的学习预预热](https://blog.csdn.net/qq_39304896/article/details/115005191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [docker狂神笔记](https://blog.csdn.net/sss_jjj_/article/details/111870648)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值