草庐IT

nginx正则表达式和动静分离

乐吧嘎嘣脆 2023-03-28 原文

nginx正则表达式和动静分离

一、nginx简介

Nginx (“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上ngimx,的并发能力确实在同类型的网页服务器中表现较好

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

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

二、什么是反向代理

先了解一下正向代理 :通过在客户端配置代理服务器,通过代理服务器进行互联网访问!

反向代理

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

什么是负载均衡

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,由反向代理服务器将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

什么是动静分离

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

三、配置Nginx和动静分离和平滑升级

拓扑图:

推荐步骤:

1、在Centos01安装Nginx服务,使用​​www.huhu.com​​访问Nginx

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

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

实验步骤:

一、在Centos01安装Nginx服务,使用www.huhu.com​访问Nginx

1、传输文件

[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、挂载Centos7系统光盘

[root@centos01 ~]# mount /dev/cdrom /mnt/

mount: /dev/sr0 写保护,将以只读方式挂载

[root@centos01 ~]# ls /mnt/

CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7

EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
3、安装依赖程序

[root@centos01 ~]# yum -y install pcre-devel zlib-devel
4、创建管理Nginx用户

[root@centos01 ~]# useradd -M -s /sbin/nologin nginx
5、配置nginx

[root@centos01 ~]# tar zxf ./nginx-1.12.0.tar.gz -C /usr/src/

[root@centos01 ~]# cd /usr/src/nginx-1.12.0/

[root@centos01 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
6、编译安装Nginx

[root@centos01 nginx-1.12.0]# make && make install
7、优化命令

[root@centos01 nginx-1.12.0]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

[root@centos01 nginx-1.12.0]# cd
8、修改hosts文件

[root@centos01 ~]# vim /etc/hosts

9、复制hosts文件到100.20

[root@centos01 ~]# scp /etc/hosts root@192.168.100.20:/etc/
10、创建nginx网站根目录,设置网站主页

[root@centos01 ~]# mkdir /www

[root@centos01 ~]# echo "www.bdqn.com" > /www/index.html
11、客户端访问nginx

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

1、安装LAMP平台

[root@centos02 ~]# yum -y install httpd php php-mysql mariadb-server
2、启动服务

[root@centos02 ~]# systemctl start httpd

[root@centos02 ~]# systemctl enable httpd

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

[root@centos02 ~]# systemctl start mariadb

[root@centos02 ~]# systemctl enable mariadb

Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
3、设置apache网站主页

[root@centos02 ~]# echo "www.huyan.com" > /var/www/html/index.html
4、配置php测试页

[root@centos02 ~]# vim /var/www/html/index.php

5、修改Nginx主配置文件

user 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;

server_name www.bdqn.com;

charset utf-8;

access_log logs/www.huhu.com.access.log;

location / {

root /www/;

index index.html index.htm;

}

location ~ .*\.(gif|jpg|jpeg|bmp|swf)$ {

root /www/;

index index.html index.htm;

}

location ~ \.php$ {

proxy_pass http://www.huyan.com;

}

}

}
6、重新启动Nginx服务

[root@centos01 ~]# killall nginx

nginx: no process found

[root@centos01 ~]# nginx
7、验证静态数据图片访问Nginx动态php访问跳转到LAMP

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

1、安装验证数据库程序

[root@centos01 ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
2、生成验证数据库

[root@centos01 ~]# htpasswd -c /usr/local/nginx/password admin

New password:

Re-type new password:

Adding password for user admin
3、修改Nginx配置文件支持监控

user 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;

server_name www.bdqn.com;

charset utf-8;

access_log logs/www.huhu.com.access.log;

location / {

root /www/;

index index.html index.htm;

}

location ~ .*\.(gif|jpg|jpeg|bmp|swf)$ {

root /www/;

index index.html index.htm;

}

location ~ \.php$ {

proxy_pass http://www.huyan.com;

}

location /status {

stub_status on;

access_log off;

auth_basic "welcom Auth";

auth_basic_user_file /usr/local/nginx/password;

}

}

}
4、重启Nginx服务

[root@centos01 ~]# killall nginx

nginx: no process found

