Nginx 学习笔记

文章目录

  • 1 Nginx 简介
    • 1.1 Nginx发展介绍
    • 1.2 正向代理和反向代理概念
    • 1.3 正向代理和反向代理举例
      • 1.3.1 正向代理
      • 1.3.2 反向代理
  • 2 Nginx环境搭建
    • 2.1 安装
    • 2.2 启动
      • 2.2.1 普通启动
      • 2.2.2 通过配置文件启动
    • 2.3 关闭
      • 2.3.1 优雅关闭Nginx
      • 2.3.2 快速关闭Nginx
    • 2.3.3 重启Nginx
    • 2.4 检查配置文件
    • 2.5 其他
  • 3 Nginx配置文件说明及Nginx主要应用
    • 3.1 Nginx的核心配置文件
      • 3.1.1 基本配置
      • 3.1.2 events配置
      • 3.1.3 http配置
      • 3.1.4 server配置
    • 3.2 Nginx主要应用
  • 4 静态网站部署
    • 4.1 修改nginx.conf文件
    • 4.2 重启nginx服务器
    • 4.3 部署静态web资源
    • 4.4 访问
  • 5 负载均衡
    • 5.1 负载均衡概述
    • 5.2 负载均衡实现方式
      • 5.2.1 硬件负载均衡
      • 5.2.2 软件负载均衡
    • 5.3 Nginx负载均衡
      • 5.3.1 案例
      • 5.3.2 负载均衡策略
        • 5.3.2.1 轮询(默认)
        • 5.3.2.2 权重
        • 5.3.2.3 ip hash
        • 5.3.2.4 最少连接
      • 5.4.3 nginx其他配置
        • 5.4.3.1 backup 备份服务器
        • 5.4.3.2 down
  • 6 静态代理
    • 6.1 在nginx.conf的location中配置静态资源的后缀
    • 6.2 在nginx.conf的location中配置静态资源所在目录实现(常用)
  • 7 动静分离
    • 7.1 概述
    • 7.2 案例
  • 8 虚拟主机
    • 8.1 基于端口的虚拟主机(了解)
    • 8.2 基于域名的虚拟主机(掌握)
    • 8.3 案例(模拟城市站点)
      • 8.3.1 架构图
      • 8.3.2 步骤

1 Nginx 简介

1.1 Nginx发展介绍

Nginx是一个高性能的web服务器和反向代理服务器,也可以作为邮件代理服务器。
Nginx特点是占有内存少,并发处理能力强,以高性能、低系统资源消耗而闻名,Nginx官方测试为5万并发请求。

1.2 正向代理和反向代理概念

反向代理(Reverse Proxy) 方式是指以代理服务器来接受internet.的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet.上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;

正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户, 我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来然后返回给我。

1.3 正向代理和反向代理举例

1.3.1 正向代理

比如你现在缺钱,想找马云爸爸去借钱,可想而知人家可能鸟都不鸟你,到最后碰一鼻子灰借不到钱。不过你认识你家隔壁老王,而老王认识马云同志,而且关系还很好。这时候你托老王去找马云借钱,当然这事最后成了,你从马云那里借到了500万!这时候马云并不知道钱是你借的,只知道这钱是老王借的。最后由老王把钱转交给你。在这里,老王就充当了一个重要的角色:代理。

此时的代理,就是我们常说的正向代理。代理客户端去请求服务器,隐藏了真实客户端,服务器并不知道真实的客户端是谁。

1.3.2 反向代理

比如你现在很无聊,想找人聊天,这时候你拨通了联通客服10010电话,联通的总机可能随机给你分配一个闲置的客服给你接通 。这时候你如愿以偿的和客服聊了起来,问了问她目前有没有结婚、有没有对象、家住哪里、她的微信号、她的手机号。…。此时联通总机充当的角色就是反向代理,你只知道和客服接通并聊了起来,具体为什么会接通这个客服MM,怎么接通的,你并不知道。反向代理隐藏了真正的服务端,就像你每天使用百度的时候,只知道敲打www.baidu.com就可以打开百度搜索页面,但背后成千上万台百度服务器具体是哪一台为我们服务的,我们并不知道。我们只知道这个代理服务器,它会把我们的请求转发到真实为我们服务的那台服务器那里去。

综上所述:正向代理代理对象是客户端,反向代理代理对象是服务端。

2 Nginx环境搭建

2.1 安装

一次性安装,执行如下命令:yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y

