草庐IT

Nginx动静分离和平滑升级

微笑的段嘉许 2023-03-28 原文

Nginx动静分离和平滑升级

?博客主页: ​​微笑的段嘉许博客主页​​ <a name='[顶部]'></a>

?微信公众号:微笑的段嘉许

?欢迎关注?点赞?收藏⭐留言?

?本文由微笑的段嘉许原创!

?51CTO首发时间:?2023年2月9日?

✉️坚持和努力一定能换来诗与远方!

?作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

不要偷走我小火车哦~ ~ ~


本文介绍

Nginx的动静分离,原理是将动态请求和静态请求分开,不能单纯的理解成只把动态页面和静态页面物理分离。严格意义上,可以理解成使用nginx处理静态页面,tomcat或PHP处理动态页面。


详情介绍

​ Nginx (“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上ngimx,的并发能力确实在同类型的网页服务器中表现较好
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率﹐能经受高负载的考验,有报告表明能支持高达50, 000个并发连接数。

​Nginx作用:反向代理、负载均衡、动静分离等​

什么是动静分离

在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

?实验配置与实验

拓扑图

推荐步骤

  • 在Centos01安装Nginx服务,使用​​www.duanjiaxu.com​​访问Nginx
  • 在Centos02配置DNS服务器使用,创建duanjiaxu.com域和djx.com域分别添加主机指向Nginx主机IP地址和LAMP主机IP地址
  • 在Centos03安装LAMP平台,使用www.djx.com访问
  • 在Nginx服务器配置动静分离静,静态数据图片访问Nginx动态php访问跳转到LAMP
  • 在Centos01安装新版Nginx实现平滑升级,配置Nginx监控访问监控进行基本身份验证
实现步骤:

一、在Centos01安装nginx服务,使用www.duanjiaxu.com访问nginx

1、在Centos01上安装nginx服务

1)上传nginx程序包

[root@centos01 ~]# rz
z waiting to receive.**B0100000023be50
[root@centos01 ~]# rz
z waiting to receive.**B0100000023be50
[root@centos01 ~]# ls
anaconda-ks.cfg nginx-1.12.0.tar.gz 公共 视频 文档 音乐
initial-setup-ks.cfg nginx-1.16.1.tar.gz 模板 图片 下载 桌面

2)安装nginx依赖程序

[root@centos01 ~]# useradd -M -s /sbin/nologin nginx //创建nginx用户
[root@centos01 ~]# yum -y install pcre-devel zlib-devel //安装nginx依赖程序

3)解压nginx程序包

[root@centos01 ~]# tar zxf ./nginx-1.12.0.tar.gz -C /usr/src/ //解压nginx程序包
[root@centos01 ~]# cd /usr/src/nginx-1.12.0/ //进入到nginx文件目录
4)安装nginx

[root@centos01 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module //安装模块
[root@centos01 nginx-1.12.0]# make && make install //编译安装nginx程序
root@centos01 nginx-1.12.0]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ //优化命令
5)创建网站根目录设置网站主页

[root@centos01 ~]# mkdir /www //创建网站根目录
[root@centos01 ~]# echo "www.duanjiaxu.com" > /www/index.html //设置网站主页

2、配置IP地址额DNS

1)配置IP地址

[root@centos01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 //进入网卡配置文件
---
TYPE=Ethernet
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
DNS1=192.168.100.20
---
[root@centos01 ~]# systemctl restart network //重新启动网卡服务
[root@centos01 ~]# cat /etc/resolv.conf //查看DNS是否配置成功
# Generated by NetworkManager
nameserver 192.168.100.20

3、修改nginx主配置文件

1)修改主配置文件

[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf //进入nginx主配置文件
---
2 user nginx; //nginx管理用户
36 listen 192.168.100.10:80; //监听的IP地址和端口
39 charset utf-8; //支持中文
44 root /www/; //网站根目录
2)使用win10虚拟机验证

