部署LNMP

LNMP 主流的企业网站平台之一
-L :Linux操作系统
-N :Nginx网站服务软件
-M :MySQL,MariaDB数据库
-P :网站开发语言(PHP,Perl,python)
一、软件的安装
安装Nginx,MariaDB,PHP
mariadb(数据库客户端软件)、mariadb-server(数据库服务器软件)、mariadb-devel(其他客户端软件的依赖包)、php(解释器)、php-fpm(进程管理器服务)、php-mysql(PHP的数据库扩展包)
1 Nginx安装
Nginx简介
-是俄罗斯人编写的十分轻量级的HTTP服务器
-是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器
Nginx配置文件及目录
-/usr/local/nginx/ 安装目录
-conf/nginx.conf 主配置文件
-html 网页目录
-logs 日志文件
-sbin/nginx 启动脚本

-V:查看编译参数
-c:指定配置文件,启动服务
[root@svr7 nginx]# sbin/nginx -V //查看编译参数
[root@svr7 nginx]# sbin/nginx //开启服务
[root@svr7 nginx]# sbin/nginx -s stop //关闭服务
[root@svr7 nginx]# sbin/nginx -s reload //重置配置文件(刷新)
[root@proxy nginx]# ls logs //日志文件
access.log error.log nginx.pid(进程文件)

[root@svr7 ~]# tar -xf lnmp_soft.tar.gz

[root@svr7 ~]# ls lnmp_soft

[root@svr7 ~]# cp lnmp_soft/nginx-1.17.6.tar.gz /opt/

[root@svr7 ~]# ls /opt/

[root@svr7 ~]# cd /opt/

[root@svr7 ~]#tar -xf nginx-1.17.6.tar.gz

[root@svr7 ~]# cd nginx-1.17.6/

[root@svr7 ~]# yum -y install gcc //编译

[root@svr7 ~]# yum -y install pcer-devel //支持正则

[root@svr7 ~]# yum -y install openssl-devel //网站加密

[root@svr7 ~]# ./configure

–prefix=/usr/local/nginx \ 指定安装目录
–user=nginx \ 指定账户名称
–group=nginx \ 指定组名称
–with-http_ssl_module \ 支持网站加密
–with-http_stub_status \ //开启status状态页面
–with-stream //开启4层反向代理功能,开启TCP/UDP代理模块

[root@svr7 ~]# make && make install 编译安装
[root@svr7 ~]# /usr/local/nginx/sbin/nginx

[root@svr7 ~]# netstat -ntualp | grep :80

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

-a显示所有端口的信息

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

-t显示TCP连接的端口

-u显示UDP连接的端口

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

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

2 安装MariaDB

[root@svr7 ~]# yum -y install mariadb-server
[root@svr7 ~]# yum -y install mariadb
[root@svr7 ~]# yum -y install mariadb-devel
[root@svr7 ~]# systemctl restart mariadb
[root@svr7 ~]# systemctl status mariadb
[root@svr7 ~]# netstat -ntualp | grep :3306

3 安装PHP

[root@svr7 ~]# yum -y install php
[root@svr7 ~]# yum -y install php-fpm //进程管理器
[root@svr7 ~]# yum -y install php-mysql//PHP扩展库文件,可以使PHP连接mariadb数据库
[root@svr7 ~]# systemctl restart php-fpm
[root@svr7 ~]# netstat -ntulap |grep :9000

静态网站 访问环境发生变化时,网站内容不会发生变化
动态网站 访问环境发生变化时,网站的内容可能会发生变化

二、fastCGI工作原理

  1. 工作流程
    .web server启动时载入fastCGI进程管理解释器
    .fastCGI 进程管理初始化,启动多个解释器进程
    .当客户机请求达到web server时,fastCGI进程管理器选择并连接到一个解释器
    .fastCGI子进程完成处理后返回结果,将标准输出和错误信息从同一连接返回web server

  2. fastCGI简介
    fastCGI技术目前支持语言:
    PHP C/C++ Java Prel Python Ruby等