切换到 /home/soft目录下,上传并覆盖文件 rz -y,选中nginx压缩包上传
解压nginx文件: tar -zxvf /home/soft/nginx-1.18.0 -C /usr/local/
配置前缀,在nginx解压后的主目录下执行 : ./configure --prefix=/usr/local/nginx
执行命令进行编译:make
执行命令进行安装:make install

这时切换到/usr/local目录下,多了一个nginx
里面有conf(nginx的配置,其中主要学习nginx.conf)、html(两个静态页面)、logs(日志)、sbin(只有nginx,启动命令)
Nginx 学习笔记_第1张图片

2.2 启动

2.2.1 普通启动

切到/usr/local/nginx/sbin目录下:cd /usr/local/nginx/sbin
执行启动命令:./nginx
启动成功后查看进程:
Nginx 学习笔记_第2张图片
这个时候通过虚拟机ip访问,可以进入nginx欢迎界面

2.2.2 通过配置文件启动

切换到/usr/local/nginx/sbin下执行命令:./nginx -c /usr/local/nginx/conf/nginx.conf

或者在任意位置用绝对路径: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
这里的 -c 表示指定配置文件。

2.3 关闭

2.3.1 优雅关闭Nginx

找到nginx的进程号:ps -ef | grep nginx
执行命令: kill -QUIT 主pid
在这里插入图片描述
注意:
1、其中的pid 是主进程的pid(master process),其他为子进程(worker process)
2、这种关闭方式会处理完请求再关闭,所以称为优雅的关闭

2.3.2 快速关闭Nginx

找到nginx的进程号:ps -ef | grep nginx
执行命令: kill -TERM 主pid
Nginx 学习笔记_第3张图片
注意:
1、其中的pid 是主进程的pid(master process),其他为子进程(worker process)
2、这种关闭方式不管请求是否处理完成,直接关闭,比较暴力,称之为快速关闭

如果关闭使用: kill -9 主pid ,那么子进程不会被关闭。

2.3.3 重启Nginx

执行命令:./nginx -s reload 或者 /usr/local/nginx/sbin/nginx -s reload
常用在更新配置文件后,重启

2.4 检查配置文件

当修改配置文件后,可以使用Nginx命令检查配置文件是否有语法错误。但无法检查逻辑错误
在启动命令的后面加上-t
也就是: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
如果配置文件没有问题,再次输入 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 则正常启动在这里插入图片描述
如果配置文件有错误,将配置文件下载到windows下进行修改,再上传到conf/下进行覆盖。
其中 sz 表示下载;rz 表示 上传;-y 表示覆盖(如果没有-y,上传的同名文件后面会加上括号1)
覆盖完成后 正常启动
Nginx 学习笔记_第4张图片

2.5 其他

Linux上查看Nginx版本 : /usr/local/nginx/sbin/nginx -v
-v(小写的v):显示nginx的版本
-V(大写的V):显示nginx的版本、编译器版本和配置参数
Nginx 学习笔记_第5张图片

3 Nginx配置文件说明及Nginx主要应用

3.1 Nginx的核心配置文件

学习Nginx首先需要对它的核心配置文件有一定的认识,这个文件位于Nginx的安装目录/usr/local/nginx/conf目录下,名字为nginx.conf。
Nginx 学习笔记_第6张图片
Nginx的核心配置文件主要由三个部分构成。

3.1.1 基本配置

#配置worker进程运行用户,nobody也是一个linux用户,一般用于启动程序,没有密码
#user  nobody;
#配置工作进程数目,根据硬件调整,通常等于CPU数量或2倍于CPU数量
worker_processes  1;

#配置全局错误日志及类型,[debug|indo|notice|warn|error|crit],默认是error
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; # 配置进程pid文件

3.1.2 events配置

#配置工作模式和连接数
events {
# 上限是65535
    worker_connections  1024;#配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_connections*worker_processes
}

3.1.3 http配置

#配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
#配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
    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日志及存放路径,并使用上面定义的main日志格式
    #access_log  logs/access.log  main;

    sendfile        on; #开启高效文件传输模式
    #tcp_nopush     on; #防止网络阻塞

    #keepalive_timeout  0;
    keepalive_timeout  65; #长连接超时时间,单位是秒

    #gzip  on; #开启gzip压缩输出

3.1.4 server配置

