lnmp架构简介
- LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写
- L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统,代表版本有:debian、centos、ubuntu、fedora、gentoo等
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器
Mysql是一个小型关系型数据库管理系统
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统
原理:浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx.服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
nginx简介
传送门
概念:
- Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
- 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 作为 web 服务器:
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。
正向代理:
Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
- 简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理
- 需要在客户端配置代理服务器进行指定网站访问
反向代理:
- 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
- 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。
负载均衡
部署nginx
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1/
./configure --help | less
yum install -y pcre-devel openssl-devel
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make
make install
cd /usr/local/nginx/sbin/
./nginx
netstat -antlp
优化nginx
[root@server1 /mnt/nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
[root@server1 /mnt/nginx-1.20.1]# make
不要再做make install 会刷新文件
[root@server1 /mnt/nginx-1.20.1/objs]# rm -f /usr/local/nginx/sbin/nginx
[root@server1 /mnt/nginx-1.20.1/objs]# cp nginx /usr/local/nginx/sbin/
[root@server1 /mnt/nginx-1.20.1/objs]# cd
[root@server1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@server1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@server1 ~]# 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@server1 ~]# nginx
[root@server1 ~]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/ #此时已经不再输出版本号
Date: Tue, 31 Aug 2021 07:13:33 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 31 Aug 2021 04:58:13 GMT
Connection: keep-alive
ETag: "612db6e5-264"
Accept-Ranges: bytes
配置管理nginx
[root@server1 ~]# cd /usr/local/nginx/conf/
[root@server1 /usr/local/nginx/conf]# useradd -d /usr/local/nginx/ -M -s /sbin/nologin nginx
[root@server1 /usr/local/nginx/conf]# vim nginx.conf
以nginx用户身份执行nginx
[root@server1 /usr/local/nginx/conf]# vim nginx.conf
[root@server1 /usr/local/nginx/conf]# 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@server1 /usr/local/nginx/conf]# nginx -s reload
[root@server1 /usr/local/nginx/conf]# ps ax
worker_processes默认与核心数保持一致,auto为自动识别
设置最大连接访问数量
访问数量限制的优先级:kernel > system > app(nginx)
修改系统级
vim /etc/security/limits.conf
nginx -s reload
更改nginx服务为系统启动
我们每次需要进入nginx所在目录当中,进行源文件的输入才能够将nginx服务启动或者关闭,我们可以添加系统当中的systemd的文件,这样就可以使用系统级别的nginx的启动关闭或者开机自启动
传送门
[root@server1 /etc/systemd/system]# vim nginx.service
[root@server1 /etc/systemd/system]# systemctl daemon-reload
更改文件的路径为自己的路径
systemctl start nginx
添加后端服务器测试负载均衡
实验环境:
server1 172.25.25.1 nginx-master
server2 172.25.25.2 nginx后端
server3 172.25.25.3 nginx后端
配好的nginx目录发给另外两台虚拟机,在两个后端配置nginx服务,默认连接数为1024即可,无需设定用户。
[root@server1 /usr/local]# scp -r nginx/ 172.25.25.2:/usr/local/
[root@server1 /usr/local]# scp -r nginx/ 172.25.25.3:/usr/local/
[root@server2 /usr/local/nginx/conf]# vim nginx.conf #更改为默认的nginx状态,不影响实验效果即可
[root@server2 /usr/local/nginx/conf]# pwd
/usr/local/nginx/conf
[root@server2 /usr/local/nginx/conf]# 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@server2 /usr/local/nginx/conf]# nginx
定不同的web默认页面以示区别
[root@server2 /usr/local/nginx/html]# echo server2 > index.html
[root@server2 /usr/local/nginx/html]# curl localhost
server2
[root@server3 /usr/local/nginx/html]# echo server3 > index.html
[root@server3 /usr/local/nginx/html]# curl localhost
server3
在调度端server1,编辑主配置文件,添加负载均衡器;在http模块中添加负载均衡器,默认为rr调度
[root@server1 /usr/local/nginx/conf]# pwd
/usr/local/nginx/conf
[root@server1 /usr/local/nginx/conf]# vim nginx.conf
server就相当于apache里的虚拟主机,访问www.westos.org这个域名就会根据负载均衡器算法调度到两个后端
重新加载nginx -t
真机更改地址解析后访问
server 172.25.25.2:80 weight=2;
代表访问2的负载为2次
nginx -s stop
停掉一个后端,访问发现均衡到另外一个后端
若两个后端都停止nginx,则访问报错
server localhost:80 backup;
将nginx主机1作为备机,当后端都挂掉后启用
ip_hash;
将访问的第一个后端一直作为客户端使用的主机,此命令和backup冲突,需要注释掉备机
版本平滑升级
传送门
下载一个新版本的nginx,解压进入解压目录,关闭debug
进行源码编译三部曲的前两步
[root@server1 /mnt]# tar zxf nginx-1.21.1.tar.gz
[root@server1 /mnt/nginx-1.21.1]# vim auto/cc/gcc
[root@server1 /mnt/nginx-1.21.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
[root@server1 /mnt/nginx-1.21.1]# make
到软件目录下备份旧版本的二进制程序,并将新版本的二进制程序放到执行目录下
[root@server1 /mnt/nginx-1.21.1]# cd /usr/local/nginx/sbin/
[root@server1 /usr/local/nginx/sbin]# ls
nginx
[root@server1 /usr/local/nginx/sbin]# cp nginx nginx.old
[root@server1 /mnt/nginx-1.21.1/objs]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@server1 /mnt/nginx-1.21.1/objs]# \cp -f nginx /usr/local/nginx/sbin/
关掉旧版本的master,告知应用程序重载配置文件。发送升级信号,会在原master不关闭的情况下关闭其worker,并且新开master以及worker,使用新的nginx文件
SIGUSR1和SIGUSR2是发送给一个进程的信号,它表示了用户定义的情况。
USR1亦通常被用来告知应用程序重载配置文件
查看版本
回退:
发送SIGHUP信号,重新加载进程;SIGWINCH信号是默认进程忽略的信号,窗口大小改变时发出
回退成功