Nginx 学习笔记

Nginx 学习笔记


一、Nginx 简介


1 什么是 nginx?

Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。


2 基本概念
  • 正向代理:(先理解什么是正向代理)假如我用我的手机,在浏览器直接访问国外的 www.google.com,显然无法访问,假如 vpn 是一个代理服务器,它可以访问谷歌,于是 vpn找到我说他可以帮我办事,然后 vpn 接收我的请求,替我去请求谷歌服务器,谷歌响应给 vpn 后,vpn 再将响应原封不动的返回给我,全程为我(客户端)服务。这个过程中,对于谷歌服务器,它其实不知道我访问了它,只知道是代理服务器访问了它,并且代理服务器起到服务我(客户端)的作用,这就是正向代理。

  • 1、反向代理:还是上面那个例子,我用我的手机,在浏览器直接访问国外的 www.google.com,我以为我是能直接访问的,于是正常发送请求,但是运营商(代理服务器)在监测到我的请求访问后(我是以这样代入举例,并不代表实际情况就是这样),于是他查找整个美国的google服务器,哪台空闲就转发我的请求,然后再响应给我。整个过程中,代理服务器为目标服务器服务,他不管我具体访问的是哪台目标服务器,其实我也不知道具体有多少台谷歌服务器,只要满足我的需求就行,这就是反向代理。

    在这里插入图片描述

  • 2、负载均衡:负载均衡很好理解,我们单一的服务器一般只能承受小量的访问,假如访问量变大,显然服务器响应不过来,因此先把请求集中到反向代理服务器(nginx就是),然后增加服务器数量,由代理服务器做请求分发,从而分担工作量,这就是负载均衡。

  • 3、动静分离:动、静指的是资源文件,动态资源文件有(jsp、servlet)、静态资源文件有(html、css、js),如果我们把动、静静态资源文件都放在 tomcat 服务器中,只访问动或静资源文件时,势必会对服务器带来不必要的压力。因此 nginx 可以把动态资源、静态资源分开部署。


二、Nginx linux安装


1 准备工作

启动虚拟机。


2 上官网下载安装包

nginx官网:http://nginx.org/

可以到 nginx 官网下载安装包:http://nginx.org/download/


3 安装 nginx 相关素材(依赖)

一共有四个依赖:gcc、openssl-devel、pcre-devel、zlib-devel。

  • 一键安装:

如果一键安装四个依赖,可以使用 yum指令。

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
  • 一个个单独安装:

如果一个个单独安装,需先自行下载四个安装包,上传到服务器,具体安装步骤可百度查找,本篇文章我采用一键安装,无论采用哪种安装方式,最终效果大同小异。


4 安装 nginx
  • 一、解压:tar -xvf nginx-1.22.1.tar.gz
  • 二、进入解压包内,执行:./configure
  • 三、在执行 ./configure 的目录,执行 make && make install

安装完成后,会在 /usr/local/ 路径下,生成 nginx 的文件夹,在sbin目录下, 有启动脚本。


5 启动 nginx

进入 /usr/local/nginx/sbin 目录下,有启动的脚本。

在这里插入图片描述

启动:

./nginx

查询启动的进程:

ps -ef | grep nginx

在这里插入图片描述

成功启动。


6 访问 nginx

启动成功后,在浏览器输入服务器ip,不加端口号,即可访问nginx。

在这里插入图片描述

三、Nginx 常用指令

使用 nginx 操作命令前提条件:必须进入 nginx 的 sbin 目录。

/usr/local/nginx/sbin
1 查看nginx 版本号
./nginx -v

在这里插入图片描述

2 启动 nginx
./nginx

3 停止 nginx
./nginx -s stop

4 重加载 nginx
./nginx -s reload

比如修改了nginx 的配置文件,不用重启,重加载生效。

四、Nginx 配置文件

1 nginx配置文件位置
/usr/local/nginx/conf/nginx.conf

2 nginx配置文件组成