#配置虚拟主机,可以有多个server,不同server的端口和名字不能全部重复
    server {
        listen       80; #配置监听端口
        server_name  localhost; #配置服务名
"nginx.conf" 117L, 2656C

推荐这篇:https://www.jianshu.com/p/a7c86efe1987

3.2 Nginx主要应用

1、静态网站部署
2、负载均衡
3、静态代理
4、动静分离
5、虚拟主机

后面会详细说到。

4 静态网站部署

4.1 修改nginx.conf文件

在server的location中添加以下代码段。表示当请求路径为ip地址/ace时,找到/opt/www下的 /ace/login.html
在这里插入图片描述

4.2 重启nginx服务器

执行指令/usr/local/nginx/sbin/nginx -s reload

4.3 部署静态web资源

Nginx 学习笔记_第7张图片

4.4 访问

浏览器访问 虚拟机ip地址/ace
Nginx 学习笔记_第8张图片

5 负载均衡

5.1 负载均衡概述

在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。

负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。

5.2 负载均衡实现方式

5.2.1 硬件负载均衡

比如 F5、深信服、Array 等
优点是有厂商专业的技术服务团队提供支持,性能稳定
缺点是费用昂贵,对于规模较小的网络应用成本太高

5.2.2 软件负载均衡

比如 Nginx、LVS、HAProxy 等
优点是免费开源,成本低廉

5.3 Nginx负载均衡

Nginx 学习笔记_第9张图片

5.3.1 案例

首先在虚拟上开启两个tomcat
注意:tomcat的端口号不能冲突
tomcat/conf/server.xml中将端口号改为不冲突的端口号

tomcat-01:server port=8005  connector port=8085
tomcat-02:server port=8006  connector port=8086

tomcat-01
Nginx 学习笔记_第10张图片
Nginx 学习笔记_第11张图片
tomcat-02
Nginx 学习笔记_第12张图片

Nginx 学习笔记_第13张图片
另外,在nginx/conf/nginx.conf中做修改
Nginx 学习笔记_第14张图片
启动nginx
执行指令 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
启动tomcat
执行指令 /usr/local/tomcat-01/bin/startup.sh 以及 /usr/local/tomcat-02/bin/startup.sh

查看进程,确认nginx以及tomcat启动
在这里插入图片描述
Nginx 学习笔记_第15张图片
最后,在浏览器输入192.168.xxx.xxx/myweb
刷新页面,会在两个tomcat中进行切换。
Nginx 学习笔记_第16张图片
Nginx 学习笔记_第17张图片

5.3.2 负载均衡策略

5.3.2.1 轮询(默认)

注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。如果后端服务器down掉,将自动剔除

	upstream backserver { 
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
} 

5.3.2.2 权重

每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况

	upstream backserver { 
    	server 192.168.0.14 weight=5; 
    	server 192.168.0.15 weight=2; 
} 

修改nginx.conf,加上权重
Nginx 学习笔记_第18张图片
重启nginx:/usr/local/nginx/sbin/nginx -s reload
浏览器访问 查看结果

5.3.2.3 ip hash

ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
算法:hash("124.207.55.82") % 2 = 0, 1

	upstream backserver { 
    	ip_hash; 
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
}

Nginx 学习笔记_第19张图片
重启nginx:/usr/local/nginx/sbin/nginx -s reload
浏览器访问 查看结果

注意:用户的ip地址不同,hash值也不同。但取模之后会出现hash碰撞,所以在运气不好的情况下,有可能大量的ip取模后都访问了同一个tomcat,导致服务器崩溃。

5.3.2.4 最少连接

web请求会被转发到连接数最少的服务器上

	upstream backserver { 
    	least_conn;
    	server 127.0.0.1:8080; 
    	server 127.0.0.1:9090; 
}	

5.4.3 nginx其他配置

5.4.3.1 backup 备份服务器

配置1:

upstream backserver { 
    	server 127.0.0.1:9100;
		#其它所有的非backup机器down的时候,才请求backup机器
    	server 127.0.0.1:9200 backup; 
} 

只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。
一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。

可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性。

一般操作是先将备份服务器更新,再关闭一半的正常服务器,将其更新重启,此时有了新的服务器,nginx不会给备份服务器发请求了。此时再关闭另一半服务器,更新重启,回到所有服务器工作的状态。

5.4.3.2 down

配置2:

	upstream backserver { 
server 127.0.0.1:9100;
#down表示当前的server是down状态,不参与负载均衡
    server 127.0.0.1:9200 down; 
} 

一般在项目上线的时候,可以分配部署不同的服务器上,然后对Nginx重新reload。
reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级…

6 静态代理

把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。

所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
Nginx 学习笔记_第20张图片

6.1 在nginx.conf的location中配置静态资源的后缀

例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)

location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
    root /opt/static;
}

说明
~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配
第一个点 . 表示任意字符
*表示一个或多个字符
. 是转移字符,是后面这个点的转移字符
| 表示或者
$ 表示结尾
整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理
放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;
否则会出现403错误 chmod 755