[root@centos01 ~]# nginx
5、配置Nginx平滑升级 停止老版本nginx服务

[root@centos01 ~]# killall nginx

nginx: no process found
6、解压新版本Nginx

[root@centos01 ~]# tar zxf ./nginx-1.16.1.tar.gz -C /usr/src/

[root@centos01 ~]# cd /usr/src/nginx-1.16.1/
7、配置新版本Nginx

[root@centos01 nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
8、编译Nginx

[root@centos01 nginx-1.16.1]# make
9、备份老版本进程

[root@centos01 ~]# mv /usr/local/sbin/nginx /usr/local/sbin/nginx.bak
10、生成新版本服务

[root@centos01 ~]# ln -s /usr/src/nginx-1.16.1/objs/nginx /usr/local/sbin/
11、启动服务

[root@centos01 ~]# nginx
12、验证Nginx监控访问监控进行基本身份验证

13、验证新版Nginx实现平滑升级

Created By Henry 共同学习 共同进步. 点赞收藏加关注.

有关nginx正则表达式和动静分离的更多相关文章

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

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

  2. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  3. ruby - 正则表达式将非英文字母匹配为非单词字符 - 2

    @raw_array[i]=~/[\W]/非常简单的正则表达式。当我用一些非拉丁字母(具体来说是俄语)尝试时,条件是错误的。我能用它做什么? 最佳答案 @raw_array[i]=~/[\p{L}]/使用西里尔字符进行测试。引用:http://www.regular-expressions.info/unicode.html#prop 关于ruby-正则表达式将非英文字母匹配为非单词字符,我们在StackOverflow上找到一个类似的问题: https://

  4. ruby - 正则表达式在哪个位置失败? - 2

    我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

  5. ruby - 有没有办法从 ruby​​ case 语句中访问表达式? - 2

    我想从then子句中访问c​​ase语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案

  6. ruby - 正则表达式 - 排除一个字符 - 2

    这是一个例子:s="abcd+subtext@example.com"s.match(/+[^@]*/)Result=>"+subtext"问题是,我不想在其中包含“+”。我希望结果是“潜台词”,没有+ 最佳答案 您可以在正则表达式中使用括号来创建匹配组:s="abcd+subtext@example.com"s=~/\+([^@]*)/&&$1=>"subtext" 关于ruby-正则表达式-排除一个字符,我们在StackOverflow上找到一个类似的问题:

  7. ruby - 如何遍历 Ruby 中所有正则表达式匹配的字符串? - 2

    我们有一个字符串:“”这个正则表达式://i如何从当前字符串中获取所有匹配项? 最佳答案 "".scan(//)参见scan在ruby​​-docs上 关于ruby-如何遍历Ruby中所有正则表达式匹配的字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6857852/

  8. Ruby 正则表达式匹配逗号,但忽略括号中的逗号 - 2

    我正在尝试通过正则表达式拆分参数列表。这是一个带有我的参数列表的字符串:"a=b,c=3,d=[1,3,5,7],e,f=g"我想要的是:["a=b","c=3","d=[1,3,5,7]","e","f=g"]我试过先行,但Ruby不允许使用动态范围后行,所以这行不通:/(?如何让正则表达式忽略方括号中的所有内容? 最佳答案 也许这样的东西对你有用:str.scan(/(?:\[.*?\]|[^,])+/)编辑再三考虑。简单的非贪婪匹配器在某些嵌套括号的情况下会失败。 关于Ruby正则

  9. 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的端口(因为绑定(

  10. ruby - 查找重叠的正则表达式匹配项 - 2

    我想找到给定字符串中的所有匹配项,包括重叠匹配项。我怎样才能实现它?#Example"a-b-c-d".???(/\w-\w/)#=>["a-b","b-c","c-d"]expected#Solutionwithoutoverlappedresults"a-b-c-d".scan(/\w-\w/)#=>["a-b","c-d"],but"b-c"ismissing 最佳答案 在积极的前瞻中使用捕获:"a-b-c-d".scan(/(?=(\w-\w))/).flatten#=>["a-b","b-c","c-d"]参见Rubyde

随机推荐