在这里插入图片描述

(1)全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,比如上面配置的 worker_processes 1;表示值越大,可以支持的并发处理数据也越多。


(2)events块

events 块涉及的指令主要影响 nginx 服务器与用户的网络连接。比如 worker_connections 1024; 表示支持的最大连接数。


(3)http块

http 块是 nginx 配置最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。需要注意的是,http 块也可以包含 http全局块、server块。


(4)http块中-server块中 location说明

语法:

location [ = | ~ | ~* | ^~ ] url {

}
  • = :用于不含正则表达式的 url 前,要求请求字符串与 url 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
  • ~ :用于表示 url 包含正则表达式,并且区分大小写。
  • ~* :用于表示 url 包含正则表达式,并且不区分大小写。
  • ^~ :用于不含正则表达式的 url 前,要求 Nginx 服务器找到标识 url 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 url 和请求字符串做匹配。

五、Nginx 配置实例

实例(一) - 简单反向代理

实现效果:打开浏览器,在地址栏中输入地址:www.123.com,跳转转到 linux 系统 tomcat主页面中。

(1) 准备工作:在linux 中安装 tomcat,使用默认端口8080.

安装tomcat之前记得先安装jdk,关于jdk的安装此处不再赘述,可自行百度安装。

## tomcat 安装包上传至 /usr/local/tomcat9/
tar -zxvf apache-tomcat-9.0.99.tar.gz

解压后,直接进去 tomcat 的bin目录,启动脚本文件即可。

在这里插入图片描述

成功启动的截图。

(2) 访问过程分析

在这里插入图片描述

(3) 配置 windows 域名

路径:C:\Windows\System32\drivers\etc 底下的 HOSTS

添加:192.168.190.6: www.123.com


(4) 在 nginx 配置反向代理

nginx 配置文件如下:

在这里插入图片描述

(5) 重加载验证

修改配置文件后,需要重新加载:./nginx -s reload

浏览器访问验证:

在这里插入图片描述

实例(二) - 按规则匹配

实现效果:通过 nginx 反向代理,根据访问路径的不同,跳转到不同端口的服务中。
nginx 监听端口为 9001。

(1) 准备工作:准备两个 tomcat服务器,一个8080,一个8081.

在tomcat 9的目录,新建两个文件夹:tomcat8080、tomcat8081,分别把上述 tomcat 的安装包复制进两个文件夹,解压。

  • 对于 tomcat 8080,正常在bin目录下执行脚本文件启动。

  • 对于 tomcat 8081,则需修改配置文件中默认的 8080 端口,修改为8081:

    文件路径:conf/server.xml,修改的端口不止一个,全部修改如下截图:




    在这里插入图片描述


    修改过后保存。


为了方便区分,可以在 8080 的 tomcat 的 webapps 底下,新建一个 edu 文件夹,底下新建一个 a.html:
<h1> 8080 port !</h1>

在这里插入图片描述
访问测试:
在这里插入图片描述

在 8081 的 tomcat 的 webapps 底下,新建一个 pod 文件夹,底下新建一个 b.html:

<h1> 8081 port !</h1>

在这里插入图片描述
访问测试:
在这里插入图片描述

(2) 具体配置

需在 nginx.conf 文件夹中加入一个 server:

server {
        listen   9001;
        server_name  192.168.190.5;

        # ~ /edu/ 其中~的意思是正则匹配的意思,访问路径中包含/edu/则匹配成功
        location ~ /edu/ {
             proxy_pass http://127.0.0.1:8080;
        }


        location ~ /pod/ {
             proxy_pass http://127.0.0.1:8081;
        }
}

(3) 开放9001端口

1、查看服务器开放的全部端口。

firewall-cmd --list-all 

2、如果报错:FirewallD is not running,就是防火墙没开启,需开启防火墙。

# 查看防火墙状态
systemctl status firewalld 

#开启防火墙
systemctl start firewalld 