fastCGI缺点
内存消耗大
-因为是多进程,所以进程消耗更的服务器内存,PHP-CGI解释器每个进程消耗7-25M内存。

3.压力测试工具
ab
-ab -c 并发数 -n 总请求数 URL

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

about:cache(缓存)
三、Session与Cookie

session 存储在服务端,保存用户名,登录状态等信息
cookies 有服务器下发给客户端,保存在客户端的一个文件里。保存的内容包括sessionID
ss命令可以查看系统中启动的端口信息,该命令常用选项如下:

-a显示所有端口的信息

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

-t显示TCP连接的端口

-u显示UDP连接的端口

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

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

注意:在RHEL7系统中可以使用ss命令替代netstat命令,功能一样,选项一样。
[root@proxy ~]# ls /var/lib/php/session/ 服务端session存放的位置

实践操作

一、Nginx基于域名的虚拟主机及用户认证

前面已将平台搭建OK
proxy主机
1.检查所有服务是否都已开启及安装httpd-tools
[root@proxy ~]# yum -y install httpd-tools
使用htpasswd命令创建账户文件,需要安装httpd-tools
在这里插入图片描述2.配置
在这里插入图片描述3.[root@proxy ~]# htpasswd -c /usr/local/nginx/pass zhangsan //创建密码文件在这里插入图片描述[root@proxy ~]# htpasswd /usr/local/nginx/pass lisi
再次创建则不需要-c选项
在这里插入图片描述[root@proxy ~]# cat /usr/local/nginx/pass
查看pass文件
在这里插入图片描述[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

用firefox访问ip,则显示此页面看到需输入用户及密码
在这里插入图片描述在这里插入图片描述

4.[root@proxy ~]# vim /usr/local/nginx/conf/nginx.con修改Nginx服务配置,添加虚拟主机配置

在这里插入图片描述5.创建目录及存放网页文件
[root@proxy ~]# mkdir /usr/local/nginx/html_aaa
[root@proxy ~]# echo this is test web > /usr/local/nginx/html_aaa/index.html
firefox访问 http://www.aaa.com

在这里插入图片描述6.创建基于端口的虚拟主机
同样修改配置文件
在这里插入图片描述
7.测试访问页面http://www.aaa.com://
在这里插入图片描述

二、配置加密的虚拟主机

配置基于加密网站的虚拟主机
源码安装Nginx时必须使用–with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。

加密算法一般分为对称算法、非对称算法、信息摘要。
对称算法有:AES、DES,主要应用在单机数据加密。
非对称算法有:RSA、DSA,主要应用在网络数据加密。
信息摘要:MD5、sha256,主要应用在数据完整性校验。

1生成私钥与证书
[root@proxy ~]# cd /usr/local/nginx/conf
[root@proxy ~]# openssl genrsa > cert.key //生成私钥
[root@proxy ~]# openssl req -new -x465 -key cert.key > cert.pem //生成证书

在这里插入图片描述2.[root@proxy ~]# vim /usr/local/nginx/conf/nginx.con
修改配置文件
在这里插入图片描述3.firefox访问https://192.168.2.5
在这里插入图片描述在这里插入图片描述

三 、Nginx结合FastCGI技术即可支持PHP页面架构(动静分离)

1.准备proxy,web1,web2,服务器
client客户端
[root@proxy ]# vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 //PHP端口号
pm.max_children = 32 //最大进程数量
pm.start_servers = 15 //最小进程数量
修改nginx主配置文件在这里插入图片描述
在这里插入图片描述2.书写一个PHP测试页面,放到默认路径
[root@proxy ~]# vim /usr/local/nginx/html/test.php
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
在这里插入图片描述3.访问测试页面
在这里插入图片描述Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log

Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log

PHP默认错误日志文件为/var/log/php-fpm/www-error.log

地址重写

格式:rewrite 旧地址 新地址 [选项];
last 不再读其他rewrite
break 不再读其他语句,结束请求
redirect 临时重定向
permanent 永久重定向

1.修改配置文件(访问a.html重定向到b.html)
1.1修改主配置文件
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

1.2.书写简单测试页面
[root@proxy ~]# echo “AAA” > /usr/local/nginx/html/a.html
[root@proxy ~]# echo “BBB” > /usr/local/nginx/html/b.html
[root@proxy ~]# systemctl restart nginx.service

1.3.firefox访问 http://192.168.4.5/a.html
在这里插入图片描述
2.访问a.html重定向到b.html(跳转地址栏)

2.1 主配置文件中添加临时重定向redirect
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
[root@proxy ~]# systemctl restart nginx.service
在这里插入图片描述
2.2 .firefox访问 http://192.168.4.5/a.html
在这里插入图片描述3.修改配置网站跳转,比如跳转京东页面;重启服务;firefox访问192.168.4.5
rewrite ^/(.*)$ http://www.jd.com/$1 ;
( )是正则表达式保留,相当于复制,后面的$1是粘贴

在这里插入图片描述回车一瞬间跳转京东页面
在这里插入图片描述
4.修改配置文件(实现安卓和火狐访问相同链接返回的页面不同)
4.1 创建目录及书写测试页面

[root@proxy ~]# mkdir -p /usr/local/nginx//html/firefox
[root@proxy ~]# mkdir -p /usr/local/nginx/html/Android
[root@proxy ~]# echo firefox page > /usr/local/nginx/html/firefox/index.html
[root@proxy ~]# echo android page > /usr/local/nginx/html/Android/index.html

4.2修改主配置文件(括号注意不要丢掉)
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
#这里,~符号代表正则匹配,符号代表不区分大小写
if ($ http_user_agent ~ * firefox) { //识别客户端firefox浏览器
rewrite ^(.
)$ /firefox/$1;
在这里插入图片描述4.3 重新刷新服务,firefox与Android 不同访问页面
[root@proxy ~]# systemctl restart nginx.service
在这里插入图片描述在这里插入图片描述

Nginx优化

1.Nginx反向代理
在这里插入图片描述
1.1 web1主机
[root@web1 ~]# firewall-cmd –set-default-zone=trusted
[root@web1 ~]# setenforce 0
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# vim /etc/httpd/conf.d/web.conf
[root@web1 ~]# echo 192.168.2.100 web1 > /var/www/html/index.html
在这里插入图片描述
1.2 http://192.168.2.100访问测试

在这里插入图片描述
1.3web 2主机同理
在这里插入图片描述1.4配置Nginx服务器,添加服务器池,实现反向代理功能

修改/usr/local/nginx/conf/nginx.conf配置文件
使用upstream定义后端服务器集群,集群名称任意(如web)
使用server定义集群中的具体服务器和端口
upstream web {
server 192.168.2.100:80;
server 192.168.2.200:80;
}
server {
listen 80;
server_name localhost;
location / {
通过proxy_pass将用户的请求转发给web集群
proxy_pass http://web;
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload刷新

在这里插入图片描述1.5 client客户端多次访问
[root@client ~]# curl http://192.168.4.5
多次访问,出现的次数都一样多,是因为没有设置权重
在这里插入图片描述

1.6.设置失败次数,超时时间,权重(健康检查)
weight设置服务器权重值,默认值为1
max_fails设置最大失败次数,测试服务器几次才确认服务器失败
fail_timeout设置失败超时时间,单位为秒
down标记服务器已关机,不参与集群调度
在这里插入图片描述再次访问出现次数不同
在这里插入图片描述2.1Nginx的TCP/UDP调度器–with-stream 支持四层代理模块
stream {
upstream ssh {
server 192.168.2.100:22; //后端SSH服务器的IP和端口
server 192.168.2.200:22;
}
server {
listen 22222; //Nginx监听的端口
proxy_pass ssh;
}
}
http {
… …
}

在这里插入图片描述
client测试

在这里插入图片描述
出现页面报错时可查看状态码,

在这里插入图片描述解决客户机登录集群主机失效的问题,ip_hash表示相同客户机访问相同服务器,客户机在首次登录网站时,代理服务器会根据客户的ip进行计算,并随机分配一台后端集群主机且不会再轮询给其他服务器。
在这里插入图片描述2.2编译安装时使用–with-http_stub_status_module开启状态页面模块(开启网站后台数据监测功能)
Active connections:当前活动的连接数量。
Accepts:已经接受客户端的连接总数量。
Handled:已经处理客户端的连接总数量。
(一般与accepts一致,除非服务器限制了连接数量)。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前多少客户端在等待服务器的响应。

在配置文件中的虚拟主机server中加入以下内容
location /status {
stub_status on;
#allow IP地址;
#deny IP地址;
}

在这里插入图片描述client 客户端测试
在这里插入图片描述
3优化Nginx并发量
对服务器进行压力测试并优化
yum -y install httpd-tools
ab -c 1000 -n 1000 http://192.168.2.5/ 使用压力测试工具ab,模拟1000人,对网站发起1000次访问
主配置文件
1, 开启的nginx进程数量(通常与cpu核心数一致)
2, 50000是每个进程支持的最大并发

在这里插入图片描述
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
在这里插入图片描述
[root@proxy ~]# vim /etc/security/limits.conf
[root@proxy ~]# ulimit -a //查看所有属性值
[root@proxy ~]# ulimit -Hn 100000 //设置硬限制(临时规则)
[root@proxy ~]# ulimit -Sn 100000 //设置软限制(临时规则)
在这里插入图片描述 [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.4.5/
在这里插入图片描述4.优化Nginx数据包头缓存

[root@proxy ~]# cat lnmp_soft/buffer.sh 
#!/bin/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
    URL=${URL}v$i=$i
done
curl $URL                                //经过5000次循环后,生成一个长的URL地址栏
[root@proxy ~]# ./buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center>        //提示头部信息过大

在这里插入图片描述
修改Nginx配置文件,增加数据包头部缓存大小
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
http {
client_header_buffer_size 200k; //默认请求包头信息的缓存
large_client_header_buffers 4 200k; //大请求包头部信息的缓存个数与容量
… …
}
在这里插入图片描述
5.浏览器本地缓存静态数据
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf

location ~* .(jpg|js|mp3|mp4)$ {
expires 30d; //定义客户端缓存时间为30天
}
在这里插入图片描述
火狐浏览器访问 firefox http://192.168.4.5/test.jpg

6. Session与Cookies
Session:存储在服务器端,保存用户名、登陆状态等信息。
Cookies:由服务器下发给客户端,保存在客户端的一个文件里。
步骤一 :
1)[root@web2 ~]# yum -y install gcc openssl-devel pcre-devel
… …

2)源码安装Nginx

[root@web1 ~]# tar -xf nginx-1.12.2.tar.gz
[root@web1 ~]# cd nginx-1.12.2
[root@web1 nginx-1.12.2]# ./configure
.> –with-http_ssl_module
[root@web1 nginx-1.12.2]# make && make install

3)安装MariaDB数据库

[root@web1 ~]# yum -y install mariadb mariadb-server mariadb-devel

4)安装PHP

[root@web1 ~]# yum -y install php php-mysql
[root@web1~]# yum -y install php-fpm

5)修改Nginx配置文件(修改默认首页与动静分离)