[root@centos01 ~]# nginx //启动nginx服务
[root@centos01 ~]# netstat -anptu | grep nginx //监听端口
tcp 0 0 192.168.100.10:80 0.0.0.0:* LISTEN 4193/nginx: master

二、在Centos配置DNS服务器,使用创建duanjiaxu.com域和djx.com域分别添加主机指向nginx主机IP地址和LAMP主机IP地址

1、配置网卡服务

1)配置IP地址和DNS

[root@centos02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 //进入网卡配置文件
---
TYPE=Ethernet
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.100.20 //IP地址
NETMASK=255.255.255.0 //子网掩码
DNS1=192.168.100.20 //DNS
----
[root@centos02 ~]# systemctl restart network //重新启动网卡服务
[root@centos02 ~]# cat /etc/resolv.conf //查看DNS是否配置成功
# Generated by NetworkManager
nameserver 192.168.100.20

2、安装DNS服务

1)挂载系统光盘

[root@centos02 ~]# mount /dev/cdrom /mnt/ //挂载系统光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos02 ~]# ls /mnt/ //查看系统光盘是否挂载成功
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
2)安装DNS程序包

[root@centos02 ~]# rpm -ivh /mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm
警告:/mnt/Packages/bind-9.9.4-50.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:bind-32:9.9.4-50.el7 ################################# [100%]
[root@centos02 ~]# rpm -ivh /mnt/Packages/bind-chroot-9.9.4-50.el7.x86_64.rpm
警告:/mnt/Packages/bind-chroot-9.9.4-50.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:bind-chroot-32:9.9.4-50.el7 ################################# [100%]

3、修改DNS配置文件

1)修改DNS主配置文件

[root@centos02 ~]# echo "" > /etc/named.conf //清空主配置文件
[root@centos02 ~]# vim /etc/named.conf //进入主配置文件
---
options {
listen-on port 53 { any; };
};
zone "duanjiaxu.com" IN {
type master;
file "var/named/duanjiaxu.com.zone";
};
zone "djx.com" IN {
type master;
file "var/named/djx.com.zone";
};

2)修改第一个DNS区域胚子和文件

[root@centos02 ~]# vim /var/named/duanjiaxu.com.zone //进入第一个区域配置文件
---
$TTL 86400
@ SOA duanjiaxu.com. root.duanjiaxu.com. (
2023020510
1H
15M
1W
1D
)
@ NS centos02.duanjiaxu.com.
centos02 A 192.168.100.20
www A 192.168.100.10
---
[root@centos02 ~]# named-checkzone duanjiaxu.com /var/named/duanjiaxu.com.zone //查看区域配置文件语法是否有误
zone duanjiaxu.com/IN: loaded serial 2023020510
OK
3)修改第二个DNS区域配置文件

[root@centos02 ~]# cp /var/named.duanjiaxu.com.zone /var/named.djx.com.zone //复制第一个区域配置文件
[root@centos02 ~]# vim /var/named.djx.com.zone //进入第二个区域配置文件
---
:%s/duanjiaxu.com/djx.com/g //把duanjiaxu.com替换为djx.com
$TTL 86400
@ SOA djx.com. root.djx.com. (
2023020510
1H
15M
1W
1D
)
@ NS centos02.djx.com.
centos02 A 192.168.100.20
www A 192.168.100.30 //IP地址修改为第二台apache服务器的IP地址


4)重新启动DNS服务

[root@centos02 ~]# systemctl restart named //重新启动DNS服务
[root@centos02 ~]# netstat -anptu | grep named //监听网卡
tcp 0 0 192.168.100.20:53 0.0.0.0:* LISTEN 41066/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 41066/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 41066/named
tcp6 0 0 ::1:953 :::* LISTEN 41066/named
udp 0 0 192.168.122.1:53 0.0.0.0:* 41066/named
udp 0 0 192.168.100.20:53 0.0.0.0:* 41066/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 41066/named
5)使用win10虚拟机验证第一台apache服务器是否能够正常访问

