Nginx 2(部署LNMP,组建网站集群)

接着上一篇随笔Nginx1继续记录相关操作

LNMP 

 

静态网站  在不同情况下 访问网站的内容不会发生变化

动态网站  在不同情况下 访问网站的内容有可能发生变化 该种类网站显示内容效果更好,会让用户体验更好,更适合目前市场环境

 

部署LNMP环境,有了该环境,nginx就可以很便利的支持动态网站,这也是主流的企业网站平台之一

L  linux系统

N  nginx服务

M  mariadb数据库(mysql)

p   php网站开发语言

 

1,准备nginx以及相关软件包

cd  ~/lnmp_soft/nginx-1.17.6/

killall nginx    //杀掉nginx相关程序

rm -rf /usr/local/nginx/    //删除nginx原有目录

./configure  --with-http_ssl_module   //配置

make   //编译

make install   //安装

cd  /usr/local/nginx/

sbin/nginx    //开启服务

yum -y install  mariadb  mariadb-server  mariadb-devel   //安装

数据库的客户端、服务端、依赖包

yum -y install php   //安装php程序包

yum -y install php-mysql   //安装php与数据库关联的软件包

yum -y install php-fpm     //安装可以让nginx具有动态网站解析

能力的软件包

 

如果yum的光盘镜像要实现自动挂载,要修改/etc/fstab文件最后一行添加

/dev/cdrom  /mydvd   iso9660  defaults 0 0

 

[root@proxy nginx]# systemctl start mariadb    //开启数据库

[root@proxy nginx]# systemctl start php-fpm    //开启php-fpm

netstat -ntulp | grep :3306   //检查数据库服务

netstat -ntulp | grep :9000   //检查php-fpm服务

 

2,修改nginx配置

打开nginx配置文件,第65到71行去掉注释,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;  //这里需要修改名称

        }

 

 

sbin/nginx -s reload    //重新加载nginx配置文件

 

3,测试效果

cd ~/lnmp_soft/php_scripts/

cp test.php /usr/local/nginx/html/    //拷贝动态网站页面到nginx

http://192.168.2.5/test.php     //浏览器测试

 

cp mysql.php /usr/local/nginx/html/  

http://192.168.2.5/mysql.php    //浏览器测试

mysql   //进入数据库

create user dc@localhost identified by '123';   //创建账户配置密码

quit

http://192.168.2.5/mysql.php    //刷新浏览器测试

 

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

vim /etc/php-fpm.d/www.conf   //php-fpm相关的配置文件,此处

仅查看,无需修改

listen = 127.0.0.1:9000  //此处配置决定了php-fpm服务针对什么ip与

什么端口

pm.start_servers = 5  //一上来开启的进程数量,pstree可以查

看php-fpm(fastCGI)的进程数量,如果修改了需要重启php-fpm服务

pm.max_children = 50   //开启的fastCGI进程最大数量

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

四,地址重写,可以实现在用户访问特定地址后得到指定页面的功能

 

准备素材

[root@proxy nginx]# echo "nginx-A~~"  > html/a.html

[root@proxy nginx]# echo "nginx-B~~"  > html/b.html

cp conf/nginx.conf.default  conf/nginx.conf

cp:是否覆盖"conf/nginx.conf"y     

 

地址重写语法格式:

rewrite  旧地址  新地址   选项

 

地址重写测试1

vim conf/nginx.conf

rewrite  ^/a.html$  /b.html;   //打开nginx配置文件在42行添加

sbin/nginx -s reload

http://192.168.2.5/a.html   //浏览器访问a页面但看到的是b页面内容

 

地址重写测试2

rewrite ^/a.html$ /b.html redirect;   //添加重定向

sbin/nginx -s reload

http://192.168.2.5/a.html   //浏览器访问a页面时不但会跳转到b页面而且地址栏也发生变化

 

地址重写测试3:从老网站往新网站跳转

rewrite  /  http://www.tmooc.cn;     //访问老网站,跳转到新的

sbin/nginx -s reload

使用火狐浏览器访问192.168.2.5 会跳到tmooc.cn

 

地址重写测试4:不同网站的相同页面的跳转

打开nginx主配置文件,在第42行添加