6.2 在nginx.conf的location中配置静态资源所在目录实现(常用)

例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)

location ~ .*/(css|js|img|images) {
    	root   /opt/static;
}

xxx/css
xxx/js
xxx/img
xxx/images
我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源

Nginx 学习笔记_第21张图片
将图片放在/opt/static/myweb/image下。访问路径的替换:192.168.xxx.xxx/myweb--------/opt/static/myweb
Nginx 学习笔记_第22张图片
重启nginx:/usr/local/nginx/sbin/nginx -s reload
浏览器访问,静态资源是可以查看到的。

7 动静分离

7.1 概述

Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。
动态资源,如jsp由tomcat或其他web服务器完成
静态资源,如图片、css、js等由nginx服务器完成
它们各司其职,专注于做自己擅长的事情
动静分离充分利用了它们各自的优势,从而达到更高效合理的架构
Nginx 学习笔记_第23张图片
整个架构中,一个nginx负责负载均衡,两个nginx负责静态代理。Nginx在一台Linux上安装一份,可以启动多个Nginx,每个Nginx的配置文件不一样即可

7.2 案例

1、拷贝两份nginx配置文件(静态代理)

2、修改新拷贝的nginx81.conf和nginx82.conf配置文件
>Nginx81.conf端口号,因为这两个机器只需要做静态代理,所以删除掉负载均衡的配置
Nginx 学习笔记_第24张图片
>Nginx82.conf端口号,因为这两个机器只需要做静态代理,所以删除掉负载均衡的配置
Nginx 学习笔记_第25张图片
>静态代理的配置
Nginx 学习笔记_第26张图片
3、负载均衡Nginx配置(nginx.conf)
M、动态资源的负载均衡

upstream www.myweb.com { 
    server  127.0.0.1:9100 weight=5; 
    server  127.0.0.1:9200 weight=2;  
}
location /myweb {
    	proxy_pass http://www.myweb.com;
}

N、静态资源的负载均衡

upstream static.myweb.com { 
    server  127.0.0.1:81 weight=1; 
    server  127.0.0.1:82 weight=1;  
}

location ~ .*/(css|js|img|images) {
    	proxy_pass http://static.myweb.com;
}

4、启动三台nginx服务器,启动两台tomcat服务器

5、浏览器输入http://192.168.xxx.xxx/myweb/进行测试

8 虚拟主机

8.1 基于端口的虚拟主机(了解)

基于端口的虚拟主机配置,使用端口来区分
浏览器使用 同一个域名+端口 或 同一个ip地址+端口访问;

		server {
    listen 8080;
    		server_name www.myweb.com;
    		location /myweb {
            	proxy_pass http://www.myweb.com;
    		}
}
		server {
    		listen 9090;
    		server_name www.myweb.com;
    		location /p2p {
           		proxy_pass http://www.p2p.com;
    		}
}

8.2 基于域名的虚拟主机(掌握)

基于域名的虚拟主机是最常见的一种虚拟主机

server {
        listen       80;
        server_name  www.myweb.com;
        location /myweb {
           proxy_pass http://www. myweb.com;
        }
}
	server {
        listen       80;
        server_name  www.p2p.com;
        location /myweb {
           proxy_pass http://www.p2p.com;
        }
}

需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts
在hosts文件配置:
192.168.xxx.xxx www.myweb.com
192.168.xxx.xxx www.p2p.com
前面是Linux的IP,后面是你自定义的域名

8.3 案例(模拟城市站点)

8.3.1 架构图

Nginx 学习笔记_第27张图片

8.3.2 步骤

1、配置3个Tomcat,每个Tomcat一个站点项目(端口号不能冲突)
将war包放在/usr/local/tomcat-01/webapps/ROOT目录下。解压 unzip beijing.war. 防止上下文目录出现。
Nginx 学习笔记_第28张图片

2、在nginx.conf文件添加三个server节点,用于配置三个虚拟主机
Nginx 学习笔记_第29张图片
3、nginx.conf中配置每个虚拟主机请求转发所对应的后端服务器(负载均衡,可以配置多个服务器)
Nginx 学习笔记_第30张图片
4、修改host文件。路径:C:\Windows\System32\drivers\etc\hosts
添加以下内容,将域名与ip地址绑定。
在这里插入图片描述
5、重启nginx:/usr/local/nginx/sbin/nginx -s reload
测试http://beijing.myweb.com;http://tianjin.myweb.com;http://nanjing.myweb.com

你可能感兴趣的:(笔记,分布式,nginx)