三、在Centos03安装LAMP平台,使用www.djx.com访问

1、配置网卡服务

1)配置IP地址和DNS

[root@centos03 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 //进入网卡配置文件
---
TYPE=Ethernet
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.100.30
NETMASK=255.255.255.0
DNS1=192.168.100.20
[root@centos03 ~]# systemctl restart network //重新启动网卡服务
[root@centos03 ~]# cat /etc/resolv.conf //查看DNS配置是否生效
# Generated by NetworkManager
nameserver 192.168.100.20
2)挂载系统光盘

[root@centos03 ~]# mount /dev/cdrom /mnt/ //挂载系统光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos03 ~]# ls /mnt/ 查看是否挂载成功
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@centos03 ~]# rm -rf /etc/yum.repos.d/CentOS-* //删除系统自带的yum源
[root@centos03 ~]# ls /etc/yum.repos.d/
local.repo
[root@centos03 ~]# cat /etc/yum.repos.d/local.repo
[local]
name=centos
baseurl=file:///mnt
enabled=1
gpgcheck=0

[root@centos03 ~]# yum -y install httpd php php-mysql mariadb-server //安装LAMP平台

2、修改apache的主配置文件

1)设置网站主页

[root@centos03 ~]# mkdir /www //新建网站根目录
[root@centos03 ~]# echo "www.djx.com" > /www/index.html //设置网站主页
[root@centos03 ~]# vim /var/www/html/index.php //配置php测试页
---
<?php
phpinfo();
?>
2)修改apache主配置文件

[root@centos03 ~]# mkdir /www //新建网站根目录
[root@centos03 ~]# echo "www.djx.com" > /www/index.html //设置网站主页
[root@centos03 ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak //备份主配置文件避免修改错误原文件丢失
[root@centos03 ~]# vim /etc/httpd/conf/httpd.conf //进入主配置文件
---
119 DocumentRoot "/www" //修改网站根目录
131 <Directory "/www"> //授权网站根目录
132 Options Indexes FollowSymLinks
133 AllowOverride None
134 Require all granted
135 </Directory>
---
[root@centos03 ~]# httpd -t //检查主配置文件是否修改正确
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe38:619c. Set the 'ServerName' directive globally to suppress this message
Syntax OK
[root@centos03 ~]# systemctl restart httpd //重新启动apache服务

3、验证

1)使用域名www.duanjiaxu.com访问nginx网站

2)使用域名www.djx.com访问apache网站

四、在nginx服务器配置动静分离,静态数据图片访问nginx动态php访问跳转到LAMP

1、配置动静分离

1)修改nginx主配置文件

[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf //进入nginx主配置文件
---
user nginx; //nginx管理用户
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;

access_log logs/access.log;
sendfile on;
keepalive_timeout 65;
server {
listen 192.168.100.10:80; //监听的IP地址和端口
server_name www.duanjiaxu.com; //域名
charset utf-8; //支持中文
access_log logs/www.duanjiaxu.com.access.log; //成功日志
location / {
root /www/; //网站根目录
index index.html index.htm;
}
location ~ .*\.(gif|jpg|jpeg|bmp|swf)$ {
root /www/;
index index.html index.html;
}
location ~ \.php$ {
proxy_pass http://www.djx.com;
}
}
}
---
[root@centos01 ~]# nginx -t /检查配置文件修改是否有误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@centos01 ~]# nginx //启动nginx服务
[root@centos01 ~]# netstat -anptu | grep nginx //监听网卡
tcp 0 0 192.168.100.10:80 0.0.0.0:* LISTEN 44180/nginx: master

2、验证

五、在Centos01安装新版本nginx实现平滑升级,配置ngixn监控访问监控进行基本身份验证

1、在Centos01安装新版本nginx实现平滑升级

1)停止nginx服务

[root@centos01 ~]# killall nginx //停止nginx服务
2)安装新版本nginx