rewrite /(.*) http://www.tmooc.cn/$1;  //访问老网站的某个页面时,跳转到

新网站对应的相同页面。前面使用正则表达式匹配用户输入的任意页面,并保存

起来(小括号在正则中的效果是保留,相当于复制),后面使用$1将之前保

存的页面地址粘贴到新网站

sbin/nginx -s reload   //重加载配置文件

使用火狐浏览器访问192.168.2.5/a.html可以转到www.tmooc.cn/a.html (由于该网

站没有a.html页面,会出现404报错属于正常)

 

地址重写测试5

cd /usr/local/nginx

mkdir html/firefox    //创建火狐浏览器专属目录

echo "proxy-firefox~~"  > html/firefox/index.html    //火狐浏览器专属页面

echo "proxy-other~~"  > html/index.html   //其他浏览器专属页面

 

修改nginx配置文件,将之前的rewrite语句删除,替换成以下内容

if  ($http_user_agent ~* firefox) {     //如果用户的浏览器使用了火狐,就执行

下面的rewrite任务,~代表匹配正则,*是不区分大小写,$http_user_agent是nginx

的内置变量,存储了用户的信息,比如用的什么浏览器

rewrite /index.html /firefox/index.html;  //如果用户浏览器是火狐就跳转到火

狐专用目录的页面

}

 

sbin/nginx -s reload   重加载配置文件

分别使用火狐浏览器与其他浏览器访问192.168.2.5,可以得到两个不同页面内容

则成功

 

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

二、地址重写的选项:

last    不再读其他rewrite

break   不再读其他语句

redirect   临时重定向     网站状态码是302

permanent  永久重定向   网站状态码是301

 

选项测试一:

修改配置文件,在42行、43行添加以下内容

rewrite /a.html /b.html last;    //如果没有last,看a页面会得到c页面

的内容,加了last之后,就不会再读后面的rewrite了

rewrite /b.html /c.html;

 

sbin/nginx -s reload

[root@proxy nginx]# cat html/a.html     //测试页面a,如果没有就创建

nginx-A~~

[root@proxy nginx]# cat html/b.html    //测试页面b,如果没有就创建

nginx-B~~

[root@proxy nginx]# echo "nginx-C~~"  > html/c.html    //测试页面c

 

使用火狐访问192.168.2.5/a.html 看到的是b页面

 

192.168.2.5/index.html

 

break  不再读其他语句

按下列方式修改配置文件,将默认的location中加入rewrite语句,然后

再创建一个新的location也加入rewrite语句

vim conf/nginx.conf   //打开配置文件,修改为以下状态,首先

在默认的location中添加rewrite,再新创建一个location也添加

rewrite语句。

        location / {     //此处为默认的

rewrite /a.html /b.html break;   //如果这里的选项依然用last,则仅仅会阻止

该location之内的rewrite语句,换成break就可以阻止之后的所有rewrite语句

            root   html;

            index  index.html index.htm;

        }

        location /b.html {    //这里是新添加的

rewrite /b.html /c.html;

}

 

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

三,用nginx实现网站代理功能 (组建网站集群)

一台服务器的能力是有限的,如果客户访问量比较大,可以利用nginx的代理功能组建集群,集群中的服务器越多集群整体性能就越强

 

1,集群中服务器的准备工作

[root@web1 ~]# yum -y install vim

[root@web1 ~]# yum -y install bash-completion  //tab键补全软件包

[root@web1 ~]# yum -y install net-tools  //网络工具软件包,支持ifconfig等命令

[root@web1 ~]# yum -y install httpd

echo "web1-httpd~~"  >  /var/www/html/index.html     //这里

如果是web2的话,要改成"web2-httpd~~"

systemctl start httpd

systemctl stop firewalld

之后web2的配置与web1基本一致

 

[root@proxy nginx]# curl 192.168.2.100    //配置好之后用proxy测试

web1-httpd~~

[root@proxy nginx]# curl 192.168.2.200

web2-httpd~~

 

2,在proxy主机修改配置实现集群效果

[root@proxy nginx]# cp  conf/nginx.conf.default  conf/nginx.conf

cp:是否覆盖"conf/nginx.conf"y

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

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

