6.nginx基础知识

1.nginx基础知识

1.1 什么是Nginx
	开源、高性能、可靠的Http Web服务器、代理服务器。
1.2 为什么选择Nginx
	1.高性能、高并发(在访问的高峰期时,nginx能比其他web服务器有更快的响应)
	2.高扩展性 (可以将功能模块化。 支持官方模块、第三方模块)
	3.高可靠性(nginx可持续不间断运行) 4个9 5个9
	4.热部署(可在不停止服务的情况下升级Nginx) 
	5.公司都选择使用Nginx 
		1.nginx成熟
		2.nginx具备非常多的功能 ( 负载均衡、缓存、静态资源加速、web服务、.........waf )
		3.nginx上手难度较低、配置文件清晰、
		4.统一技术债  (  nginx apache、)
1.3 Nginx使用场景
	1.nginx反向代理
	2.nginx负载均衡
	3.nginx HTTPS、Rewrite、
	4.nginx 限速、限流、等等
1.4 Nginx基本安装、配置、启动

1.配置nginx的官方源,打开nginx.org点击download
在这里插入图片描述
2.点击stable and mainline
在这里插入图片描述
3.选择对应的系统版本
在这里插入图片描述
4.设置 yum 仓库,创建文件 /etc/yum.repos.d/nginx.repo ,写入以下内容(我这里使用稳定版本的)

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

在这里插入图片描述
5.安装yum install nginx -y
在这里插入图片描述

1.5 nginx的配置文件

1.nginx 的相关配置文件

[root@tpl 一 8月 01  18:38 ~]# rpm -ql nginx
/etc/logrotate.d/nginx           #日志轮转配置文件 ( 按天切割日志 )
/etc/nginx
/etc/nginx/conf.d                #编写网站的配置文件 
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types            #返回的文件类型  ( 以下载形式回传给浏览器 )
/etc/nginx/modules
/etc/nginx/nginx.conf            #重要( 主配置文件 )
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params          #结合py
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx                  #二进制程序
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.22.0
/usr/share/doc/nginx-1.22.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx                     #日记路径

2.nginx主配置文件

[root@tpl 一 8月 01  19:11 ~]# cat /etc/nginx/nginx.conf

user  nginx;                 #运行nginx进程的身份
worker_processes  auto;      #nginx worker进程数  ( CPU核心保持一致 )

error_log  /var/log/nginx/error.log notice;   #错误日志存放的路径 ( 什么级别的错误才记录 )
pid        /var/run/nginx.pid;                #nginx进程运行起来会将进程的ID存储在指定的一个文件中


events {
    worker_connections  1024;                 #worker最大支持的连接数  worker_connections *  worker_processes
}

--------------------------------------------------------------------------------------
#网络层
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;     #如果返回的文件 mime.types 不识别此类型,则默认以下载方式返回给用户

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
------------------------------------------
#'$remote_addr(来源IP) - 
#$remote_user(使用什么用户登陆的)
# [$time_local](时间) 
#"$request"(包含请求的方法,内容,版本) '
#'$status(状态码) 
#$body_bytes_sent(发送的大小) 
#"$http_referer"(从哪个页面跳转过来的) '
#'"$http_user_agent"(客户端设备详情信息) 
#"$http_x_forwarded_for"'; (浏览当前页面的用户计算机的真实IP地址)
-------------------------------------------     
                      
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;           #包含/etc/nginx/conf.d/下的所有以.conf结尾的文件
}

3.nginx配置文件编写
例:
1.在特定路径下编写配置文件

vim /etc/nginx/conf.d/test.conf

server{  
        listen 80;  #网站监听的端口
        server_name www.test.com;  #定义网站访问的域名

        location / {         (location是用于控制用户请求的URI的路径的)
                root /test;   #定义站点代码存放的路径(根路径)
                index index.html;    #定义站点默认返回的页面

        }
}


2.测试时记得修改本地的hosts文件,做个劫持,将IP地址与域名绑定
192.168.xx.xx www.test.com

3.根据配置文件,在本地准备一个目录,还有一个配置文件
在这里插入图片描述

4.重载nginx
systemctl reload nginx

5.查看测试效果:
在这里插入图片描述

1.6 如何查找URL中对应服务器的真实文件存放路径

URL:http://www.test.com/download/test1.txt
URI:download/test1.txt

真实的文件存放路径=nginx配置文件中定义的服务根目录+URI
所以这里的文件真实路径是:/test/download/test1.txt