[root@centos01 ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module //安装模块
[root@centos01 ~]# make //编译新版本nginx
[root@centos01 ~]# killall nginx //停止nginx服务
[root@centos01 ~]# mv /usr/local/sbin/nginx /usr/local/sbin/nginx.bak //备份老版本ngixn
[root@centos01 ~]# ln -s /usr/src/nginx-1.16.1/objs/nginx /usr/local/sbin/ //创建一个软连接
[root@centos01 ~]# nginx //启动nginx服务
[root@centos01 ~]# curl -I www.duanjiaxu.com //查看nginx版本号
HTTP/1.1 200 OK
Server: nginx/1.16.1 //版本号
Date: Wed, 08 Feb 2023 19:06:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 18
Last-Modified: Wed, 08 Feb 2023 17:38:26 GMT
Connection: keep-alive
ETag: "63e3de12-12"
Accept-Ranges: bytes

2、配置nginx监控进行基本身份验证

1)安装验证数据库

[root@centos01 ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-67.el7.centos.x86_64.rpm //安装验证数据库程序
[root@centos01 ~]# htpasswd -c /usr/local/nginx/password duanjiaxu //创建验证数据库账号名为duanjiaxu
New password: //设置密码
Re-type new password: //确认密码
Adding password for user duanjiaxu
2)修改nginx配置文件

[root@centos01 ~]# vim /usr/local/nginx/conf/nginx.conf //进入nginx主配置文件
---
location /status {
30 stub_status on;
31 access_log off;
32 auth_basic "welcom Auth";
33 auth_basic_user_file /usr/local/nginx/password;
34 }
---
[root@centos01 ~]# nginx -t //检查配置文件修改是否有误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@centos01 ~]# killall nginx //停止nginx服务
[root@centos01 ~]# nginx //启动 nginx服务
[root@centos01 ~]# netstat -anptu | grep nginx //监听网卡
tcp 0 0 192.168.100.10:80 0.0.0.0:* LISTEN 44553/nginx: master

3、验证



?作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

有关Nginx动静分离和平滑升级的更多相关文章

  1. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  5. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  6. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  7. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  8. ruby-on-rails - 从 Rails 2.3 升级到 Rails 4.0 - 2

    我们有一个目前在Rails2.3.12版和Ruby1.8.7版上运行的应用程序。我们想将我们的应用程序更新到Rails4.0和Ruby2.1.0。我们有大约200个模型和150个Controller。我想知道升级过程需要多大的努力。您还可以提供升级可以遵循的步骤。我们应该先升级Ruby然后再升级Rails还是相反? 最佳答案 您想要实现的目标将是史诗般的努力。我无法为您提供分步说明,因为不可能在一个答案中涵盖所有情况。我建议不要同时升级Ruby和Rails,而是分步升级。升级本身的复杂性是巨大的,但只要您的应用程序具有合理的测试覆盖

  9. ruby-on-rails - Rails 4.1.0.beta1 升级失败 - 2

    我最近尝试安装rails4.1.0.beta1,但是railss导致以下错误。[RVM]/gems/ruby-2.0.0-p247/gems/activesupport-4.1.0.beta1/lib/active_support/core_ext/module/aliasing.rb:32:in`alias_method':undefinedmethod`graft'forclass`ActiveRecord::Associations::JoinDependency'(NameError)[RVM]/gems/ruby-2.0.0-p247/gems/activesupport-4

  10. ruby-on-rails - ActionCable 无需升级到 Rails 5 beta - 2

    我目前有一个运行在4.2.5上的Rails应用程序,我想使用ActionCable而不必将整个应用程序升级到Rails5.0.0.beta3版本并冒破坏所有其他gem的风险。按照我在互联网上看到的指南,我已经尝试过gem'actioncable',github:'rails/actioncable'这不起作用,因为ActionCable存储库已合并到Rails存储库中。我什至试过gem'actioncable',github:'rails/rails'但这似乎不适用于ActionCable合并到Rails时发生的版本重新编号。(唯一低于5.0.0.beta*的版本是0.0.0,这似乎是

随机推荐