Nginx笔记

Nginx

参考尚硅谷的Nginx视频教程所写笔记

概述

nginx是什么?能做什么

我们百度百科如下

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发]能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

Nginx为我们选择了 epoll and kqueue作为开发模型。

Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。

无缓存的反向代理加速,简单的负载均衡和容错。

FastCGI,简单的负载均衡和容错。

模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。

支持 SSL 和 TLSSNI。

Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50,000个并发连接数。

Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7 *24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

Nginx采用master-slave模型,能够充分利用SMP的优势,且能够减少工作进程在磁盘i/0的阻塞延迟。当采用select()pol()调用时.还可以限制每个进程的连接数。

反向代理

Nginx不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。

正向代理

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

在这里插入图片描述

反向代理

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。

在这里插入图片描述

对外暴露9001隐藏8080

也就是我们客户端以为直接访问的是tomcat8080,但是实际上中间有一个反向代理服务器,只是我们客户端不用向正向代理那样去配置

负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。

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

升级我们的硬件配置,是不能解决日益增加的业务需求的,也就是说我们单单增加服务器的配置,提升CPU,内存还是不够

上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

在这里插入图片描述

动静分离

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

也就是有些只是用来展示图片效果的不涉及业务功能,而有些是涉及业务功能的,我们解决办法就是动态页面和静态页面由不同的服务器来解析,加快解析速度

在这里插入图片描述

安装

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

参照另外一位博客写的安装

https://blog.csdn.net/t8116189520/article/details/81909574

启动

cd usr/local/nginx/
cd sbin/
### 	启动服务
./nginx
###		查看进程
ps -ef|grep ngnix
root      6892     1  0 17:47 ?        00:00:00 nginx: master process ./nginx
root      6893  6892  0 17:47 ?        00:00:00 nginx: worker process

访问

我们先去找一个东西

cd nginx/
ls
client_body_temp  html          nginx-1.13.7.tar.gz  scgi_temp
conf              logs          proxy_temp           uwsgi_temp
fastcgi_temp      nginx-1.13.7  sbin
cd conf/
ls
里面有一个nginx.cong文件打开设置

在这里插入图片描述

nginx操作的常用命令

前提条件:

必须进入我们的nginx文件目录

/usr/local/nginx/sbin

#############################################################
##		查看版本号
./nginx -v
nginx version: nginx/1.13.7
####		查看我们的nginx运行状态
sbin]# ps -ef|grep nginx
root      2313     1  0 20:31 ?        00:00:00 nginx: master process ./nginx
nginx     2314  2313  0 20:31 ?        00:00:00 nginx: worker process
root      2351  2291  0 20:59 pts/1    00:00:00 grep --color=auto nginx
###########
######			停止我们的nginx
./nginx -s stop
 ps -ef|grep nginx
root      2359  2291  0 21:00 pts/1    00:00:00 grep --color=auto nginx

#######			启动我们的nginx
./nginx
ps -ef|grep nginx
root      2361     1  0 21:00 ?        00:00:00 nginx: master process ./nginx
nginx     2362  2361  0 21:00 ?        00:00:00 nginx: worker process
##########
	#######		冲加载我们的nginx
	###			我们修改了配置文件,重新加载配置文件启动
./nginx -s reload
#############################################################

Nginx配置实例

nginx的配置文件

位置在/usr/local/nginx/conf下 这些根据我们的环境而定

#############################################################
##			第一部分	全局块
##		主要设置一些影响nginx服务器整体运行的配置命令
user  nginx;		#用户组
# worker_processes  这是Nginx服务器并发处理服务的关键配置, worker, processes 值越大,可以支持的并发处理也越多, 但是会受到硬件、软件等设备的制约。
worker_processes  1;

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

#pid        logs/nginx.pid;
#############################################################
###			第二块		event块
##	events块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个wordprocess可以同时支持的最大连接数等。
events {
    worker_connections  1024;
}

#上述例子就表示每个work process支持的最大连接数为1024.
#这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置

#############################################################
##			第三部分   http块
##		这算是Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。4
#需要注意的是: http块也可以包括http全局块、server 块。
###		第一小块	http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
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;

    #gzip  on;
###		server部分	这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的 ,该技术的产生是为了节省互联网服务器硬件成本。
##每个http块可以包括多个server块,而每个server块就相当于-个虚拟主机。 而每个server块也分为全局server 块,以及可以同时包含多个locaton 块。	    
	server {
        listen      80 ;		#监听端口号
        server_name  #####;		#主机名服务器IP地址
#charset koi8-r;

        #access_log  logs/host.access.log  main;
		#本地配置	
        location / {
            root   html;
            index  index.html index.htm;
        }

        #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;
        }

反向代理

实现效果

