目录
1.LNMP概述
Nginx
是开源、高性能、高可靠的 Web
和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx
最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx
是免费的并可以商业化,配置使用也比较简单。
Nginx 特点
-
高并发、高性能;
-
模块化架构使得它的扩展性非常好;
-
异步非阻塞的事件驱动模型这点和
Node.js
相似; -
相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性;
-
热部署、平滑升级;
-
完全开源,生态繁荣;
Nginx 作用
Nginx 的最重要的几个使用场景:
-
静态资源服务,通过本地文件系统提供服务;
-
反向代理服务,延伸出包括缓存、负载均衡等;
-
API
服务,OpenResty
;
对于前端来说 Node.js
并不陌生, Nginx
和 Node.js
的很多理念类似, HTTP
服务器、事件驱动、异步非阻塞等,且 Nginx
的大部分功能使用 Node.js
也可以实现,但 Nginx
和 Node.js
并不冲突,都有自己擅长的领域。 Nginx
擅长于底层服务器端资源的处理(静态资源处理转发、反向代理,负载均衡等), Node.js
更擅长上层具体业务逻辑的处理,两者可以完美组合。
用一张图表示:
2.分布式部署LNMP操练
实验准备:
Nginx主机:CentOS 7-1
PHP主机: CentOS 7-2
MYSQL主机:CentOS 7-5
(1)实现部署
关闭三台主机的防火墙
查看挂载
CentOS 7-5:mysql
编译安装
创建mysql用户
useradd -M -s /sbin/nologin mysql
修改mysql配置文件
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
[mysql]
port = 3306
socket = /usr/local/mysql/mysql.sock
auto-rehash
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=4096
default-storage-engine=INNODB
max_allowed_packet=32M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
设置路径环境变量
[root@localhost local]# cd mysql/bin/
[root@localhost bin]# pwd
/usr/local/mysql/bin
[root@localhost bin]# ls
innochecksum mysqlcheck mysqlimport mysql_tzinfo_to_sql
lz4_decompress mysql_client_test mysql_install_db mysql_upgrade
myisamchk mysql_client_test_embedded mysql_plugin mysqlxtest
myisam_ftdump mysql_config mysqlpump perror
myisamlog mysql_config_editor mysql_secure_installation replace
myisampack mysqld mysqlshow resolveip
my_print_defaults mysqld_pre_systemd mysqlslap resolve_stack_dump
mysql mysqldump mysql_ssl_rsa_setup zlib_decompress
mysqladmin mysqldumpslow mysqltest
mysqlbinlog mysql_embedded mysqltest_embedded
[root@localhost bin]# vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
数据库初始化操作
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \ #生成初始化密码为空
--user=mysql \ #指定管理用户
--basedir=/usr/local/mysql \ #指定数据库的安装目录
--datadir=/usr/local/mysql/data #指定数据库文件的存储路径
添加mysqld系统服务
cp mysqld.service /usr/lib/systemd/system #用于systemctl服务管理
systemctl daemon-reload #刷新识别
systemctl start mysqld.service #开启服务
systemctl enable mysqld #开机自启动
netstat -anpt | grep 3306 #查看端口
登录数据库
Nginx主机:CentOS 7-1
[root@localhost yum.repos.d]# cd /opt/
[root@localhost opt]# ls
nginx-1.26.1.tar.gz
[root@localhost opt]# tar xf nginx-1.26.1.tar.gz
[root@localhost opt]# ls
nginx-1.26.1 nginx-1.26.1.tar.gz
[root@localhost opt]# cd nginx-1.26.1/
[root@localhost nginx-1.26.1]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
[root@localhost nginx-1.26.1]# yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
local | 3.6 kB 00:00:00
软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本
安装依赖包
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
[root@localhost nginx-1.26.1]# useradd -M -s /sbin/nologin nginx #创建nginx用户
[root@localhost nginx-1.26.1]# useradd -M -s /sbin/nologin nginx
[root@localhost nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
[root@localhost nginx-1.26.1]# make -j 2
[root@localhost nginx-1.26.1]# make install #编译安装
创建软链接
[root@localhost nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
添加 Nginx 系统服务
[root@localhost nginx]# cd /usr/lib/systemd/system
[root@localhost system]# vim nginx.service
[root@localhost system]# systemctl start nginx.service
[root@localhost system]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@localhost system]# netstat -lntp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7207/nginx: master
5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置 nginx 支持 PHP 解析
worker_processes auto;
worker_rlimit_nofile 65535;
server {
listen 80;
server_name www.xy101.com;
charset utf-8;
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 192.168.80.40:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
include fastcgi_params;
}
[root@localhost 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@localhost conf]# systemctl restart nginx
验证PHP 测试页
[root@localhost conf]# mkdir -p /var/www/html
[root@localhost conf]# cd /var/www/html #动态页面的目录
[root@localhost html]# ls
[root@localhost html]# vim test.php
<?php
phpinfo();
?>
访问静态页面
安装rpcbind
创建论坛
(1)解压
(2) 调整论坛目录的权限
[root@localhost html]# chown -R nginx:nginx discuz/
[root@localhost html]# ll
总用量 12
drwxr-xr-x 13 nginx nginx 4096 5月 30 18:36 discuz
-rw-r--r-- 1 root root 151 5月 30 17:44 mysql.php
-rw-r--r-- 1 root root 20 5月 30 15:33 test.php
PHP主机: CentOS 7-2
解压缩安装包
安装环境依赖包
安装环境依赖包
yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel pcre-devel
编译安装
cd php-7.1.10
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip
make && make install
路径优化
路径优化
ln -s /usr/local/php/bin/* /usr/local/bin/
ln -s /usr/local/php/sbin/* /usr/local/sbin/
调整PHP配置文件
php有三个配置文件:
php.ini 主配置文件
php-fpm.conf 进程服务配置文件
www.conf 扩展配置文件
#调整主配置文件:
cp php.ini-production /usr/local/php/lib/php.ini
vim /usr/local/php/lib/php.ini
--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai
php -m #验证安装的模块
#调整进程服务配置文件:
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid
[root@localhost php-7.1.10]# cp php.ini-production /usr/local/php/lib/php.ini
[root@localhost php-7.1.10]# cd /usr/local/php/lib/
[root@localhost lib]# ls
php php.ini
[root@localhost lib]# vim php.ini
#调整扩展配置文件:
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
vim www.conf
此处不修改成php
启动php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep php
#PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)是一个 PHPFastCGI 管理器, 由于Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析。
cd /opt/php-7.1.10/sapi/fpm
cp php-fpm.service /usr/lib/systemd/system/
systemctl restart php-fpm.service
验证数据库工作是否正常
[root@localhost fpm]# cd /var/www/html/
[root@localhost html]# ls
test.php
[root@localhost html]# vim mysql.php
<?php
$link=mysqli_connect('192.168.80.50','root','abc123');
if($link) echo "<h1>mysql connect Success!!</h1>";
else echo "mysql connect :Fail!!";
?>
测试如果mysql账户密码填错
挂载
[root@localhost php-7.1.10]# showmount -e 192.168.80.30
Export list for 192.168.80.30:
/var/www/html 192.168.80.0/24
[root@localhost php-7.1.10]# vim /etc/fstab
[root@localhost php-7.1.10]# mkdir /var/www/html -p
[root@localhost php-7.1.10]# mount -a
[root@localhost php-7.1.10]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 36G 5.9G 30G 17% /
/dev/sda1 509M 181M 329M 36% /boot
tmpfs 378M 12K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
/dev/sr0 4.5G 4.5G 0 100% /mnt
192.168.80.30:/var/www/html 36G 5.6G 30G 16% /var/www/html
192.168.80.30:/var/www/html /var/www/html nfs defaults,_netdev 0 0