proxy_pass http://web;     //在第47行,调用集群

            root   html;

            index  index.html index.htm;

        }

 

sbin/nginx -s reload   //重加载nginx服务

curl 192.168.2.5    //看到的页面内容是web1与web2之间切换

 

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

四,集群的优化:

1,任务量分配

server 192.168.2.200:80 weight=2;   //设置权重,值越大,分配的

工作量越多

sbin/nginx -s reload

curl 192.168.2.5     //反复访问,可以看到web2工作量增加

 

2,健康检查

server 192.168.2.200:80 max_fails=2 fail_timeout=30;  //检测两次如果失败

,则认为集群中的主机故障,之后等待30秒再次测试

sbin/nginx -s reload

测试时,先将web2httpd服务关闭,回到proxy访问集群页面curl 192.168.2.5

只会显示web1的页面,此时即使将web2httpd服务开启也无效,因为要等

30秒

 

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

upstream web {

ip_hash;   //相同客户机访问相同服务器,让一个客户机访问集群时锁定

一个后台服务器,避免重复登陆的问题

server 192.168.2.100:80;

server 192.168.2.200:80 max_fails=2 fail_timeout=30;

}

sbin/nginx -s reload

curl 192.168.2.5     //反复访问不会再轮询访问后台集群主机了,只会咬住一台

 

4,添加down标记

server 192.168.2.100:80 down;   //down标记,使集群服务器暂时

不参与任务轮询

sbin/nginx -s reload

再次访问192.168.2.5,再也不会出现web1(即使删除ip_hash)

 

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

五,使用nginx实现其他业务集群

通常情况下nginx是搭建网站的工具,还可以组建网站集群,但如果后端的集群服务器跑的不是网站业务,就可以利用--with-stream模块创建非网站业务的集群。--with-http_stub_status_module是之后实验需要的模块,可以查看网站内部数据。

[root@proxy nginx]# sbin/nginx -s stop

[root@proxy nginx]# cd ~/lnmp_soft/nginx-1.17.6/

[root@proxy nginx-1.17.6]# rm -rf /usr/local/nginx/

./configure  --with-stream  --with-http_stub_status_module

make

make install

cd /usr/local/nginx/

sbin/nginx -V

 

2,创建集群

打开nginx主配置文件,在16行左右(http上面),添加以下内容

stream {         //创建新业务

upstream backend {    //创建名叫backend的集群

server 192.168.2.100:22;    //集群中的主机使用22端口对外提供服务

server 192.168.2.200:22;

}

server {

listen 12345;    //监听端口号

proxy_pass backend;    //调用集群

}

}

 

sbin/nginx   //开启服务

ssh  192.168.2.5 -p 12345    //尝试远程登录,第一次可能会连接集群的某一台主机比如web1

exit    //退出

rm -rf ~/.ssh/known_hosts   //删除记录文件

ssh  192.168.2.5 -p 12345   //再次尝试登录,会连接到另外一台集群主机

 

ss命令可以查看系统中启动的端口信息,该命令常用选项如下:

-a显示所有端口的信息

-n以数字格式显示端口号

-t显示TCP连接的端口

-u显示UDP连接的端口

-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口

-p显示监听端口的服务名称是什么(也就是程序名称)

注意:在RHEL7系统中可以使用ss命令替代netstat命令,功能一样,选

项一样。

 

 

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

六,nginx 常见问题处理

1404报错

客户访问网站时,如果看到了不存在的页面会有404报错的英文提示,这种

提示很不友好,可以通过自定义页面改善用户体验

首先修改配置文件 大概58~59行附近

error_page  404      /test.jpg;(图片名必须与修改的名一致)  //如果客户访问了不存在的页面就显示test.jpg的内容

找一张图片,内容随意,比如用中文标注"抱歉!您访问的页面不存在" 然后保

存成test.jpg格式,然后拷贝到proxy主机的/usr/local/nginx/html目录下

重新加载nginx配置

使用浏览器虽随意访问不存在的页面192.168.2.5/XXXX.html   就可以看到之前

那张图片的内容

 

 

 

posted @ 2021-11-07 20:17  种花家的一只兔子  阅读(112)  评论(0)    收藏  举报