打开浏览器,输入一个地址,可以直接跳转到我linux中我tomcat的主界面

当然这次不单单是服务器+8080端口

准备工作

启动我们的tomcat服务器

[root@iz2zebfusfdfm99altnk8lz bin]# ./startup.sh 
Using CATALINA_BASE:   /home/wanghua/apache-tomcat-9.0.40
Using CATALINA_HOME:   /home/wanghua/apache-tomcat-9.0.40
Using CATALINA_TMPDIR: /home/wanghua/apache-tomcat-9.0.40/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_212/jre
Using CLASSPATH:       /home/wanghua/apache-tomcat-9.0.40/bin/bootstrap.jar:/home/wanghua/apache-tomcat-9.0.40/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
[root@iz2zebfusfdfm99altnk8lz bin]# cd ..
[root@iz2zebfusfdfm99altnk8lz apache-tomcat-9.0.40]# cd logs/
#查看我们的日志
[root@iz2zebfusfdfm99altnk8lz logs]# tail -f catalina.out 
#########################################################################		对外开放端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd -reload
#查看我们目前开放的端口号
firewall-cmd --list-all
#我这里已经开启过了

在这里插入图片描述

tomcat启动成功

访问过程分析

在这里插入图片描述

具体配置

1.在windows系统的host文件进行域名和ip对应关系的配置这个文件在

在这里插入图片描述

在最后一行加入一行内容

8.131.56.21x		www.wqh.com

在这里插入图片描述

我们现在的8080端口还无法取消掉,我们还要进行下一步配置

2.在nginx进行请求转发的配置(反向代理配置)

首先我们找到我们的nginx的配置文件nginx.conf

我们修改这个nginx.conf

vim nginx.conf
##############################################################################		第一个需要修改的配置

    server {
        listen      80 ;
        server_name  xxxxxxxxx;  #填我们的ip地址

        #charset koi8-r;
######################################################################		第二个需要修改的配置		请求转发到这个proxy_pass的地址
        location / {
            root   html;
            proxy_pass http://127.0.0.1:8080;	#填入我们的tomacat地址
            index  index.html index.htm;
        }

################				保存退出

测试

启动我们的nginx服务器

测试成功就OK了,这个地方我的阿里云服务器得备案展示不了了

反向代理实例2

效果

实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中nginx,监听端口为9001,
访问http://127. 0. 0. 1:9001/edu/ 直接跳转到127. 0. 0. 1:8080
访问http://127. 0.0.1:9001/vod/直接跳转到127. 0.0.1:8081

准备工作

1.准备两个tomcat服务器,其中一个tocat的server.xml文件中的8080端口改成我们测试要用的8081端口。这样我们就有两个服务器启动了

2.创建文件夹和测试页面

具体配置

找到nginx的配置文件,在里面进行反向代理的配置

# 增加一个或者修改下面的server
server {
   listen       9001;		监听端口
   server_name  ip地址;

    location ~ /edu/ {
			proxy_pass http://ip地址:8080;
    }
    location ~ /vod/ {
			proxy_pass http://ip地址:8081;
    }
}
~  说的是我们的正则表达式形式

不要忘记对外开放的端口号

最终测试

在这里插入图片描述

在这里插入图片描述

location指令说明

该指令用于匹配URL

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

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

**注意:*如果uri包含正则表达式,则必须要有~或者 ~ 标识。

负载均衡

实现效果

浏览器地址输入我们的地址http://ip地址/xxx.html,负载均衡效果,把请求平均分配到8080和8081端口中

准备工作

一台8080服务器,一台8081服务器

在两台tomcat里面的webapps目录中,创建名称是edu文件夹,在文件夹中创建a.html

分别启动两台服务器

测试能不能正常跳转

nginx负载均衡配置

修改我们的nginx.conf配置文件

#	这个是http块增加的东西
upstream myserver{
    server 8.131.56.216:8080;
    server 8.131.56.216:8081;
}   

#		第二个需要修改的是server块
server {
        listen      80 ;
        server_name  8.131.56.216;	#我们的ip地址

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            proxy_pass http://myserver;
            index  index.html index.htm;
        }

实现了最基本的负载均衡配置

效果就是我们不停刷新你会看到,服务器会将我们平均的发送到8080端口下的a.html或者8081端口下的a.html

随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx.就是其中的一个,在linux下有Nginx、LVS、 Haproxy等等服务可以提供负载均衡服务,而且Nginx提供了几种分配方式策略

轮询(默认方式)

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

weight

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

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:

在这里插入图片描述

ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:
在这里插入图片描述

可以解决session问题

fair(第三方)

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

也就是说一起给8080和8081谁响应时间短,快,我这个请求就交给谁处理

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会写代码的花城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值