# 关闭防火墙
systemctl stop firewalld 

# 重启防火墙
systemctl restart firewalld 

3、开放指定的端口。

firewall-cmd --permanent --zone=public --add-port=9001/tcp

# 开放端口后,需防火墙重载
firewall-cmd --reload

(4) 校验

edu/a.html
在这里插入图片描述
pod/b.html

在这里插入图片描述

分发成功。


实例(三) - 负载均衡

实现效果:浏览器地址栏输入:http://192.168.190.6/edu/a.html,实现负载均衡,平均到 8080、8081 端口中。

(1) 准备工作:准备两个 tomcat 服务器,一个8080,一个8081.

沿用实例(二)的 8080,直接启动,对于 8081,在 webapps 底下,创建文件夹 edu,在edu文件夹底下,新建 a.html。然后启动 8081,测试访问 a.html。

<h1> 8081 port !  edu </h1>

在这里插入图片描述


(2) 修改 nginx 配置文件,进行负载均衡配置

语法:

upstream 自定义名字{
	# ip:port;
	server 192.168.190.5:8080;
	server 192.168.190.5:8081;
}

# server底下加location
server {
	listen 9001;
    server_name 192.168.190.5;
	location / {
		proxy_pass http://自定义名字;
	}
}

在这里插入图片描述

(3) 访问:http://192.168.190.5/edu/a.html 验证

不出意外的话, 会轮询访问8080和8081。


六、Nginx 分配策略

1 轮询:按请求的时间顺序,依次分配到不同的服务器,如果有的服务器宕机了,能自动剔除。

2 weight(权重):按照设置的权重比例进行分配。
upstream 自定义名字{
	# ip:port;
	server 192.168.190.5:8080 weight=1;
	server 192.168.190.5:8081 weight=2; # 分配比例是8080的两倍
}

如上述权重,明显8081的分配次数是8080的两倍。

3 ip_hash

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

tips: 假如 nginx 采用轮询访问 3 台后端服务器A、B、C,因为是按照轮询或权重分配,假如第一次访问的是服务器 A,在 session 中存储了登录状态,第二次又访问了服务器 B,但 B 服务器并没有存储该用户的 session 状态,因此还会提醒该用户进行登录,显然很不友好。

用法:

upstream 自定义名字{
	ip_hash # 直接在此处加入 ip_hash 即可
	server 192.168.190.5:8080
	server 192.168.190.5:8081
}

4 fair (第三方)

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

用法:

upstream 自定义名字{
	server 192.168.190.5:8080
	server 192.168.190.5:8081
	fair # 直接在此处加入 fair 即可
}

七、Nginx 动静分离/案例

nginx 动静分离简单来说就是把动态请求、静态请求分开,不能理解成只是单纯的把动态页面和静态页面屋里分离。可以理解为 nginx 处理静态页面、tomcat处理动态页面。动静分离有以下两种主流方案。

  • 1、纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流的方案,如下图:
    在这里插入图片描述

  • 2、把动态、静态文件混合在一起发布,通过 nginx 来分开,通过 location 指定不同的后缀名实现不同的请求转发。


1 准备工作

如下图,在/data/nginx_data/底下,新建 www、img 文件夹,www 底下为 a.html,img底下有一张 jpg 图片。

在这里插入图片描述


2 配置
server {
	listen       80;
    server_name  192.168.190.5;
·
    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location /www/ {
        root   /data/nginx_data/;
        index  index.html index.htm;
    }

    location /img/ {
        root  /data/nginx_data/;
        autoindex on;
    }
}

3 访问测试

访问1:http://192.168.190.5/img/_DSF7679.JPG

访问 http://192.168.190.5/img/ 时,已经显示出了 img 文件夹底下的所有文件。
在这里插入图片描述

再访问 http://192.168.190.5/img/_DSF7679.JPG,已经把图片显示出来了:
在这里插入图片描述


访问2:http://192.168.190.5/www/a.html

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值