部署LNMP环境

目录

部署LNMP环境,

实现动态网站解析

静态网站  在不同环境下,网站内容不会变化

动态网站  在不同环境下,网站内容有可能发生变化

地址重写的好处

nginx代理功能

实现集群功能(轮询)

集群优化(权重)

nginx实现的功能

使用nginx创建其他业务集群(四层代理)

排错:

Nginx的正向代理与反向代理


部署LNMP环境,

实现动态网站解析

静态网站  在不同环境下,网站内容不会变化

动态网站  在不同环境下,网站内容有可能发生变化

nginx默认不支持动态网站,但我们可以用LNMP环境让它支持。

淘宝就用的nginx搭建的。

L  linux    操作系统

N  nginx    网站服务   

M  mariadb(mysql)   数据库

P   php   编写动态网站的语言工具

准备nginx以及相关软件包

killall nginx  //停止nginx程序
cd  /root/lnmp_soft/nginx-1.17.6
rm -rf  /usr/local/nginx    //删除nginx原有目录
./configure  --with-http_ssl_module    //配置
make   //编译
make install   //安装
yum -y install  mariadb  mariadb-server   //安装数据库客户端
与服务端
systemctl start mariadb   //开启数据库服务
yum -y install  mariadb-devel  //安装数据库开发环境依赖包
yum -y install  php  //安装php,相当于解释器
yum -y install  php-fpm  //安装可以帮助nginx解析php语言编写的动
态网站的服务
yum -y install  php-mysql   //安装php与mysql关联的软件包
systemctl start  php-fpm   //开启php-fpm服务
yum -y install net-tools
netstat  -ntulp  | grep  mysql   //检查数据库
netstat  -ntulp  | grep  php-fpm   //检查php-fpm服务

准备动态网站页面的测试文件