[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
}
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME

d

o

c

u

m

e

n

t

r

o

o

t

document_root

documentrootfastcgi_script_name;
include fastcgi.conf;
}

步骤二:启动LNMP服务器相关的服务

1)启动Nginx服务

[root@web1 ~]# systemctl stop httpd //如果该服务存在,则关闭该服务
[root@web1 ~]# /usr/local/nginx/sbin/nginx
[root@web1 ~]# ss -utnlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32428/nginx

2)启动MySQL服务

[root@web1 ~]# systemctl start mariadb
[root@web1 ~]# systemctl status mariadb

3)启动PHP-FPM服务

[root@web1 ~]# systemctl start php-fpm
[root@web1 ~]# systemctl status php-fpm

步骤三:部署前端Nginx调度服务器

1)使用源码安装nginx软件(如果Nginx软件包已安装可以忽略此步骤)

[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel
[root@proxy ~]# tar -xf nginx-1.12.2.tar.gz
[root@proxy ~]# cd nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure
[root@proxy nginx-1.12.2]# make && make install

2)修改Nginx配置文件,实现代理服务器

Nginx配置文件中,通过upstream定义后端服务器地址池,默认调度策略为轮询,使用proxy_pass调用upstream定义的服务器地址池:

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
upstream web {
server 192.168.2.100:80;
server 192.168.2.200:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web;
root html;
index index.php index.html index.htm;
}
}