1.7nginx虚拟主机

在一台服务器上运行多个网站。 通过配置虚拟主机的方法来实现。

	1.基于主机多IP的方式   pass	( 服务器有多个IP,10网段配置一个网站,172网段配置一个网站 )
	2.基于端口的方式	    公司内部
	3.基于域名的方式	    必用

基于端口的方式:

1.编写配置文件

vim /etc/nginx/conf.d/port.conf

server{
	listen 81;
	location / {
			root /port1;
			index index.html;
   }
}
server{
	listen 82;
	location /{
		root /port2;
		index index.html;
    }
}

2.根据配置文件初始化本地目录文件

mkdir /port1
echo "port 81" >/port1/index.html

mkdir /port2
echo "port 82" >/port2/index.html

3.检查语法,重载nginx

nginx -t 
systemctl reload nginx 

4.查看测试结果
输入81端口:
在这里插入图片描述
输入82端口:
在这里插入图片描述

基于域名的方式:

1.编写配置文件

vim /etc/nginx/conf.d/test.conf

server{  
        listen 80;  
        server_name www.test.com;  

        location / {        
                root /test; 
                index index.html;  
       }
}



vim /etc/nginx/conf.d/test1.conf

server{
	listen 80;
	server_name www.test1.com;

	loction / {
		root /test1;
		index index.html;
      }
}

2.根据配置文件初始化本地目录文件

mkdir /test
echo "test" >/test/index.html

mkdir /test1
echo "test1" >/test1/index.html

3.做个劫持,将IP地址与域名绑定
192.168.xx.xx www.test.com
192.168.xx.xx www.test1.com

4.检查语法,重载nginx

nginx -t 
systemctl reload nginx 

5.查看测试结果
输入域名www.test.com
在这里插入图片描述
输入域名www.test1.com
在这里插入图片描述

1.8结合http协议,nginx整体访问流程
server{  
        listen 80;   #第一步
        server_name www.test.com;   #第二步

        location / {        #第三步
                root /test;  #第四步
                index index.html;  #第五步           #第六步,返回/test路径下的文件index.html给浏览器
       }
}

1.用户通过浏览器访问www.test.com
2.浏览器向DNS服务器请求解析域名www.test.com对应的IP地址
3.DNS服务器将解析出的IP地址返回给浏览器
4.浏览器通过TCP协议与IP地址对应的服务器80端口建立TCP连接
5.在TCP连接的基础上,浏览器发起HTTP请求,请求中会携带Headers
1.请求的域名:www.test.com
2.请求的方法:GET
3.请求的路径:/
4.请求的文档:index.html
6.服务器做出响应,将/index.html文件返回给浏览器
7.释放TCP连接
8.浏览器渲染显示index.html 页面内容

在这里插入图片描述


1.9编译安装nginx

nginx编译安装:
1.已经安装好了Nginx、需要你重新安装一次Nginx( 按照之前已经安装过的方式在来一次。)

nginx -V 获取以前的编译参数
找一台服务器重新安装,然后进行编译。

2.想使用源码安装,不用yum安装。


编译安装

1.找到一台已经安装过的Nginx,nginx -V,获取他的编译参数。
nginx -V

在这里插入图片描述

--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

2.在新的机器,下载nginx软件,使用此前的编译参数进行编译即可。
wget http://nginx.org/download/nginx-1.23.1.tar.gz

3.解压
tar xf nginx-1.23.1.tar.gz

4.进入nginx目录
cd /nginx-1.23.1
ls
在这里插入图片描述

5.生成Makefile

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

6.make生成可执行的二进制文件,make install 将生成的二进制文件放到指定的位置上
make && make install

7.启动nginx
/usr/sbin/nginx -t
/usr/sbin/nginx

8.查看结果
在这里插入图片描述

在这里插入图片描述

不想用了,怎么移除nginx

1.找到根下所有名字包含nginx的文件
find / -name nginx

在这里插入图片描述

挨个删除即可 rm -rf

2.添加过Nginx开机自启动的,再执行以下操作

chkconfig nginx off

rm -rf /etc/init.d/nginx

如果是yum安装的

则:

yum remove nginx -y

rm -rf /etc/nginx

rm -rf /var/log/nginx/
1.10.nginx平滑升级

什么是平滑升级?

常规的升级操作是,停服务—>升级服务—>启动服务,是有感知的
平滑升级是,在进行服务升级的过程中,对于用户的访问是无感知的,(不会造成服务中断)。

在这里插入图片描述