cp  ~/lnmp_soft/php_scripts/test.php  /usr/local/nginx/html   //拷贝动态网站测试页面到nginx中
cd  /usr/local/nginx
sbin/nginx       //启动nginx服务
打开nginx配置文件,第6571行去掉注释(可以用:65,71s/#//),69行不用去
        location ~ \.php$ {   //~是使用正则表达式,匹配以.php结尾
            root           html;     //网站页面位置,不用改,保持默认
            fastcgi_pass   127.0.0.1:9000;  //一旦用户访问了.php结尾的文
件,就让nginx找后台的php-fpm(端口号9000
            fastcgi_index  index.php;    //动态网站的默认页面,无需修改
        #   fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;   
 //无用行,保持注释状态 
            include        fastcgi.conf;  //这里是另外一个配置文件,需要改扩展名
        }

---------------------------------------

fastCGI   

 快速公共(通用)网关接口,可以连接如nginx等网站程序到网站

的语言解释器(比如php)

---------------------------------------

sbin/nginx    //开启nginx,如果已经开启就使

sbin/nginx -s reload  如果均不能正常开启,就用killall nginx然后重新试

使用火狐访问http://192.168.2.5/test.php  可以看到页面内容

测试有数据库的动态网站(在普通情况下访问网站内容会发生变化)

动静分离:动态网站和静态网站分开处理的

cp  ~/lnmp_soft/php_scripts/mysql.php  /usr/local/nginx/html/   //拷贝另外一个测试页面到nginx
浏览器打开http://192.168.2.5/mysql.php   可以看到网站显示了数据的账户信息
mysql   //进入数据库 
create user dc@localhost identified by '123';   //创建测试账户
quit;  //退出

刷新http://192.168.2.5/mysql.php  可以看到新创建的用户

看到以上test.phpmysql.php两个页面说明nginx不但能识别静态网站,也能解析动态

网站了,这种情况也可以记作nginx实现了动静分离

地址重写

可以定义用户的访问路径可以看到的实际内容

rewrite  匹配路径   实际看到的页面    选项 

相同网站不同页面

cp conf/nginx.conf.default conf/nginx.conf    //可以先还原配置文件
cp:是否 覆盖"conf/nginx.conf"? y
打开配置文件,在38行添加
rewrite  /a.html  /b.html;    //用户访问的路径中包含a.html的话
就跳转到b.html页面
只要页面含有/html便能访问成功
然后准备测试页面
echo "nginx-a~~" > html/a.html
echo "nginx-b~~" > html/b.html
[root@proxy nginx]# sbin/nginx -s reload
使用浏览器访问192.168.2.5/a.html看到的是b.html的内容

相同网站不同页面

rewrite ^/a\.html$ /b.html redirect;   //在刚刚的配置中添加redirect
sbin/nginx -s reload
网站以html结尾以a.html开头才能才能搜索出来,不然是404报错;
Redirect意思是地址栏也改成对应网站,重定向;
使用http://192.168.2.5/a.html路径访问网站时,地址栏同时发生
变化

不同网站间跳转

rewrite / http://www.tmooc.cn;    //访问192.168.2.5的网站可以
跳转到www.tmooc.cn
sbin/nginx -s reload  

访问老网站会跳到新

rewrite /(.*) http://www.tmooc.cn/$1;    //访问老网站会跳到新
网站,同时会携带所访问的页面,()是正则,代表保留(复制)  $1表示粘贴之前第一个小括号保留的内容
sbin/nginx -s reload  

不同浏览器跳转到不同页面

mkdir  html/firefox
echo  firefox~~  >  html/firefox/abc.html
echo  others~~  >  html/abc.html
火狐专用页面	火狐访问192.168.2.5/abc.html时可以看html/firefox/abc.html里面内容
其他专用页面    其他访问192.168.2.5/abc.html 时可以看到html/abc.html里面内容
修改配置文件,删除原有地址重写,原地添加
if  ($http_user_agent  ~*  firefox){   //如果用户使用了火狐浏览器
rewrite  /(.*)  /firefox/$1;  //就进行地址重写操作,让用户看到火狐专属页面
}          
//$http_user_agent是nginx的内置变量,存储了用户的信息,比如用的什么浏览器
~匹配正则  *忽略大小写
改完后sbin/nginx  -s  reload  
使用火狐浏览器查看192.168.2.5/abc.html可以看到之前html/firefox目录下的页
面,非火狐浏览器打开192.168.2.5/abc.html看到的是html下的页面

redirect    临时重定向   状态码  302  

permanent  永久重定向  状态码  301

last  不再读其他rewrite

break  不再读其他语句

地址重写的好处

  • 缩短URL,隐藏实际路径提高安全性;

  • 易于用户记忆和键入;

  • 易于被搜索引擎收录。

nginx代理功能

该功能可以通过组建后台集群提高网站性能

环境准备

proxy  2.5

web1  2.100

web2  2.200

检查ip,同网段要互通,检查yum

在web1、web2主机安装常用软件包与网站服务httpd

yum -y install vim net-tools bash-completion psmisc httpd

然后继续准备网站页面

echo "web1~~" > /var/www/html/index.html   //创建测试页面,如果是web2主机的话要写web2~~
systemctl start httpd    //然后将web1、web2的服务开启
systemctl stop firewalld   //关闭防火墙

回到proxy主机:

[root@proxy nginx]# curl 192.168.2.100   //到proxy主机测试
web1~~
[root@proxy nginx]# curl 192.168.2.200
web2~~
接下来还原proxy主机的nginx
[root@proxy nginx]# cd ~/lnmp_soft/
[root@proxy lnmp_soft]# killall nginx
[root@proxy lnmp_soft]# rm -rf /usr/local/nginx/
[root@proxy lnmp_soft]# rm -rf nginx-1.17.6
[root@proxy lnmp_soft]# tar -xf nginx-1.17.6.tar.gz
[root@proxy lnmp_soft]# cd nginx-1.17.6/
[root@proxy lnmp_soft]#yum -y install gcc make pcre-devel openssl-devel
[root@proxy nginx-1.17.6]# ./configure 
[root@proxy nginx-1.17.6]#make
[root@proxy nginx-1.17.6]#make  install 

实现集群功能(轮询)

[root@proxy nginx]# vim conf/nginx.conf
upstream web {        //首先是34~37行,创建集群,集群名称叫web
server  192.168.2.100:80;   //这里是集群中的服务器ip与端口
server  192.168.2.200:80;   //第二台集群主机
}  
server {
        listen       80;
        .....
        location / {
proxy_pass  http://web;     //在第47行,调用集群
            root   html;
            index  index.html index.htm;
        }
之后开启nginx或者重加载nginx配置,用curl 192.168.2.5可以看到 web1 
或web2页面轮询出现

集群优化(权重)

1, 调节权重定义集群主机任务的分配量

server 192.168.2.200:80 weight=2;   //为性能较强的集群主机配置权重权重越大任务的分配量就越大
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web2~~
[root@proxy nginx]# curl 192.168.2.5
web1~~

2, 配置健康检查

server 192.168.2.200:80 max_fails=2 fail_timeout=30; //检测两次如果失败,则认为集群中的主机故障,之后等待30秒再次测试
sbin/nginx -s reload
测试时,先将web2的httpd服务关闭,回到proxy访问集群页面curl 192.168.2.5
只会显示web1的页面,此时即使将web2的httpd服务开启也无效,因为要等
30

3 .相同客户机访问相同服务器

upstream web {
ip_hash;   //相同客户机访问相同服务器,让一个客户机访问集群时锁定
一个后台服务器,避免重复登陆的问题
server 192.168.2.100:80;
server 192.168.2.200:80;
}
sbin/nginx -s reload
curl 192.168.2.5    //重加载配置后访问2.5只会看到一个网站的页面

4,添加down标记

upstream web {
server 192.168.2.100:80;
server 192.168.2.200:80 down;  //down标记可以让集群主机暂时不参与集群活动
}
sbin/nginx -s reload
curl 192.168.2.5

nginx实现的功能

网站服务,网站代理(网站业务),四层代理(其他业务)

使用nginx创建其他业务集群(四层代理)

[root@proxy nginx]# cd ~/lnmp_soft/nginx-1.17.6/
[root@proxy nginx-1.17.6]# killall nginx
[root@proxy nginx-1.17.6]# rm -rf /usr/local/nginx/
./configure  --with-stream  --with-http_stub_status_module
//这里的--with-stream 是添加四层代理模块,可以用来创建其
他业务集群,--with-http_stub_status_module是后面实验所需模块
另外,如果更新模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall  nginx 再重启即可
make    //编译
make install    //安装
cd /usr/local/nginx/
sbin/nginx -V   //查看安装模块情况
打开nginx主配置文件,在16行左右(http上面),添加以下内容
stream {         //创建新业务
upstream backend {    //创建名叫backend的集群
server 192.168.2.100:22;    //集群中的主机使用22端口对外提供服务,22是远程连接
server 192.168.2.200:22;
}
server {         //虚拟主机
listen 12345;    //监听端口号
proxy_pass backend;    //调用集群
}
}
sbin/nginx   //配置写好之后开启服务或者重加载配置文件
ssh  192.168.2.5 -p 12345    //尝试远程登录12345集群,第一次可能会连接集群的某一台主机比如web1
exit    //退出

排错:

如果配置没有错误,但无法反复登陆web1与web2,可以按下列方式解决

[root@proxy nginx]# rm -rf ~/.ssh/known_hosts   //每登录一次之后在proxy中删除记录文件
ssh  192.168.2.5 -p 12345   //再次尝试登录,会连接到另外一台集群主机

404报错(找不到文件)

打开配置文件,在默认的虚拟主机里面的location下面修改
error_page  404      /test.jpg;  //这里把#注释去掉,后面改成test.jpg
,效果是如果客户访问了不存在的页面就显示test.jpg的内容
sbin/nginx -s reload   //重加载配置
然后找一个图片扔到/usr/local/nginx/html里面,命名为test.jpg
使用浏览器虽随意访问不存在的页面192.168.2.5/XXXX.html   就可以看到之前
那张图片的内容
如果真机是windows可以用mobaXterm传test.jpg文件到nginx的html目录
如果真机是linux可以用scp命令

使用curl  192.168.2.5/status   查看

Active connections:当前活动的连接数量(当前有多少用户访问该网站)。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。

Nginx的正向代理与反向代理

正向代理代理客户端,反向代理代理服务器。

正向代理是一个位于客户端和原始服务器(origin server)之前的服务器,为了从原始服务器获取内容,客户端向代理发送一个请求并指定目标,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端客户端必须要进行一些特别的设置才能使用正向代理

比如需要访问某些国外网站,我们可能需要购买vpn

正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中

反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。反向代理是作用在服务器端的,是一个虚拟ip(VIP)

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340