3)重新加载配置文件

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
步骤四:测试环境是否配置成功

1)浏览器访问测试页面验证。

[root@client ~]# curl http://192.168.4.5

步骤五:部署测试页面

1)部署测试页面(Web1服务器)。

测试页面可以参考lnmp_soft/php_scripts/php-memcached-demo.tar.gz。

[root@web1 ~]# cd lnmp_soft/php_scripts/
[root@web1 php_scripts]# tar -xf php-memcached-demo.tar.gz
[root@web1 php_scripts]# cd php-memcached-demo
[root@web1 php-memcached-demo]# cp -r * /usr/local/nginx/html/

2)浏览器直接访问后端服务器的测试页面(Web1服务器)。

[root@web1 ~]# firefox http://192.168.2.100 /index.php
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

[root@web1 ~]# cd /var/lib/php/session/ //查看服务器本地的Session信息
[root@web1 session]# ls
sess_510h5tja6dtv5mjimu32mk4no5
3)部署测试页面(Web2服务器)同理跟web1。

7.构建memcached服务

add name 0 180 10 //变量不存在则添加
set name 0 180 10 //添加或替换变量
replace name 0 180 10 //替换
get name //读取变量
delete name //删除变量
flush_all //清空所有
注释:0表示不压缩,180为数据缓存时间,10为需要存储的数据字节数量。