低版本要向高版本升级时候,
下载完新版本的nginx后,
先要备份nginx的二进制文件,
再编译一个新的二进制文件出来,
然后通过命令向旧的master发送一个USR2的信号,
此时就会出现一种情况,旧的master与新的master共存的情况,
新老master同时处理用户的请求,新来的请求会由新的master处理,旧的master在处理之前没有处理完的请求,
当旧的worker进程完成以后,向旧的master发送WINCH信号关闭worker,
如果某个worker还有没处理完的任务,worker就不会关闭,直到任务结束后关闭,
此时就剩旧版本的master与新版本的master以及worker存在,
然后就可以向旧的master发送一个QUIT信号,退出旧的master,然后就完成了平滑升级。


平滑升级实现思路

1.下载新版本的Nginx

2.了解旧版本Nginx的编译参数

3.备份旧版本的Nginx、然后替换为新版本的Nginx

4.向旧版本的Nginx的Master进程发送USR2信号

	4.1 旧版本的Nginx进程的pid文件会自动添加一个后缀.oldbin
	4.2 master进程会用新的Nginx二进制文件启动新的Master进程和Worker进程。
	
5.向旧的Nginx Master进程发送WINCH信号,旧的worker子进程就退出了。

6.向旧的Nginx Master进程发送QUIT信号,旧的Master进程就退出了,此时平滑升级就结束了。

相关信号:

QUIT:优雅关闭
HUP:优雅重启   例如:reload指令
USR1:重新打开日志文件 ,相当于nginx -s reopen
USR2:平滑升级可执行的二进制文件
WINCH:平滑关闭Worker进程 


实现平滑升级

大概步骤:

1.本地装有旧版本的nginx,nginx1.22.0版本
在这里插入图片描述

2.提供一个可下载的文件,用来验证我们的平滑升级过程中下载并没有中断

准备服务

server {
 listen 80; 
 server_name down.test.com; 
 root /html;

limit_rate 200k; #限速200k 

location / {
    index index.html;
 }
}

准备下载的文件
dd if=/dev/zero of=/html/bigdata bs=1M count=150

域名解析

然后进行访问,让其开始下载文件

3.下载新版本的nginx并解压,对其进行编译,然后生成二进制文件
tar xf nginx-1.23.1.tar.gz

cd nginx-1.23.1

3.1生成编译清单文件

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

3.2根据清单文件,生成可执行的二进制文件
make

3.3这里切记不要执行make install,只需要二进制文件,不需要安装

4.备份旧版的nginx二进制文件,将新版本的二进制文件,拷贝到指定位置
4.1.备份
mv /usr/sbin/nginx /usr/sbin/nginx-1.22.0
4. 2.拷贝
cp objs/nginx /usr/sbin/nginx

5.检查进程情况,然后发送信号

发送USR2信号
然后会发现新老master共存的状况
在这里插入图片描述

6.关闭旧Master的Worker进程(如果worker进程正在处理任务,那么他不会退出,只有任务结束才会退出)
kill -WINCH 2355
因为我们还有下载进程没有结束,所以会显示worker process is shutting down

在这里插入图片描述
当后台下载的进程结束后,他就会退出

在这里插入图片描述

7.退出旧的master
kill -QUIT 2355
现在只剩新的master与他的worker
在这里插入图片描述

8.此时就平滑升级到了新的版本
在这里插入图片描述

在升级的期间下载始终是没有中断的,并不受升级的影响


1.11.nginx编译安装后,版本回退

当升级新版本后,发现不兼容新版本的nginx,可以选择将nginx版本回退到之前的版本。

版本回退

1.备份新版本的nginx二进制文件
mv /usr/sbin/nginx /usr/sbin/nginx-1.23.1

2.恢复旧版本的nginx二进制文件
mv /usr/sbin/nginx-1.22.0 /usr/sbin/nginx

3.查看nginx进程,然后发送USR2信号,然后会发现新老master共存的状况
ps -ef |grep nginx
在这里插入图片描述

kill -USR2 3561
在这里插入图片描述

4.关闭旧Master的Worker进程(如果worker进程正在处理任务,那么他不会退出,只有任务结束才会退出)
kill -WINCH 2355

在这里插入图片描述

5.退出旧的master
kill -QUIT 2355

在这里插入图片描述

6.当后台的下载结束后,旧的worker,master就会全部退出,最终只剩新的master与worker
在这里插入图片描述

7.nginx版本也顺利的回退到之前的旧版本
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值