将proxy,web1,web2三台nginx配置文件的location中找到index,在后面添加index.php。
在这里插入图片描述1)[root@proxy ~]# yum -y install memcached telnet

  1. memcached配置文件

[root@proxy ~]# vim /usr/lib/systemd/system/memcached.service
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

[root@proxy ~]# vim /etc/sysconfig/memcached

PORT=“11211” 使用的端口
USER=“memcached” 使用的账户
MAXCONN=“1024” 并发连接
CACHESIZE=“64” 使用64M内存

在这里插入图片描述

[root@proxy ~]# systemctl start memcached
使用telnet连接服务器测试memcached服务器功能,包括增、删、改、查等操作。
set abc 0 30 4 创建变量,无论是否存在,名称是abc,0是不压缩,30秒生命周期,可以存储4个字符
replace abc 0 100 4 可以替换现有变量,变量不存在时会失败
add abc 0 100 4 只能创建新变量,如果变量已经存在则失败
get abc 读取变量内容
delete abc 删除变量
如果输入错误可以用ctrl+删除键

PHP实现session共享
在web1 与 web2 修改session存储位置为proxy主机
vim /etc/php-fpm.d/www.conf
)为web1主机的PHP添加memcache扩展

[root@web1 ~]# yum -y install php-pecl-memcache
[root@web1 ~]# systemctl restart php-fpm

2)为web2主机的PHP添加memcache扩展

[root@web2 ~]# yum -y install php-pecl-memcache
[root@web2 ~]# systemctl restart php-fpm

[root@web1 ~]# vim /etc/php-fpm.d/www.conf

[root@web2 ~]# vim /etc/php-fpm.d/www.conf
在这里插入图片描述

nginx日志切割

#!/bin/bash
base_path=/usr/local/nginx/logs
log_path=$(date -d yesterday +%Y%m)
day= $(date -d yesterday +%d)
mkdir -p

b

a

s

e

p

a

t

h

/

base_path/

basepath/log_path
mv $base_path/access.log

b

a

s

e

p

a

t

h

/

base_path/

basepath/log_path/access_$day.log
kill -USR1 cat /usr/local/nginx/logs/nginx.pid


版权声明:本文为weixin_48419369原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_48419369/article/details/108041309